Most databases treat document storage, vector search, and AI as separate add-ons requiring external infrastructure. HeliosDB treats them as first-class citizens across every edition -- from a browser tab running WASM to a distributed enterprise cluster. The difference between editions is not what you can do, but where and how far you can scale it.


Quick Comparison

Capability Nano (Edge/Browser) Lite (Embedded/Server) Full (Enterprise)
Supabase Storage APIYesYesYes
Document Handler REST APIYesYesYes
Document Chunking4 strategies4 strategies4 strategies + custom
Semantic SearchYesYesYes
RAG PipelineBuilt-inBuilt-inMulti-strategy + re-ranking
AI Providers5 (OpenAI, Anthropic, Local, HuggingFace, Custom)55 + enterprise connectors
Vector SearchIn-memoryHNSW + PQ + SIMDDistributed HNSW
ACID TransactionsSingle-nodeFull MVCCDistributed MVCC
Time-Travel QueriesLimitedFullFull + cross-node
Branch IsolationGit-integratedNative branchesNative branches
Encryption at RestBrowser sandboxTDE (AES-256-GCM)TDE + key rotation
MongoDB-Style API----DocumentStore crate
Foreign Data Wrappers----7 types (S3, PG, MySQL, ...)
Change Streams----Collection-level
Deployment TargetBrowser, IoT, EdgeServer, Desktop, ContainerCluster, Cloud, Hybrid
Binary Size< 5 MB (WASM)~60 MB~120 MB
ConfigurationZero-configZero-configConfig file or env vars

HeliosDB-Nano: Document AI at the Edge

Nano is the only database engine that runs a complete document + vector + RAG pipeline inside a browser tab or IoT device. It compiles to WASM with no native dependencies.

Storage API (Supabase-Compatible)

Nano implements the Supabase Storage API, so existing Supabase client libraries work unchanged:

import { createClient } from '@supabase/supabase-js';

// Connect to HeliosDB-Nano (same API as Supabase)
const helios = createClient('http://localhost:3000', 'your-api-key');

// Create a storage bucket
const { data, error } = await helios.storage.createBucket('contracts', {
  public: false,
  fileSizeLimit: 52428800, // 50 MB
  allowedMimeTypes: ['application/pdf', 'text/plain', 'text/markdown']
});

// Upload a document
const file = new File(['Contract text...'], 'nda-2026.pdf');
await helios.storage.from('contracts').upload('legal/nda-2026.pdf', file);

// Generate a signed URL (expires in 1 hour)
const { data: url } = await helios.storage
  .from('contracts')
  .createSignedUrl('legal/nda-2026.pdf', 3600);

Document Handler (Chunking + Embedding)

The Document Handler REST API ingests documents, automatically chunks them, generates embeddings, and makes everything searchable -- all in a single API call:

// Ingest a document with automatic chunking and embedding
const response = await fetch('http://localhost:3000/api/v1/documents', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    content: longDocumentText,
    metadata: { category: 'legal', author: 'Jane Doe' },
    chunking: {
      strategy: 'semantic',   // fixed | sentence | paragraph | semantic
      chunk_size: 512,
      overlap: 50
    },
    embed: true,               // auto-generate vector embeddings
    vector_store: 'contracts'  // target vector collection
  })
});

Chunking strategies:

Strategy Best For How It Works
fixedUniform-length processingSplits at character boundaries with overlap
sentenceNatural language textSplits on sentence boundaries (default)
paragraphStructured documentsSplits on paragraph breaks
semanticMaximum retrieval accuracyUses embedding similarity to find natural breakpoints

Built-In RAG Pipeline

Nano ships a complete RAG (Retrieval-Augmented Generation) pipeline that connects document retrieval directly to LLM generation:

const ragResponse = await fetch('http://localhost:3000/api/v1/rag/query', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    query: 'What are the termination clauses in our NDA?',
    config: {
      vector_stores: ['contracts'],
      top_k: 5,
      min_score: 0.7,
      rerank: true,
      include_sources: true
    },
    model: 'gpt-4o',
    temperature: 0.3
  })
});

const { answer, sources } = await ragResponse.json();
// answer: "The NDA contains three termination clauses..."
// sources: [{ document_id: "nda-2026", chunk_index: 14, score: 0.94 }, ...]

