The Embedded Database
for Node.js
Replaces SQLite, LowDB, NeDB and raw JSON files with a real database. MongoDB-style queries, ACID transactions, zero native dependencies. No more node-gyp failures. No more electron-rebuild. Just npm install. Runs on Node.js 20+ and Bun — one codebase, same data files, no runtime lock-in.
1// npm install axiodb2const { AxioDB } = require('axiodb');3
4// Create AxioDB instance with built-in GUI5const db = new AxioDB({ GUI: true }); // Enable GUI at localhost:270186
7// Create database and collection8const myDB = await db.createDB('HelloWorldDB');9const collection = await myDB.createCollection('greetings');10
11// Insert and retrieve data - Hello World!12await collection.insert({ message: 'Hello, Developer!' });13const result = await collection.query({}).exec();14console.log(result.data.documents[0].message); // Hello, Developer!All 14 test suites — CRUD, transactions, reads, aggregation, auth, HTTP API, TCP (auth/no-auth/transaction/TLS), crash recovery, MCP, and cache options — pass on the machine's Node (v26.8.1) and Bun (v1.4.0), including the worker-thread data paths (reads of ≥100-file collections, searches over ≥10,000 documents). Node 20+ is the supported baseline; Bun is verified on the installed v1.4.0 only. Deno (v2.9.6) passes all 100 runtime tests including Bun compiled binaries.
Load the AxioDB Agent Skill into ChatGPT, Claude, Cursor, Copilot, or any AI coding assistant to get expert guidance on queries, schema design, transactions, and best practices.
Spin up AxioDB on a cloud container and let your AI agent (Claude, or any MCP-compatible client) talk to that database directly — 43 tools, real login, the exact same RBAC as the web GUI.
CLI tool for AxioDB — interactive REPL with MongoDB shell syntax, all 32 TCP commands, TLS support, and installers for 12 platforms.
Native desktop app (Electron) with a card-based document viewer, bouncy-ball splash loader, connection management, and all-in-one database tooling for Linux, macOS, and Windows.
Insert Operations
Insert Single
InsertMany (500)
Validation
Read/Query Operations (100K docs)
Indexed
documentId
findOne
$gt
$in (5)
Regex
Update Operations
UpdateOne
UpdateMany
Verify
Delete Operations
DeleteOne
DeleteMany
Verify
Transaction Operations
TX Insert
TX Update
TX Delete
TX Mixed
Rollback
Savepoint
withTX
Index Sync
Test Suite Overview (100K docs - 14/14 Passing)
CRUD
4.1 s39 tests
Transactions
681 ms23 tests
Read / Query
24.5 s39 tests
Aggregation
457 ms63 tests
Auth & RBAC
6.1 s35 tests
HTTP API
1.5 s47 tests
TCP Auth
3.3 s25 tests
TCP No-Auth
918 ms5 tests
TCP TX
1.4 s22 tests
TCP TLS
836 ms3 tests
Crash Recovery
6.2 s3 tests
MCP Confirm
49 ms10 tests
MCP Functional
1.2 s4 tests
Cache Options
1.4 s11 tests
Introducing AxioDBCloud
Deploy AxioDB in Docker or Cloud. Connect from anywhere with TCP protocol. Same API, zero code changes!
Database Visualization Built In
Start AxioDB with new AxioDB({ GUI: true }) to enable the built-in web GUI on localhost:27018. Perfect for Electron apps—give your users a database inspector without extra dependencies.
Born from SQLite Pain. Built to Be Better.
It started with a simple error: node-gyp ERR! — again.
We were building an Electron app. Needed a database. Tried better-sqlite3 — node-gyp compilation failed. Tried LowDB — data corrupted on concurrent writes. Tried NeDB — abandoned since 2016.
So we built AxioDB.
No node-gyp, no electron-rebuild, no platform headaches
Crash recovery, savepoints, write-ahead logging
JavaScript objects, not SQL strings
InMemoryCache + web dashboard included
Still Using LowDB, NeDB, or better-sqlite3?
Here's what developers actually deal with every day:
- ✗No concurrency — concurrent writes corrupt data
- ✗No ACID transactions — crash = data loss
- ✗No built-in caching — full file rewrite every time
- ✗Single JSON file — entire DB loaded into memory
- ✗Last updated 3 years ago
- ✗No longer maintained since 2016
- ✗Data loss issues reported by users
- ✗File corruption on concurrent access
- ✗No TypeScript support
- ✗Security vulnerabilities unpatched
- ✗Requires native C bindings compilation
- ✗node-gyp headaches on every platform
- ✗electron-rebuild required for Electron apps
- ✗SQL strings instead of JavaScript objects
- ✗Platform-specific builds (Windows ≠ Mac)
AxioDB solves all of these problems:
Why AxioDB?
SQLite requires native C bindings that cause deployment headaches. JSON files have no querying or caching. MongoDB needs a separate server. AxioDB combines the best of all: embedded like SQLite, NoSQL queries like MongoDB, intelligent caching built-in.
Zero native dependencies. No compilation, no platform-specific binaries, no node-gyp headaches. Works everywhere Node.js runs.
Built-in InMemoryCache with automatic invalidation. Instant query results for frequently-accessed data. Multi-core parallelism with Worker Threads.
JavaScript objects, not SQL strings. Operators like $gt, $regex, aggregation pipelines, schema-less documents.
Commit, rollback and savepoints over a write-ahead log, with crash recovery — not something you bolt on later.
Node.js Applications
Embedded database for Node.js apps requiring local storage. No external dependencies, no server setup, no compilation. Works on all platforms without native bindings.
Desktop & CLI Tools
Perfect for desktop apps (Electron, Tauri) and CLI tools. Store configuration, cache data, manage local state—all with npm install.
Rapid Prototyping
Skip database setup entirely. Query with JavaScript objects, not SQL strings. Handles 10K-500K documents with intelligent caching. Migrate to PostgreSQL or MongoDB when you scale.
Embedded Systems
Local-first applications, IoT devices, edge computing. Single-instance architecture with file-based storage. Built-in GUI for data inspection during development.
AxioDB is not competing with PostgreSQL or MongoDB. It's for when you need a database embedded in your app—Electron, CLI tools, local-first apps. Sweet spot: 10K-500K documents. No native dependencies, no server setup.
AdminPassword — set the admin password at startup
The seeded admin/admin account is flagged mustChangePassword, and only the HTTP API or GUI can clear that flag. Start the server with the GUI disabled and there was no way to choose a password — TCP rejected every login and nothing could recover it. AdminPassword closes that gap.
In your app
1const db = new AxioDB({2 TCP: true,3 TCPAuth: true,4 GUI: false,5 AdminPassword: 'my-secret-password',6});In the CLI
1axiodb serve tcp-auth my-secret-password2axiodb serve full my-secret-passwordIn Docker
1docker run -d \2 -e AXIODB_GUI=false \3 -e AXIODB_ADMIN_PASSWORD=my-secret-password \4 theankansaha/axiodbWhat you get
- ✓One account across embedded, HTTP, GUI, TCP, MCP and the CLI — they all read the same
configdatabase - ✓Sets
mustChangePassword: false, so logins work immediately - ✓Read on first start only — a container restart never resets a password you have since changed
- ✓Additive: omit it and the
admin/admin+ forced-change behaviour is unchanged
Now enforced, not just documented
- !
axiodb serve tcp-authrequires a password and exits without one - !The Docker image refuses to start when TCP auth is on,
AXIODB_HTTPis off and no password is set - —
httpandfullkeep it optional: their control server can rotate the password - —Full option reference →
See also: Features · Installation · Comparison
