Skip to content

NornicDB Architecture

Version: 0.1.4
Last Updated: December 1, 2025

Overview

NornicDB is a high-performance graph database compatible with Neo4j's Cypher query language and Bolt protocol. It combines:

  • Full Neo4j protocol compatibility (Bolt, Cypher, HTTP/REST)
  • Hybrid vector + graph semantics for embedding-driven applications

  • MCP Server - Native LLM tool integration (6 tools)

  • Auto-Embedding - Server-side embedding for vector queries
  • GPU Acceleration - 10-100x speedup (Metal/CUDA/OpenCL/Vulkan)
  • Hybrid Search - RRF fusion of vector + BM25

System Architecture Diagram

%%{init: {'theme':'dark', 'themeVariables': { 'darkMode': true }}}%%
graph TB
    subgraph Client["๐ŸŒ Client Layer"]
        Neo4jDriver["Neo4j Driver<br/>(JavaScript/Python/Go)"]
        HTTPClient["HTTP/REST Client"]
        MCPClient["MCP Client<br/>(Cursor, Claude, etc.)"]
    end

    subgraph Security["๐Ÿ”’ Security Layer"]
        TLS["TLS 1.3 Encryption"]
        Auth["Authentication<br/>โ€ข Basic Auth<br/>โ€ข JWT tokens<br/>โ€ข RBAC (Admin/ReadWrite/ReadOnly)"]
    end

    subgraph Protocol["๐Ÿ“ก Protocol Layer"]
        BoltServer["Bolt Protocol<br/>:7687"]
        HTTPServer["HTTP/REST<br/>:7474"]
        MCPServer["MCP JSON-RPC<br/>/mcp endpoint<br/>โ€ข store/recall/discover<br/>โ€ข link/task/tasks"]
    end

    subgraph Embedding["๐Ÿง  Embedding Layer"]
        EmbedQueue["Embed Worker<br/>โ€ข Background scan (15m)<br/>โ€ข Chunking (8192/50 overlap)<br/>โ€ข Retry with backoff (3x)"]
        EmbedInline["WITH EMBEDDING<br/>โ€ข Inline transactional<br/>โ€ข Same-transaction embed<br/>โ€ข CREATE/MERGE/SET"]
        EmbedCache["Embedding Cache<br/>โ€ข LRU (10K default)<br/>โ€ข 450,000x speedup"]
        EmbedService["Embedding Service<br/>โ€ข Ollama/OpenAI/Local GGUF<br/>โ€ข String query auto-embed"]
    end

    subgraph Processing["โš™๏ธ Query Processing (CPU)"]
        CypherParser["Cypher Parser<br/>โ€ข Multi-line SET with arrays<br/>โ€ข Parameter substitution"]
        QueryExecutor["Query Executor<br/>โ€ข MATCH/CREATE/MERGE<br/>โ€ข Vector procedures<br/>โ€ข String auto-embedding"]
        TxManager["Transaction Manager<br/>โ€ข WAL durability<br/>โ€ข ACID guarantees"]
    end

    subgraph Storage["๐Ÿ’พ Storage Layer"]
        BadgerDB["BadgerDB Engine<br/>โ€ข Streaming iteration<br/>โ€ข LSM-tree storage"]
        Schema["Schema Manager<br/>โ€ข Vector indexes<br/>โ€ข BM25 fulltext indexes<br/>โ€ข Unique constraints"]
        Persistence["Persistence<br/>โ€ข Write-ahead log<br/>โ€ข Incremental snapshots"]
    end

    subgraph GPU["๐ŸŽฎ GPU Acceleration"]
        GPUManager["GPU Manager<br/>โ€ข Metal (Apple Silicon)<br/>โ€ข CUDA (NVIDIA)<br/>โ€ข OpenCL/Vulkan"]
        VectorOps["Vector Operations<br/>โ€ข Cosine similarity<br/>โ€ข Batch processing<br/>โ€ข K-Means clustering"]
    end

    subgraph Search["๐Ÿ” Search & Indexing"]
        VectorSearch["Vector Search<br/>โ€ข HNSW index O(log n)<br/>โ€ข GPU-accelerated"]
        FulltextSearch["BM25 Search<br/>โ€ข Token indexing<br/>โ€ข Prefix matching"]
        HybridSearch["Hybrid RRF<br/>โ€ข Vector + BM25 fusion<br/>โ€ข Adaptive weights"]
    end

    %% Client connections
    Neo4jDriver --> TLS
    HTTPClient --> TLS
    MCPClient --> TLS

    %% Security flow
    TLS --> Auth
    Auth --> BoltServer
    Auth --> HTTPServer
    Auth --> MCPServer

    %% MCP to embedding
    MCPServer --> EmbedService
    MCPServer --> QueryExecutor

    %% Embedding flow
    EmbedService --> EmbedCache
    EmbedCache --> EmbedQueue
    EmbedQueue --> Storage
    EmbedInline --> EmbedService
    QueryExecutor --> EmbedInline

    %% Protocol to processing
    BoltServer --> CypherParser
    HTTPServer --> CypherParser
    CypherParser --> QueryExecutor
    QueryExecutor --> EmbedService
    QueryExecutor --> TxManager
    TxManager --> BadgerDB

    %% Storage interactions
    BadgerDB --> Schema
    BadgerDB --> Persistence
    Schema --> VectorSearch
    Schema --> FulltextSearch

    %% GPU acceleration
    VectorSearch --> GPUManager
    GPUManager --> VectorOps
    VectorOps --> VectorSearch

    %% Hybrid search
    VectorSearch --> HybridSearch
    FulltextSearch --> HybridSearch

    %% Styling
    classDef clientStyle fill:#1a5490,stroke:#2196F3,stroke-width:2px,color:#fff
    classDef securityStyle fill:#7b1fa2,stroke:#9C27B0,stroke-width:2px,color:#fff
    classDef protocolStyle fill:#0d47a1,stroke:#2196F3,stroke-width:2px,color:#fff
    classDef embedStyle fill:#00695c,stroke:#009688,stroke-width:2px,color:#fff
    classDef processingStyle fill:#1b5e20,stroke:#4CAF50,stroke-width:2px,color:#fff
    classDef storageStyle fill:#e65100,stroke:#FF9800,stroke-width:2px,color:#fff
    classDef gpuStyle fill:#880e4f,stroke:#E91E63,stroke-width:2px,color:#fff
    classDef searchStyle fill:#004d40,stroke:#009688,stroke-width:2px,color:#fff

    class Neo4jDriver,HTTPClient,MCPClient clientStyle
    class TLS,Auth securityStyle
    class BoltServer,HTTPServer,MCPServer protocolStyle
    class EmbedQueue,EmbedInline,EmbedCache,EmbedService embedStyle
    class CypherParser,QueryExecutor,TxManager processingStyle
    class BadgerDB,Schema,Persistence storageStyle
    class GPUManager,VectorOps gpuStyle
    class VectorSearch,FulltextSearch,HybridSearch searchStyle