Five AI Providers, One Interface

Switch between providers without changing application code:

// OpenAI
{ "provider": "openai", "model": "gpt-4o", "api_key": "sk-..." }

// Anthropic
{ "provider": "anthropic", "model": "claude-sonnet-4-20250514", "api_key": "sk-ant-..." }

// Local LLM (Ollama, llama.cpp, vLLM)
{ "provider": "local", "endpoint": "http://localhost:11434", "model": "llama3.2" }

// HuggingFace Inference
{ "provider": "huggingface", "model": "mistralai/Mixtral-8x7B", "api_key": "hf_..." }

// Custom endpoint (any OpenAI-compatible API)
{ "provider": "custom", "endpoint": "https://my-model.internal/v1", "model": "my-fine-tune" }

WASM Storage Backends

Nano persists data in the browser using three storage backends:

Backend Capacity Persistence Use Case
IndexedDB~1 GB+PersistentDefault, most reliable
OPFS (Origin Private File System)~10 GB+PersistentLarge datasets, near-native I/O
LocalStorage~5-10 MBPersistentSmall configs, fallback

Git-Integrated Document Workflows

Nano includes Git integration for version-controlled document pipelines:

// Documents are version-tracked through Git-style operations
await helios.rpc('git_commit', {
  message: 'Updated Q4 financial report with December actuals',
  branch: 'finance/q4-2026'
});

// Branch isolation for draft workflows
await helios.rpc('git_checkout', { branch: 'drafts/annual-report' });
// ... make changes on the draft branch ...
await helios.rpc('git_merge', {
  source: 'drafts/annual-report',
  target: 'main'
});

HeliosDB-Lite: Production Document Engine

Lite is the embedded edition designed for server-side applications, desktop software, and containerized microservices. It adds ACID transactions, hardware-accelerated vector search, encryption, and time-travel to the document stack.

Everything in Nano, Plus:

Lite includes the full Supabase Storage API, Document Handler, and RAG pipeline from Nano. It adds production-grade features on top.

HNSW + Product Quantization + SIMD Vector Search

Lite uses a three-layer vector search architecture optimized for server hardware:

-- Connect via PostgreSQL wire protocol (psql, any PG driver)

-- Create a table with vector embeddings
CREATE TABLE documents (
    id SERIAL PRIMARY KEY,
    title TEXT NOT NULL,
    content TEXT,
    category TEXT,
    embedding VECTOR(1536),
    created_at TIMESTAMP DEFAULT NOW()
);

-- Create an HNSW index for fast approximate nearest-neighbor search
CREATE INDEX idx_docs_embedding ON documents
    USING hnsw (embedding vector_cosine_ops)
    WITH (m = 16, ef_construction = 200);

-- Semantic search: find the 10 most similar documents
SELECT id, title, category,
       embedding <=> '[0.1, -0.3, 0.5, ...]'::vector AS distance
FROM documents
ORDER BY embedding <=> '[0.1, -0.3, 0.5, ...]'::vector
LIMIT 10;

Vector search internals:

Component Purpose
HNSW (Hierarchical Navigable Small World)Graph-based ANN index for sub-millisecond search
Product QuantizationCompresses vectors 4-8x, keeps full dataset in memory
SIMD AccelerationAVX2/SSE4 for distance computations on x86; NEON on ARM

ACID Transactions on Document Operations

Every document operation participates in MVCC transactions -- including chunking and embedding:

import psycopg2

conn = psycopg2.connect("host=localhost port=5432 dbname=helios")
cur = conn.cursor()

try:
    # All three operations are atomic
    cur.execute("""
        INSERT INTO documents (title, content, embedding)
        VALUES ('Q4 Report', %s, %s)
    """, (report_text, embedding_vector))

    cur.execute("""
        INSERT INTO document_chunks (doc_id, chunk_index, content, embedding)
        SELECT currval('documents_id_seq'), idx, chunk, embed
        FROM unnest(%s::text[], %s::vector[]) WITH ORDINALITY AS t(chunk, embed, idx)
    """, (chunks, chunk_embeddings))

    cur.execute("""
        INSERT INTO document_metadata (doc_id, key, value)
        VALUES (currval('documents_id_seq'), 'status', '"published"')
    """)

    conn.commit()  # All-or-nothing: document + chunks + metadata
