Sign inSign up

hivehub/nexus

By hivehub

•Updated 3 months ago

High-performance property graph database with native vector search and binary-RPC-first clients

Image
Databases & storage
1

2.0K

hivehub/nexus repository overview

⁠Nexus

High-performance property graph database with native vector search.

License: Apache 2.0 GitHub

Nexus is a Neo4j-inspired graph engine written in Rust, designed for read-heavy workloads, retrieval-augmented generation (RAG) systems, and hybrid graph + vector search. Ships openCypher + native HNSW vector search in a single binary.

⁠Quick start

# Pull + run (HTTP API only, auth off for local dev)
docker run -d \
  --name nexus \
  -p 15474:15474 \
  -p 15475:15475 \
  -v nexus-data:/app/data \
  -e NEXUS_AUTH_ENABLED=false \
  hivehub/nexus:latest

# Smoke-test
curl http://localhost:15474/health
# Cypher over HTTP
curl -X POST http://localhost:15474/cypher \
  -H "Content-Type: application/json" \
  -d '{"query":"CREATE (n:Person {name:\"Alice\"}) RETURN n.name","parameters":{}}'

⁠Supported tags

TagContents
latest, 2.3.2Reliability bug-fix release (GH #11–#13): UNWIND-driven writes (UNWIND [...] AS row MERGE/SET ...) persist every row in one statement; property indexes survive a restart (definitions persisted + rebuilt at startup); fixed a sustained-write 100% CPU busy-loop (CALL { ... } IN TRANSACTIONS infinite loop + O(N)-per-write label stats).
2.3.1Read/MERGE index line (GH #7–#9): POST /cypher accepts "parameters": null; read MATCH (n:L {p:v}) uses a typed property-index seek (NodeIndexSeek) instead of a full scan; CREATE INDEX via the API registers + backfills the typed index.
2.3.0Bug-fix release (GH #3–#6): $param read-path binding + parameters body key, durable property-store reopen, GROUP BY by expression, UTF-8 /cypher bodies.
2.2.0Planner unindexed-property notification + slow-query observability.
2.1.0Caller-supplied external node IDs (_id) with ON CONFLICT ERROR/MATCH/REPLACE, six-SDK parity helpers.
2.0.0, v2.0.0Phase-8 ship train: encryption-at-rest core + KMS + WAL, quantified-path patterns, query-plan cache.

Pin a specific tag (e.g. hivehub/nexus:2.3.2) for production. latest floats forward on every release.

Every tag ships the HTTP API (:15474) and the binary RPC transport (:15475) the first-party SDKs use by default.

⁠Image layout

  • Base: dhi.io/debian-base:trixie-dev (Docker Hardened Image, glibc 2.41).
  • Binary: /usr/local/bin/nexus-server (single statically-linked release build of the workspace).
  • User: nexus (uid 1000), non-root.
  • Data directory: /app/data — mount a volume here for persistence.
  • Config directory: /app/config — optional, for config.yml.
  • Image size: ~70 MB.

⁠Ports

PortPurposeNotes
15474HTTP API (/cypher, /knn_traverse, /health, /stats, …)Primary entry point for REST clients.
15475Native binary RPC (nexus://host:15475)SDK default since v1.10. Leave unpublished for HTTP-only deployments and set [rpc].enabled = false in config.yml.

⁠Environment variables

VariableDefaultEffect
NEXUS_ADDR0.0.0.0:15474HTTP bind address.
NEXUS_DATA_DIR/app/dataPersistent data directory (mount a volume).
NEXUS_AUTH_ENABLEDtrueEnable bearer-token authentication on HTTP + RPC.
NEXUS_AUTH_REQUIRED_FOR_PUBLICtrueReject unauthenticated requests when binding to a non-localhost address.
NEXUS_ROOT_USERNAMEadminInitial root user name when auth is enabled.
NEXUS_ROOT_PASSWORD(unset)Initial root password. Prefer NEXUS_ROOT_PASSWORD_FILE for production.
NEXUS_ROOT_PASSWORD_FILE(unset)Path to a file containing the root password. Mount via docker run --secret or compose secrets.
NEXUS_ROOT_ENABLEDtrueProvision the root user on first boot.
NEXUS_DISABLE_ROOT_AFTER_SETUPfalseDisable the root user once you have provisioned a replacement admin — recommended for production.
RUST_LOGinfoLog level (trace, debug, info, warn, error).

⁠Production deployment with Docker secrets

mkdir -p secrets
echo "$(openssl rand -hex 32)" > secrets/root_password.txt
chmod 600 secrets/root_password.txt

docker run -d \
  --name nexus \
  -p 15474:15474 \
  -p 15475:15475 \
  -v nexus-data:/app/data \
  -v $(pwd)/secrets/root_password.txt:/run/secrets/nexus_root_password:ro \
  -e NEXUS_ROOT_USERNAME=admin \
  -e NEXUS_ROOT_PASSWORD_FILE=/run/secrets/nexus_root_password \
  -e NEXUS_AUTH_ENABLED=true \
  -e NEXUS_DISABLE_ROOT_AFTER_SETUP=true \
  hivehub/nexus:latest

⁠docker-compose

services:
  nexus:
    image: hivehub/nexus:latest
    container_name: nexus
    ports:
      - "15474:15474"
      - "15475:15475"
    volumes:
      - nexus-data:/app/data
      - ./config:/app/config:ro
    environment:
      NEXUS_ROOT_USERNAME: admin
      NEXUS_ROOT_PASSWORD_FILE: /run/secrets/nexus_root_password
      NEXUS_AUTH_ENABLED: "true"
      RUST_LOG: info
    secrets:
      - nexus_root_password
    restart: unless-stopped

volumes:
  nexus-data:
    driver: local

secrets:
  nexus_root_password:
    file: ./secrets/root_password.txt

⁠Health check

The image ships a HEALTHCHECK that polls /health every 30 s:

docker inspect --format='{{.State.Health.Status}}' nexus
# healthy

Programmatic probe:

curl -sf http://localhost:15474/health | jq .status
# "Healthy"

⁠Features

  • openCypher: ~55 % of the openCypher surface (300/300 Neo4j 2025.09.0 diff suite passing; the full cargo +nightly test --workspace suite is green).
  • External node IDs (_id): caller-supplied stable identifiers on nodes with ON CONFLICT ERROR/MATCH/REPLACE policies, REST surface (POST /data/nodes + GET /data/nodes/by-external-id), Cypher integration (CREATE/MERGE/MATCH (n {_id: ...})), and parity helpers in all six first-party SDKs. New in 2.1.0.
  • Full-text search: Tantivy-backed BM25 with per-index async writers, db.index.fulltext.* Neo4j-compatible procedure surface, and crash-recovery via WAL replay.
  • Vector search: HNSW kNN over f32 embeddings with SIMD-accelerated distance kernels (AVX-512 → AVX2 → SSE4.2 → NEON → scalar).
  • Geospatial: Point type (Cartesian / WGS-84, 2D / 3D), point.withinBBox / withinDistance / azimuth / distance predicates, spatial.bbox / distance / nearest / interpolate procedures with ERR_CRS_MISMATCH / ERR_BBOX_MALFORMED error taxonomy.
  • ACID transactions: epoch-based MVCC with a single-writer model; snapshot isolation for readers.
  • Multi-database: isolated catalogues within a single server via the DatabaseManager.
  • Binary RPC: first-party SDKs (Python, TypeScript, Rust, Go, C#, PHP) speak nexus:// natively for p95 sub-millisecond round-trips.

⁠License

Apache 2.0. © HiveLLM Contributors.

Tag summary

Content type

Image

Digest

sha256:7f178f61e…

Size

10.1 MB

Last updated

3 months ago

docker pull hivehub/nexus