Design Philosophy

Core Concept: NornicDB consolidates the critical path for low-latency retrieval (transport, embedding, search, ranking) into a single operational unit rather than scattering these stages across microservices.

Key Design Decisions:

  • Co-located retrieval path - In-process embedding, search orchestration, reranking, and transactional state for single-digit millisecond retrieval
  • Protocol pluralism - Bolt/Cypher, REST/HTTP, MCP JSON-RPC, and future GraphQL/gRPC interfaces share the same underlying engine
  • Fail-open degradation - Reranker/embedder unavailability doesn't block retrieval; system gracefully degrades
  • Runtime adaptability - Strategy switching (CPU brute-force โ†” GPU โ†” HNSW) with configurable thresholds for resource-conscious deployment

Data Flow

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    NornicDB Operational Core                         โ”‚
โ”‚                                                                      โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚  Protocol Layer: Bolt :7687 | HTTP :7474 | MCP /mcp            โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚                              โ”‚                                       โ”‚
โ”‚      โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”               โ”‚
โ”‚      โ–ผ                      โ–ผ                      โ–ผ               โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”          โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”          โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”       โ”‚
โ”‚  โ”‚ Cypher   โ”‚          โ”‚ Embedding  โ”‚          โ”‚ MCP Toolsโ”‚       โ”‚
โ”‚  โ”‚ Executor โ”‚โ—„โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บโ”‚ Service    โ”‚โ—„โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บโ”‚ (6 tools)โ”‚       โ”‚
โ”‚  โ”‚          โ”‚          โ”‚            โ”‚          โ”‚          โ”‚       โ”‚
โ”‚  โ”‚ โ€ข Parse  โ”‚          โ”‚ โ€ข Auto-emb โ”‚          โ”‚ โ€ข store  โ”‚       โ”‚
โ”‚  โ”‚ โ€ข Executeโ”‚          โ”‚ โ€ข Cache    โ”‚          โ”‚ โ€ข recall โ”‚       โ”‚
โ”‚  โ”‚ โ€ข Vector โ”‚          โ”‚ โ€ข Queue    โ”‚          โ”‚ โ€ข discoverโ”‚      โ”‚
โ”‚  โ”‚   procs  โ”‚          โ”‚ โ€ข WITH     โ”‚          โ”‚ โ€ข link   โ”‚       โ”‚
โ”‚  โ”‚ โ€ข WITH   โ”‚          โ”‚   EMBEDDINGโ”‚          โ”‚ โ€ข tasks  โ”‚       โ”‚
โ”‚  โ”‚  EMBEDDINGโ”‚         โ”‚   (inline) โ”‚          โ”‚          โ”‚       โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜          โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜          โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜       โ”‚
โ”‚       โ”‚                                         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜       โ”‚
โ”‚       โ–ผ                                                            โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚  Storage: BadgerDB + WAL + Vector Index + BM25 Index            โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚                                                                      โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