except Exception:
    conn.rollback()  # Nothing written on failure

Time-Travel Queries on Documents

Query any document as it existed at any point in the past:

-- What did the contract say last Tuesday?
SELECT title, content
FROM documents
AS OF TIMESTAMP '2026-02-10 14:30:00'
WHERE title = 'Service Agreement v3';

-- Compare two versions of a document
SELECT
    old.content AS previous_version,
    new.content AS current_version
FROM documents AS OF TIMESTAMP '2026-01-15' old
JOIN documents new ON old.id = new.id
WHERE new.title = 'Privacy Policy';

Branch Isolation for Document Workflows

Create isolated branches to stage document changes without affecting production:

-- Create a review branch
SELECT helios_branch_create('review/legal-update');

-- Switch to the branch
SELECT helios_branch_checkout('review/legal-update');

-- Make changes on the branch (invisible to main)
UPDATE documents SET content = 'Updated terms...'
WHERE title = 'Terms of Service';

-- When approved, merge back
SELECT helios_branch_merge('review/legal-update', 'main');

TDE Encryption at Rest

All document content, chunks, and embeddings are encrypted with AES-256-GCM Transparent Data Encryption:

-- Enable TDE (one-time setup)
SELECT helios_tde_init('aes-256-gcm');

-- All subsequent writes are automatically encrypted at the storage layer.
-- No application code changes required.
-- Queries work identically -- decryption is transparent.
INSERT INTO documents (title, content, embedding)
VALUES ('Classified Report', 'Top secret content...', '[0.1, 0.2, ...]'::vector);

-- This query decrypts transparently
SELECT * FROM documents WHERE title = 'Classified Report';

Deployment Profile

Attribute Value
Binary size~60 MB
ConfigurationZero-config (single binary)
ProtocolPostgreSQL wire protocol (any PG client)
ConcurrencyMulti-threaded MVCC
Storage backendO_DIRECT (bypass OS page cache)
Max datasetLimited by disk

HeliosDB-Full: Enterprise Document Platform

Full is the distributed edition for organizations that need MongoDB-style document APIs, cross-cloud data federation, and multi-node document consistency.

Everything in Lite, Plus:

Full includes the complete Supabase Storage API, Document Handler, RAG pipeline, vector search, ACID transactions, time-travel, branching, and TDE from Lite. It adds enterprise-scale capabilities on top.

DocumentStore: MongoDB-Style API

Full includes a dedicated DocumentStore crate that provides a MongoDB-compatible interface for teams migrating from MongoDB or preferring a document-oriented API:

from heliosdb import DocumentStore

store = DocumentStore("helios://cluster.internal:5432/mydb")

# Create a collection with JSON Schema validation
store.create_collection("invoices", schema={
    "type": "object",
    "required": ["vendor", "amount", "date"],
    "properties": {
        "vendor":  { "type": "string" },
        "amount":  { "type": "number", "minimum": 0 },
        "date":    { "type": "string", "format": "date" },
        "line_items": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "description": { "type": "string" },
                    "quantity": { "type": "integer" },
                    "unit_price": { "type": "number" }
                }
            }
        }
    }
})

# Insert documents (validated against schema)
store.invoices.insert_one({
    "vendor": "Acme Corp",
    "amount": 15000.00,
    "date": "2026-02-18",
    "line_items": [
        {"description": "Consulting", "quantity": 40, "unit_price": 375.00}
    ]
})

MongoDB-Compatible Query Operators

# Find with query operators
results = store.invoices.find({
    "amount": {"$gt": 10000},
    "vendor": {"$regex": "^Acme"},
    "date": {"$gte": "2026-01-01"}
})

# Supported operators:
#   Comparison: $eq, $ne, $gt, $gte, $lt, $lte
#   Logical:    $and, $or, $not, $nor
#   Element:    $exists, $type
#   Array:      $in, $nin, $all, $elemMatch, $size
#   String:     $regex

Aggregation Pipeline

