HeliosDB Full is a licensed SQL database whose PostgreSQL, MySQL and Oracle listeners read and write the same tables, including JSONB document columns. Its opt-in MongoDB listener accepts driver connections with SCRAM-SHA-256 authentication; reading and writing documents through it is planned, so move MongoDB data in over the PostgreSQL wire protocol today. Like MongoDB, HeliosDB Full is licensed SSPL-1.0.
Last updated
Keep MongoDB when your application reads and writes through MongoDB drivers: HeliosDB Full's MongoDB listener accepts and authenticates those connections, but reading and writing documents through it is planned. Choose HeliosDB Full when you are ready to move documents into JSONB columns and query them over the PostgreSQL, MySQL or Oracle wire protocol, with HTTP vector stores in the same licensed engine; time travel, branching and SQL vector indexes for HeliosDB Full are planned.
MongoDB pioneered the document database, and its 2018 relicensing to SSPL sent part of the ecosystem looking for alternatives: AWS built DocumentDB and FerretDB built a protocol translator. HeliosDB Full is a SQL engine with an opt-in MongoDB wire listener. Today that listener completes the handshake and SCRAM-SHA-256 authentication; reading and writing HeliosDB tables through it is planned, and so are GridFS and capped collections (compatibility notes). What works today is the SQL path: store documents as JSONB rows and query them from PostgreSQL, MySQL or Oracle clients. HeliosDB Full is itself source-available under SSPL-1.0 and distributed to licensed customers, so it is not a way to leave SSPL behind.
| Feature | MongoDB 7 | HeliosDB Full |
|---|---|---|
| License | SSPL | SSPL-1.0 (commercial license available) |
| MongoDB wire protocol | Native OP_MSG | Opt-in listener: drivers connect and authenticate; document reads and writes planned |
| Document queries | find and aggregation pipelines (35+ stages) | SQL over JSONB (WHERE, GROUP BY, JOIN, window functions, CTEs); pipelines through the listener planned |
| ACID transactions | Multi-document | Multi-statement SQL transactions with MVCC |
| Vector search | Atlas-only ($vectorSearch) | Self-hosted HNSW vector stores with hybrid search over the HTTP gateway; SQL vector indexes with Product Quantization planned |
| NL queries | Not available | Planned (NL-to-SQL) |
| Intelligent indexing | Atlas Performance Advisor (paid) | Planned |
| Schema optimization | Manual validation rules | Planned |
| Change streams | Yes | Planned for the MongoDB listener |
| GridFS | Yes | Not supported; planned |
| Capped collections | Yes | Not supported; planned |
| Authentication | SCRAM-SHA-256 / x.509 | SCRAM-SHA-256 only (SCRAM-SHA-1 refused) |
| SQL access | Not available | PostgreSQL, MySQL and Oracle wire protocols and an HTTP SQL gateway |
| Full-text search | $text / Atlas Search | Native @@ operator in SQL |
| Time-travel queries | Not available | Planned (the current release accepts AS OF but does not read historical snapshots) |
| Data branching | Not available | Planned (the current release accepts the syntax but does not create branches) |
| Encryption at rest | Encrypted Storage Engine (Enterprise) | Planned (with key rotation and cloud KMS) |
| TLS on the listener | Yes | Not terminated by the listeners today; use a TLS proxy (native PostgreSQL TLS planned) |
| Deployment | mongod + mongos + config servers | Single server, provided during onboarding; clustering planned |
| Minimum HA | 3 nodes (replica set) | Replication and clustering planned |
| Other protocols | MongoDB only | PostgreSQL, MySQL and Oracle on the shared tables, Redis (in memory), Cassandra and SQL Server (connect and authenticate; data path planned), plus HTTP |
| Anomaly detection | Atlas alerts (threshold) | Planned (in-database anomaly detection) |
| Production cost | Atlas M30: $370/month | Annual license, custom-priced (pricing) |
FerretDB translates the MongoDB wire protocol into SQL on PostgreSQL or SQLite. HeliosDB Full builds a MongoDB listener into its own engine, next to its HTTP vector stores and its PostgreSQL, MySQL and Oracle listeners, but that listener currently stops at the handshake and authentication: reading and writing documents through it, aggregation pipelines, change streams, GridFS and capped collections are planned (compatibility notes). If you are moving the data into SQL anyway, HeliosDB Full serves it over the PostgreSQL, MySQL and Oracle listeners and keeps embeddings in HTTP vector stores; SQL vector indexes, time travel and branching for HeliosDB Full are planned.
FerretDB Architecture:
+------------------+ +------------------+
| MongoDB Client |---->| FerretDB |---> PostgreSQL / SQLite
| (mongosh, etc.) | | (protocol proxy) | (external dependency)
+------------------+ +------------------+
HeliosDB Full Architecture (today):
+------------------+ +---------------------------------------------+
| MongoDB Client |---->| HeliosDB Full |
| (mongosh, etc.) | | |
+------------------+ | MongoDB listener (opt-in) |
| Handshake + SCRAM-SHA-256 auth |
| Document reads and writes: planned |
+------------------+ | |
| SQL Client |---->| PostgreSQL / MySQL / Oracle listeners |
| (psql, JDBC ...) | | Read and write the shared tables |
+------------------+ | |
| SQL Core Engine |
| JSONB documents in tables |
| HTTP vector stores (HNSW, hybrid search) |
| MVCC + ACID transactions |
| LSM storage (no external DB) |
+---------------------------------------------+
| Capability | FerretDB | HeliosDB Full |
|---|---|---|
| Approach | Protocol translator (proxy to external DB) | SQL engine with an opt-in MongoDB listener (handshake and authentication today) |
| External database required | Yes (PostgreSQL or SQLite) | No (built-in LSM storage) |
| Document reads and writes over the MongoDB protocol | Yes | Planned |
| Aggregation stages | ~10 basic stages | Planned through the listener; SQL equivalents today |
| Change streams | Not available | Planned |
| GridFS | Partial | Not supported; planned |
| Vector search | Not available | HNSW vector stores over the HTTP gateway; SQL vector indexes planned |
| SQL access | Backend-dependent | PostgreSQL, MySQL and Oracle wire protocols |
| Multi-protocol | MongoDB only | PostgreSQL, MySQL and Oracle on the shared tables; Redis in memory; MongoDB, Cassandra and SQL Server connect and authenticate; HTTP gateway |
On the HTTP gateway: HeliosDB Full serves vector stores with hybrid search, embeddings, chat completions and agent memory there; SQL vector indexes with Product Quantization, NL-to-SQL and in-database model training are planned. Their MongoDB-protocol forms, such as $vectorSearch inside an aggregation pipeline, depend on document reads through the MongoDB listener, which are planned too. Load documents over SQL and keep their embeddings in a vector store (compatibility notes).
MongoDB Atlas offers vector search in the cloud, through Atlas Search. HeliosDB Full serves self-hosted HNSW vector stores with hybrid search over its HTTP gateway (POST /api/v1/vectors/stores/{store}/search/hybrid); vector search in SQL and through $vectorSearch on the MongoDB listener are planned.
// MongoDB Atlas: $vectorSearch (cloud-only, requires Atlas)
db.products.aggregate([
{
$vectorSearch: {
index: "vector_index",
path: "embedding",
queryVector: [0.12, -0.45, 0.89, /* ... */],
numCandidates: 100,
limit: 10
}
},
{ $project: { name: 1, score: { $meta: "vectorSearchScore" } } }
]);
Not through the MongoDB listener yet. The compatibility matrix lists 30+ stages, including $lookup, $graphLookup, $facet, $bucket, $setWindowFields, $densify, $fill and $unionWith (compatibility matrix), but the listener does not read or write tables yet, so pipelines through it are planned. Today, write the pipeline as SQL over the PostgreSQL wire; the common stages map directly:
| Stage | MongoDB 7 | HeliosDB Full SQL today |
|---|---|---|
| $match | Yes | WHERE (JSONB containment with @>) |
| $group | Yes | GROUP BY + aggregate functions |
| $sort | Yes | ORDER BY |
| $project / $addFields | Yes | SELECT list and computed columns |
| $limit / $skip | Yes | LIMIT / OFFSET |
| $unwind | Yes | jsonb_array_elements() or UNNEST() |
| $lookup (joins) | Yes | JOIN |
| $count | Yes | COUNT(*) |
| $facet | Yes | One query per facet, or CTEs |
| $setWindowFields | Yes | Window functions (OVER (PARTITION BY ...)) |
| $vectorSearch | Atlas-only | Hybrid search on the HTTP vector-store API; SQL vector search planned |
# The listener is opt-in (start HeliosDB Full with --enable-mongodb)
# and accepts SCRAM-SHA-256 only (SCRAM-SHA-1 is refused)
mongosh "mongodb://admin:password@heliosdb-host:27017/mydb?authMechanism=SCRAM-SHA-256"
# The connection authenticates; reading and writing documents through
# the listener is planned, so load and query the data over SQL (below)
-- psql -h heliosdb-host -p 5432 -d mydb
CREATE TABLE users (
id TEXT PRIMARY KEY,
doc JSONB NOT NULL
);
INSERT INTO users (id, doc) VALUES
('u1', '{"name": "Alice", "age": 30, "dept": "Engineering", "tags": ["admin", "dev"]}'),
('u2', '{"name": "Bob", "age": 25, "dept": "Marketing", "tags": ["viewer"]}'),
('u3', '{"name": "Carol", "age": 35, "dept": "Engineering", "tags": ["admin"]}');
-- MongoDB: db.users.find({ dept: "Engineering" }).sort({ age: -1 })
SELECT doc->>'name' AS name, (doc->>'age')::int AS age
FROM users
WHERE doc @> '{"dept": "Engineering"}'
ORDER BY age DESC;
// MongoDB: multi-stage pipeline with $facet
db.orders.aggregate([
{ $match: { date: { $gte: ISODate("2026-01-01") } } },
{
$facet: {
byDepartment: [
{ $group: { _id: "$department", revenue: { $sum: "$total" } } },
{ $sort: { revenue: -1 } }
],
topCustomers: [
{ $group: { _id: "$customer_id", spent: { $sum: "$total" } } },
{ $sort: { spent: -1 } },
{ $limit: 10 },
{ $lookup: {
from: "customers",
localField: "_id",
foreignField: "_id",
as: "customer"
}},
{ $unwind: "$customer" },
{ $project: { name: "$customer.name", spent: 1 } }
]
}
}
]);
-- HeliosDB Full: one query per facet, over the PostgreSQL wire
-- byDepartment
SELECT doc->>'department' AS department,
SUM((doc->>'total')::numeric) AS revenue
FROM orders
WHERE (doc->>'date')::timestamptz >= '2026-01-01'
GROUP BY 1
ORDER BY revenue DESC;
-- topCustomers: $group + $lookup + $unwind become GROUP BY + JOIN
SELECT c.doc->>'name' AS name, t.spent
FROM (
SELECT doc->>'customer_id' AS customer_id,
SUM((doc->>'total')::numeric) AS spent
FROM orders
WHERE (doc->>'date')::timestamptz >= '2026-01-01'
GROUP BY 1
ORDER BY spent DESC
LIMIT 10
) t
JOIN customers c ON c.id = t.customer_id
ORDER BY t.spent DESC;
Keep the documents in tables and their embeddings in an HTTP vector store, then retrieve with POST /api/v1/vectors/stores/{store}/search/hybrid. Vector columns and HNSW indexes in SQL are planned for HeliosDB Full.
MongoDB session transactions through the listener are planned with its reads and writes. In SQL, one multi-statement transaction covers the same transfer:
BEGIN;
UPDATE accounts SET balance = balance - 500 WHERE name = 'Alice';
UPDATE accounts SET balance = balance + 500 WHERE name = 'Bob';
INSERT INTO transfers (from_name, to_name, amount, created_at)
VALUES ('Alice', 'Bob', 500, NOW());
COMMIT;
These limits apply to HeliosDB Full, the edition this page compares. If you are looking at the embedded HeliosDB Nano instead, note that in the stock Nano server, row-level security is enforced through the embedded API and the REPL; SQL CREATE POLICY and enforcement for REST and wire clients are planned (Nano deployment modes).
authMechanism=SCRAM-SHA-256. The listener is also opt-in (--enable-mongodb). Compatibility notesMoving from MongoDB to HeliosDB Full today is a move to SQL: export the collections, load them as JSONB rows over the PostgreSQL wire protocol, then rewrite driver calls as SQL. The MongoDB migration guide covers schema choices and import scripts. Pointing MongoDB drivers at the HeliosDB listener becomes an option once its reads and writes ship (compatibility notes).
# Export each collection as a JSON array
mongoexport --uri="mongodb://mongodb-host:27017/mydb" \
--collection=users --out=users.json --jsonArray
import json
import psycopg2
conn = psycopg2.connect("host=heliosdb-host port=5432 dbname=mydb user=app")
cur = conn.cursor()
cur.execute("""
CREATE TABLE IF NOT EXISTS users (
mongo_id TEXT PRIMARY KEY,
doc JSONB NOT NULL
)
""")
with open("users.json", encoding="utf-8") as f:
for doc in json.load(f):
raw_id = doc.pop("_id")
mongo_id = raw_id.get("$oid", "") if isinstance(raw_id, dict) else str(raw_id)
cur.execute(
"INSERT INTO users (mongo_id, doc) VALUES (%s, %s::jsonb)",
(mongo_id, json.dumps(doc)),
)
conn.commit()
-- Compare with db.users.countDocuments() on MongoDB
SELECT COUNT(*) FROM users;
-- Compare with db.users.aggregate([{ $group: { _id: "$status", count: { $sum: 1 } } }])
SELECT doc->>'status' AS status, COUNT(*)
FROM users
GROUP BY 1;
Replace find, insert, update and aggregate calls with SQL through a PostgreSQL driver, using the stage mapping above. For vector search, keep embeddings in an HTTP vector store and query it with POST /api/v1/vectors/stores/{store}/search/hybrid; vector indexes in SQL are planned for HeliosDB Full.
| Tier | MongoDB Atlas | HeliosDB |
|---|---|---|
| Free tier | M0: 512MB, shared, no vector search | None for Full (HeliosDB Nano is free, Apache 2.0) |
| Development | M10: $57/month ($684/yr) | Annual license, custom-priced |
| Production | M30: $370/month ($4,440/yr) | Annual license, custom-priced |
| Production + Vectors | M30 + Atlas Search: ~$500/month | Vectors included in the license |
| Enterprise | M50+: $1,000+/month | Annual license, custom-priced |
| Managed service | Atlas metered pricing | Coming soon (see pricing) |
| Support | $15,000+/year (Enterprise) | Through sales@heliosdb.com |
| Dimension | MongoDB 7 | FerretDB | HeliosDB Full |
|---|---|---|---|
| License | SSPL | Apache-2.0 | SSPL-1.0 |
| MongoDB wire compatibility | Native | Yes (proxy) | Listener authenticates drivers; reads and writes planned |
| Aggregation | 35+ stages | ~10 stages | SQL today; MongoDB pipelines planned |
| Vector search | Atlas-only (cloud) | No | HNSW vector stores over HTTP (self-hosted); SQL vector indexes planned |
| NL queries | No | No | Planned |
| Intelligent indexing | Atlas Advisor (paid) | No | Planned |
| SQL access | No | Backend-dependent | Yes (PostgreSQL, MySQL and Oracle wire) |
| Change streams | Yes | No | Planned |
| Transactions | Multi-document | Backend-dependent | Multi-statement SQL transactions + MVCC |
| Time-travel | No | No | Planned |
| Encryption | Enterprise only | Backend-dependent | Planned |
| Deployment | Multi-component | Proxy + backend | Licensed single server (clustering planned) |
| Best for | Established MongoDB shops | License compliance (minimal) | Document data moved into SQL, with HTTP vector stores |
| Production cost | $370+/month (Atlas) | $0 + backend cost | Annual license (sales) |
MongoDB defined the document database category, and FerretDB offers an Apache-2.0 translation layer over PostgreSQL or SQLite. HeliosDB Full makes a different trade: one SSPL-1.0 licensed engine where documents live as JSONB rows next to HTTP vector stores, queried over the PostgreSQL, MySQL or Oracle wire protocol; time travel, branching and SQL vector indexes for HeliosDB Full are planned. Its MongoDB listener authenticates drivers today; reading and writing documents through it is planned, so check the compatibility notes before you plan a cutover that keeps MongoDB drivers.
HeliosDB Nano, built from source with these features, adds CREATE EXTENSION hdb_code for SQL-callable LSP, the WITH CONTEXT clause for grounded RAG, eight ingestion adapters (incl. Docling-backed PDF / Office / audio / image), an in-process embedder, and a native MCP server reachable from Claude Code, Cursor, Continue, Codex, and Aider. Equivalents for HeliosDB Lite and Full are planned. Learn more →
HeliosDB Full is licensed through sales under SSPL-1.0. HeliosDB Nano is open source under Apache 2.0 and free to use.