API Compatibility

Protocol Support

Operation Protocol Port Status
Cypher queries Bolt 7687 โœ…
HTTP/REST HTTP 7474 โœ…
MCP Tools JSON-RPC 7474/mcp โœ…
Authentication Basic/JWT Both โœ…

Vector Search Features

Feature Neo4j GDS NornicDB
Vector array queries โœ… โœ…
String auto-embedding โŒ โœ…
WITH EMBEDDING (inline embed) โŒ โœ…
Multi-line SET with arrays โŒ โœ…
Server-side embedding โŒ โœ…
GPU acceleration โŒ โœ…
Embedding cache โŒ โœ…

Core Components

MCP Server (pkg/mcp)

Optional LLM-native tool interface (Claude, Cursor, etc.) with 6 tools:

store    - Create/update graph nodes with metadata
recall   - Retrieve by ID, type, tags, date range
discover - Semantic search with graph traversal
link     - Create edges and relationships
task     - Create/manage tasks with status/priority
tasks    - Query tasks with filtering and sorting

MCP is configurable and can be disabled entirely for application-only deployments.

Embedding Layer (pkg/embed)

NornicDB supports two embedding modes:

Background Worker (async, eventual):

  • Scans for unembedded nodes every 15 minutes (configurable)
  • Chunking: 8192 tokens with 50 token overlap (configurable)
  • Retry with backoff (3 attempts), debounced triggers on writes
  • Configurable property inclusion/exclusion and label prepending

WITH EMBEDDING (sync, transactional):

  • Appended to any mutation: CREATE ... WITH EMBEDDING RETURN ...
  • Embeds all mutated nodes inline within the same implicit transaction
  • Works with CREATE, MERGE, MATCH...SET, UNWIND...MERGE
  • Rolls back both data and embeddings atomically on failure
  • Uses the same chunking/provider config as the background worker

Common:

  • LRU Cache - 10K entries (configurable), 450,000x speedup for repeated queries
  • Providers - Ollama, OpenAI, Local GGUF (llama.cpp)
  • Chunk-level embeddings - Each node stores multiple chunk embeddings with metadata (model, dimensions, timestamp)

Cypher Executor (pkg/cypher)

  • Vector Procedures - db.index.vector.queryNodes with string auto-embedding
  • WITH EMBEDDING - Inline embedding within mutation transactions (CREATE/MERGE/SET)
  • Multi-line SET - Arrays and multiple properties in single SET

Search Service (pkg/search)

  • Vector - HNSW index, GPU-accelerated similarity
  • BM25 - Full-text with token indexing
  • Hybrid RRF - Reciprocal Rank Fusion of both

GPU Acceleration (pkg/gpu)