# Revenue by vendor for Q1 2026
pipeline = store.invoices.aggregate([
    {"$match": {"date": {"$gte": "2026-01-01", "$lt": "2026-04-01"}}},
    {"$group": {
        "_id": "$vendor",
        "total_revenue": {"$sum": "$amount"},
        "invoice_count": {"$sum": 1},
        "avg_invoice": {"$avg": "$amount"}
    }},
    {"$sort": {"total_revenue": -1}},
    {"$project": {
        "vendor": "$_id",
        "total_revenue": 1,
        "invoice_count": 1,
        "avg_invoice": {"$round": ["$avg_invoice", 2]}
    }}
])

# Supported pipeline stages:
#   $match, $group, $sort, $project, $limit, $skip, $unwind, $lookup

Change Streams

React to document changes in real time:

# Watch for changes on the invoices collection
stream = store.invoices.watch(pipeline=[
    {"$match": {"operationType": {"$in": ["insert", "update"]}}}
])

for change in stream:
    if change["operationType"] == "insert":
        doc = change["fullDocument"]
        print(f"New invoice: {doc['vendor']} - ${doc['amount']}")
    elif change["operationType"] == "update":
        print(f"Updated fields: {change['updateDescription']['updatedFields']}")

S3 Foreign Data Wrapper

Query Parquet, CSV, and JSON files sitting on S3 or MinIO directly with SQL -- no ETL, no data movement:

-- Create an S3 foreign server
CREATE SERVER s3_data_lake
    FOREIGN DATA WRAPPER s3_fdw
    OPTIONS (
        endpoint 'https://s3.us-east-1.amazonaws.com',
        region 'us-east-1',
        access_key_id 'AKIA...',
        secret_access_key '...'
    );

-- Map an S3 bucket path to a virtual table
CREATE FOREIGN TABLE sales_parquet (
    order_id    BIGINT,
    customer    TEXT,
    amount      NUMERIC(12,2),
    order_date  DATE,
    region      TEXT
) SERVER s3_data_lake
  OPTIONS (
      bucket 'analytics-lake',
      path 'sales/2026/',
      format 'parquet'
  );

-- Query S3 data with standard SQL (predicate pushdown to Parquet)
SELECT region, SUM(amount) AS revenue
FROM sales_parquet
WHERE order_date >= '2026-01-01'
GROUP BY region
ORDER BY revenue DESC;

All Seven Foreign Data Wrappers

FDW Type Connects To Use Case
S3S3, MinIO, R2Query Parquet/CSV/JSON on object storage
PostgreSQLAny PG instanceFederated queries across PG clusters
MySQLMySQL / MariaDBCross-database joins
MongoDBMongoDB Atlas or self-hostedUnified SQL over MongoDB collections
REST APIAny HTTP/JSON endpointQuery APIs as tables
Azure SynapseAzure Synapse AnalyticsHybrid cloud analytics
BigQueryGoogle BigQueryCross-cloud warehouse queries

Full RAG Engine with Multi-Strategy Retrieval

Full extends the built-in RAG pipeline with enterprise features:

from heliosdb import RagEngine

rag = RagEngine("helios://cluster.internal:5432/mydb")

response = rag.query(
    question="What were our top compliance risks in 2025?",
    config={
        "retrieval_strategies": [
            {"type": "semantic", "weight": 0.6, "top_k": 10},
            {"type": "keyword", "weight": 0.2, "top_k": 10},
            {"type": "metadata", "weight": 0.2, "filters": {"category": "compliance"}}
        ],
        "reranker": "cross-encoder",      # Re-rank with cross-encoder model
        "citation_tracking": True,          # Track which chunks support each claim
        "max_context_tokens": 8000
    },
    model="claude-sonnet-4-20250514"
)

print(response.answer)
for citation in response.citations:
    print(f"  [{citation.index}] {citation.document_title}, chunk {citation.chunk_id} "
          f"(score: {citation.relevance_score:.2f})")

Distributed MVCC for Multi-Node Consistency

Full ensures document operations are consistent across a multi-node cluster:

-- Documents written on any node are globally consistent
BEGIN;
    INSERT INTO documents (title, content) VALUES ('Global Policy', '...');
    INSERT INTO document_chunks (doc_id, content, embedding)
        VALUES (currval('documents_id_seq'), '...', '[...]'::vector);
