NornicDB
NornicDB is a low-latency graph + vector, MVCC database with sub-ms writes, and sub 10ms HNSW search + graph traversal, uses Neo4j drivers (Bolt/Cypher) and qdrant's gRPC drivers so you can switch with no changes, then adding intelligent features like LLM inference, embeddings, HNSW+rerank search, GPU acceleration, Auto-TLP, Memory Decay, and MC
Install / Use
/learn @orneryd/NornicDBQuality Score
Category
Development & EngineeringSupported Platforms
README
Try It With One Command
# arm64 / Apple Silicon
docker run -d --name nornicdb -p 7474:7474 -p 7687:7687 -v nornicdb-data:/data timothyswt/nornicdb-arm64-metal-bge:latest
# amd64 / CPU only
docker run -d --name nornicdb -p 7474:7474 -p 7687:7687 -v nornicdb-data:/data timothyswt/nornicdb-amd64-cpu-bge:latest
Open http://localhost:7474 for the admin UI. For NVIDIA CUDA hosts, use timothyswt/nornicdb-amd64-cuda-bge:latest. For Vulkan hosts, use timothyswt/nornicdb-amd64-vulkan-bge:latest.
What Problem Does This Solve?
NornicDB is a high-performance graph database designed for AI agents and knowledge systems. It speaks Neo4j's language (Bolt protocol + Cypher) so you can switch with zero code changes, while adding intelligent features that traditional databases lack.
NornicDB automatically discovers and manages relationships in your data, weaving connections that let meaning emerge from your knowledge graph.
Transactional Guarantees & Isolation
NornicDB implements Snapshot Isolation at the storage layer. Every transaction is anchored to a specific MVCC version at begin time, providing a consistent point-in-time view of the graph across nodes, edges, and properties.
Read consistency is repeatable within a transaction. A transaction sees its own buffered writes, but it does not observe commits from concurrent writers that land after its read snapshot. Point lookups and snapshot-visible graph scans resolve against the same anchored version, so readers do not see partial commits or mid-transaction phantom changes.
Conflict detection follows first-updater-wins semantics at commit. If two transactions modify the same node or edge, or if one transaction deletes a node while another transaction changes adjacent graph structure against an older snapshot, the later committer receives a normalized ErrConflict.
Historical lookups remain explicit. MVCC pruning preserves the current head and a retained floor per logical key, which acts as the Minimum Retained Snapshot for that key. Requests below that retained floor fail safely with ErrNotFound rather than scanning sparse history.
Current-only search remains intentionally separate from historical MVCC state, and the MVCC prune/search benchmark is a structural integrity smoke test rather than a blanket claim about every workload. NornicDB implements standard Snapshot Isolation semantics at the storage layer.
Note: As a standard Snapshot Isolation implementation, NornicDB permits write skew.
Why NornicDB Is Different
- Neo4j-compatible by default: Bolt + Cypher support for existing drivers and applications.
- Built for AI-native workloads: vector search, memory decay, and auto-relationships are first-class features.
- Hardware-accelerated execution: Metal/CUDA/Vulkan pathways for high-throughput graph + semantic workloads.
- Operational flexibility: full images (models included), BYOM images, and headless API-only deployments.
- Canonical graph ledger support: versioned facts, temporal validity, as-of reads, queryable txlog, and receipts for audit-oriented systems.
What Recent Deep-Dives Show
- Hybrid execution model (streaming fast paths + general engine): NornicDB uses shape-specialized streaming executors for common traversal/aggregation patterns while retaining a general Cypher path for coverage and correctness.
- Runtime parser mode switching: the default
nornicmode minimizes hot-path overhead, whileantlrmode prioritizes strict parsing and diagnostics when debugging/query validation matters. - Measured parser-path deltas on benchmark suites: internal Northwind comparisons show large overhead differences on certain query shapes when full parse-tree paths are used, which is why default production mode is optimized for lower overhead.
- HNSW build acceleration from insertion-order optimization: BM25-seeded insertion order reduced a 1M embedding build from ~27 minutes to ~10 minutes (~2.7x) in published tests by reducing traversal waste during construction, without changing core quality knobs.
- Shared seed strategy across indexing stages: the same lexical seed extraction supports HNSW insertion ordering and improves k-means centroid initialization spread for vector pipeline efficiency.
Read more:
Performance Snapshot
LDBC Social Network Benchmark (M3 Max, 64GB):
| Query Type | NornicDB | Neo4j | Speedup | | ----------------------------- | ------------- | ----------- | ------- | | Message content lookup | 6,389 ops/sec | 518 ops/sec | 12x | | Recent messages (friends) | 2,769 ops/sec | 108 ops/sec | 25x | | Avg friends per city | 4,713 ops/sec | 91 ops/sec | 52x | | Tag co-occurrence | 2,076 ops/sec | 65 ops/sec | 32x |
See full benchmark results for complete methodology and additional workloads.
Quick Start
Docker (Recommended)
# Apple Silicon (includes bge-m3 embedding model)
docker run -d --name nornicdb \
-p 7474:7474 -p 7687:7687 \
-v nornicdb-data:/data \
timothyswt/nornicdb-arm64-metal-bge:latest # Apple Silicon
# timothyswt/nornicdb-amd64-cuda-bge:latest # NVIDIA GPU
Open http://localhost:7474 for the admin UI.
Need a different image/profile (Heimdall, BYOM, CPU-only, Vulkan, headless)?
From Source
git clone https://github.com/orneryd/NornicDB.git
cd NornicDB
go build -o nornicdb ./cmd/nornicdb
./nornicdb serve
Connect
Use any Neo4j driver — Python, JavaScript, Go, Java, .NET:
from neo4j import GraphDatabase
driver = GraphDatabase.driver("bolt://localhost:7687")
with driver.session() as session:
session.run("CREATE (n:Memory {content: 'Hello NornicDB'})")
Why Switch from Neo4j?
- 12x-52x faster on published LDBC workloads (same hardware comparisons).
- Native graph + vector in one engine (no separate vector sidecar required).
- GPU acceleration paths (Metal/CUDA/Vulkan) for semantic + graph workloads.
- Drop-in compatibility via Bolt + Cypher for existing applications.
- Canonical graph ledger model for temporal validity, as-of reads, and audit-oriented mutation tracking.
Why Switch from Qdrant?
- Graph + vector in one engine: combine semantic retrieval with native graph traversal and Cypher queries.
- Qdrant gRPC compatibility preserved: keep Qdrant-style gRPC workflows while adding graph-native capabilities.
- Hybrid retrieval built in: vector + BM25 fusion and optional reranking in the same query pipeline.
- Canonical truth modeling: versioned facts, temporal validity windows, and as-of reads for governance-heavy use cases.
- Protocol flexibility: use REST, GraphQL, Bolt/Cypher, Qdrant-compatible gRPC, and additive Nornic gRPC on one platform.
Build It Yourself
Detailed local build, cross-compile, and packaging instructions:
Features
🔌 Neo4j Compatible
Drop-in replacement for Neo4j. Your existing code works unchanged.
- Bolt Protocol — Use official Neo4j drivers
- Cypher Queries — Full query language support
- Schema Management — Constraints, indexes, vector indexes
- Qdrant gRPC API Compatible — Works with Qdrant-style gRPC vector workflows
🧠 Intelligent Memory
Memory that behaves like human cognition.
| Memory Tier | Half-Life | Use Case | | -------------- | --------- | -------
Related Skills
node-connect
333.3kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
xurl
333.3kA CLI tool for making authenticated requests to the X (Twitter) API. Use this skill when you need to post tweets, reply, quote, search, read posts, manage followers, send DMs, upload media, or interact with any X API v2 endpoint.
frontend-design
82.0kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
notion
333.3kNotion API for creating and managing pages, databases, and blocks.