Backend Platform Performance
Metal Apple Silicon Excellent
CUDA NVIDIA Highest
OpenCL Cross-platform Good
Vulkan Cross-platform Good

Configuration

Environment Variables

# Server
NORNICDB_HTTP_PORT=7474
NORNICDB_BOLT_PORT=7687

# MCP (disable with false)
NORNICDB_MCP_ENABLED=true

# Embedding provider
NORNICDB_EMBEDDING_ENABLED=true
NORNICDB_EMBEDDING_PROVIDER=ollama          # ollama | openai | local
NORNICDB_EMBEDDING_API_URL=http://localhost:11434
NORNICDB_EMBEDDING_MODEL=bge-m3
NORNICDB_EMBEDDING_DIMENSIONS=1024
NORNICDB_EMBEDDING_CACHE_SIZE=10000

# Embedding worker (background async)
NORNICDB_EMBED_SCAN_INTERVAL=15m
NORNICDB_EMBED_BATCH_DELAY=500ms
NORNICDB_EMBED_TRIGGER_DEBOUNCE=2s
NORNICDB_EMBED_MAX_RETRIES=3
NORNICDB_EMBED_CHUNK_SIZE=8192
NORNICDB_EMBED_CHUNK_OVERLAP=50

# Embedding text control
NORNICDB_EMBEDDING_PROPERTIES_INCLUDE=      # empty = all properties
NORNICDB_EMBEDDING_PROPERTIES_EXCLUDE=
NORNICDB_EMBEDDING_INCLUDE_LABELS=true

# Auth (default: disabled)
NORNICDB_AUTH=admin:password

CLI

# Start with defaults
./nornicdb serve

# Custom ports
./nornicdb serve --http-port 8080 --bolt-port 7688

# Disable MCP
./nornicdb serve --mcp-enabled=false

# With auth
./nornicdb serve --auth admin:secret

File Structure

nornicdb/
โ”œโ”€โ”€ cmd/nornicdb/          # CLI entry point
โ”œโ”€โ”€ pkg/
โ”‚   โ”œโ”€โ”€ nornicdb/          # Main DB API
โ”‚   โ”œโ”€โ”€ mcp/               # MCP server (6 tools)
โ”‚   โ”œโ”€โ”€ embed/             # Embedding service + cache
โ”‚   โ”œโ”€โ”€ storage/           # BadgerDB + WAL
โ”‚   โ”œโ”€โ”€ search/            # Vector + BM25 + RRF
โ”‚   โ”œโ”€โ”€ cypher/            # Query parser/executor
โ”‚   โ”œโ”€โ”€ bolt/              # Bolt protocol
โ”‚   โ”œโ”€โ”€ server/            # HTTP server
โ”‚   โ”œโ”€โ”€ auth/              # Authentication/RBAC
โ”‚   โ”œโ”€โ”€ gpu/               # GPU backends
โ”‚   โ”‚   โ”œโ”€โ”€ metal/         # Apple Silicon
โ”‚   โ”‚   โ”œโ”€โ”€ cuda/          # NVIDIA
โ”‚   โ”‚   โ”œโ”€โ”€ opencl/        # Cross-platform
โ”‚   โ”‚   โ””โ”€โ”€ vulkan/        # Cross-platform
โ”‚   โ”œโ”€โ”€ index/             # HNSW vector index
โ”‚   โ”œโ”€โ”€ linkpredict/       # Topological link prediction
โ”‚   โ”œโ”€โ”€ inference/         # Auto-relationship engine
โ”‚   โ”œโ”€โ”€ decay/             # Memory decay system
โ”‚   โ”œโ”€โ”€ temporal/          # Temporal data handling
โ”‚   โ””โ”€โ”€ retention/         # Data retention policies
โ”œโ”€โ”€ data/                  # Persistence directory
โ”œโ”€โ”€ ui/                    # React admin UI
โ””โ”€โ”€ docs/                  # Documentation

Testing

# All tests
cd nornicdb && go test ./... -count=1

# Specific package
go test ./pkg/mcp/... -v

# Benchmarks
go test ./pkg/search/... -bench=.

# Integration tests
go test ./pkg/mcp/... -run Integration

See also: Vector Search Guide | User Guides | API Reference