COMMIT;
-- Both rows visible on all nodes after commit

Innovation: Unified Document + Vector + AI in a Single Transaction

HeliosDB is the first database to unify four capabilities that have historically required separate systems, separate infrastructure, and complex ETL pipelines:

1. ACID Document Storage

Documents are not blobs stored alongside the database -- they are in the database, governed by the same MVCC transactions, constraints, and recovery guarantees as every other row.

2. In-Process Vector Indexing

Vector indexes (HNSW with Product Quantization and SIMD acceleration) run in the same process as the query engine. There is no network hop to a separate vector database, no synchronization lag, no eventual consistency between your documents and their embeddings.

3. Auto-Embedding on Ingest

When a document is inserted or updated, HeliosDB can automatically chunk it, generate embeddings, and index the vectors -- all within the same transaction that writes the document itself. There is no external ETL pipeline, no Kafka topic, no Lambda function, and no window of time where the document exists but its embeddings do not.

-- One statement: insert document, auto-chunk, auto-embed, index
INSERT INTO documents (title, content, auto_embed)
VALUES ('Quarterly Report', 'Full report text here...', true);

-- Immediately searchable (same transaction)
SELECT title, content <=> query_embedding AS relevance
FROM documents
WHERE content @@ 'revenue growth'
ORDER BY relevance
LIMIT 5;

4. Local LLM/SLM Inference (Air-Gapped, Sovereign)

HeliosDB connects to local language models (Ollama, llama.cpp, vLLM) running on the same machine or network. Documents never leave the perimeter. This enables:

  • Air-gapped deployments in defense and intelligence
  • Data sovereignty in regulated industries (healthcare, finance, government)
  • Zero-latency inference without internet round-trips
  • Cost control with no per-token API charges

What This Replaces

A typical document AI stack without HeliosDB:

Component Product Purpose
Document storageS3 / MinIOStore blobs
Metadata databasePostgreSQLTrack document metadata
Vector databasePinecone / WeaviateStore embeddings
Embedding pipelineAirflow + OpenAI APIGenerate vectors
Search engineElasticsearchFull-text search
RAG frameworkLangChain / LlamaIndexOrchestrate retrieval + generation
Message queueKafka / SQSGlue everything together

Seven systems, seven failure modes, seven bills, eventual consistency between all of them.

With HeliosDB, this becomes one binary, one connection string, one transaction boundary.


Choosing the Right Edition

Choose Nano If:

  • You are building a browser-based or offline-first application
  • Your documents need to work on edge devices or IoT hardware
  • You want Git-style versioning for document workflows
  • You need a complete RAG pipeline that runs entirely in the browser (WASM)
  • Your dataset fits in IndexedDB or OPFS storage (typically < 10 GB)

Choose Lite If:

  • You need ACID transactions across document + vector + metadata writes
  • You want hardware-accelerated vector search (HNSW + PQ + SIMD)
  • You require encryption at rest (TDE with AES-256-GCM)
  • You need time-travel to query historical document versions
  • You want a single ~60 MB binary with zero external dependencies
  • You are building embedded applications, desktop software, or microservices

Choose Full If:

  • You need a MongoDB-compatible document API with aggregation pipelines
  • You want to query S3/MinIO data lakes directly with SQL (no ETL)
  • You need federated queries across PostgreSQL, MySQL, MongoDB, BigQuery, or REST APIs
  • You require multi-node document consistency with distributed MVCC
  • You need enterprise RAG with multi-strategy retrieval, cross-encoder re-ranking, and citation tracking
  • You are running a multi-tenant SaaS or enterprise data platform

Edition Upgrade Path

All three editions share the same storage format and SQL dialect. Migrating from Nano to Lite, or Lite to Full, is a data copy -- not a rewrite:

# Export from Lite
helios dump --format=native --output=backup.helios

# Import into Full
helios-full restore --input=backup.helios

Application code using the PostgreSQL wire protocol works unchanged across Lite and Full. Supabase Storage API calls work unchanged across all three editions.

Ready to try HeliosDB?

Get started with HeliosDB in minutes. Open source, free to use.

Get Started Contact Sales