OverDrive-DB embedded SDK - zero-config JSON document database
Project description
OverDrive-DB InCode SDK v2.2.0
Zero-config embedded document database with SQL, MVCC transactions, and 6 storage engines — in 5 languages.
Features
| Feature | Description |
|---|---|
| Zero-config | Open a file, start querying — no setup needed |
| JSON Native | Store, query, and index JSON documents |
| SQL Queries | SELECT, INSERT, UPDATE, DELETE, WHERE, ORDER BY, LIMIT |
| Aggregations | COUNT, SUM, AVG, MIN, MAX, GROUP BY |
| Full-text Search | Built-in text search across documents |
| B-Tree Indexes | Secondary indexes for fast lookups |
| ACID Transactions | MVCC with 4 isolation levels |
| Encryption | AES-256-GCM via Argon2id key derivation |
| RAM Engine | Sub-microsecond in-memory storage |
| Watchdog | File integrity monitoring |
| Cross-platform | Windows x64, Linux x64/ARM64, macOS x64/ARM64 |
6 Storage Engines
| Engine | Use Case | Latency |
|---|---|---|
| Disk (default) | General-purpose persistent storage | ~1ms |
| RAM | Caching, sessions, leaderboards | <1µs |
| Vector | Similarity search, embeddings | ~5ms |
| Time-Series | Metrics, IoT, logs | ~2ms |
| Graph | Social networks, knowledge graphs | ~3ms |
| Streaming | Event queues, message brokers | ~1ms |
Quick Start
Rust
use overdrive::OverdriveDb;
use serde_json::json;
let mut odb = OverdriveDb::open("app.odb").unwrap();
odb.create_table("users").unwrap();
let id = odb.insert("users", &json!({"name":"Alice","age":30})).unwrap();
let doc = odb.get("users", &id).unwrap().unwrap();
println!("{}", doc["name"]); // "Alice"
odb.close().ok();
Node.js
const { OverdriveDb } = require('overdrive-db');
const odb = OverdriveDb.open('app.odb');
odb.createTable('users');
const id = odb.insert('users', { name: 'Alice', age: 30 });
const doc = odb.get('users', id);
console.log(doc.name); // "Alice"
odb.close();
Go
import overdrive "github.com/ALL-FOR-ONE-TECH/overdrive-db-go"
odb, _ := overdrive.Open("app.odb")
defer odb.Close()
odb.CreateTable("users")
id, _ := odb.Insert("users", map[string]any{"name": "Alice", "age": 30})
doc, _ := odb.Get("users", id)
fmt.Println(doc["name"]) // Alice
Java
try (OverdriveDb odb = OverdriveDb.open("app.odb")) {
odb.createTable("users");
String id = odb.insert("users", Map.of("name","Alice","age",30));
Map<String,Object> doc = odb.get("users", id);
System.out.println(doc.get("name")); // Alice
}
Python
from overdrive import OverdriveDb
with OverdriveDb.open("app.odb") as odb:
odb.create_table("users")
id = odb.insert("users", {"name": "Alice", "age": 30})
doc = odb.get("users", id)
print(doc["name"]) # Alice
Full API Reference
Lifecycle
| Operation | Rust | Node.js | Java | Go | Python |
|---|---|---|---|---|---|
| Open | OverdriveDb::open(path) |
OverdriveDb.open(path) |
OverdriveDb.open(path) |
Open(path) |
OverdriveDb.open(path) |
| Open+Engine | open_with_options(path,opts) |
open(path,{engine}) |
open(path,"RAM",null) |
Open(path,WithEngine("RAM")) |
open(path,engine="RAM") |
| Open+Password | open_with_options(path,opts) |
open(path,{password}) |
open(path,"Disk",pwd) |
Open(path,WithPassword(pwd)) |
open(path,password=pwd) |
| Close | odb.close() |
odb.close() |
odb.close() |
odb.Close() |
odb.close() |
| Sync | odb.sync() |
odb.sync() |
odb.sync() |
odb.Sync() |
odb.sync() |
| Version | OverdriveDb::version() |
OverdriveDb.version() |
OverdriveDb.version() |
Version() |
OverdriveDb.version() |
Tables
| Operation | Rust | Node.js / Java | Go | Python |
|---|---|---|---|---|
| Create | odb.create_table(name) |
odb.createTable(name) |
odb.CreateTable(name) |
odb.create_table(name) |
| Drop | odb.drop_table(name) |
odb.dropTable(name) |
odb.DropTable(name) |
odb.drop_table(name) |
| List | odb.list_tables() |
odb.listTables() |
odb.ListTables() |
odb.list_tables() |
| Exists | odb.table_exists(name) |
odb.tableExists(name) |
odb.TableExists(name) |
odb.table_exists(name) |
CRUD
| Operation | Rust | Node.js / Java | Go | Python |
|---|---|---|---|---|
| Insert | odb.insert(table, &doc) |
odb.insert(table, doc) |
odb.Insert(table, doc) |
odb.insert(table, doc) |
| Insert batch | odb.insert_batch(table, &docs) |
odb.insertMany(table, docs) |
odb.InsertBatch(table, docs) |
odb.insert_many(table, docs) |
| Get | odb.get(table, id) |
odb.get(table, id) |
odb.Get(table, id) |
odb.get(table, id) |
| Update | odb.update(table, id, &patch) |
odb.update(table, id, patch) |
odb.Update(table, id, patch) |
odb.update(table, id, patch) |
| Delete | odb.delete(table, id) |
odb.delete(table, id) |
odb.Delete(table, id) |
odb.delete(table, id) |
| Count | odb.count(table) |
odb.count(table) |
odb.Count(table) |
odb.count(table) |
Query & Search
| Operation | Rust | Node.js / Java | Go | Python |
|---|---|---|---|---|
| SQL Query | odb.query(sql) |
odb.query(sql) |
odb.Query(sql) |
odb.query(sql) |
| Search | odb.search(table, text) |
odb.search(table, text) |
odb.Search(table, text) |
odb.search(table, text) |
Transactions
| Level | Value |
|---|---|
| Read Uncommitted | 0 |
| Read Committed | 1 (default) |
| Repeatable Read | 2 |
| Serializable | 3 |
| Operation | Rust | Node.js / Java | Go | Python |
|---|---|---|---|---|
| Begin | odb.begin_transaction(iso) |
odb.beginTransaction(iso) |
odb.BeginTransaction(iso) |
odb.begin_transaction(iso) |
| Commit | odb.commit_transaction(&txn) |
odb.commitTransaction(id) |
odb.CommitTransaction(id) |
odb.commit_transaction(id) |
| Abort | odb.abort_transaction(&txn) |
odb.abortTransaction(id) |
odb.AbortTransaction(id) |
odb.abort_transaction(id) |
| Callback | odb.transaction(iso, |odb|{}) |
odb.transaction(fn) |
odb.Transaction(fn, iso) |
odb.transaction(fn) |
Error Codes
| Code | Type | When |
|---|---|---|
ODB-AUTH-* |
Authentication | Wrong password, key too short |
ODB-TABLE-* |
Table | Not found, already exists |
ODB-QUERY-* |
Query | SQL syntax error |
ODB-TXN-* |
Transaction | Deadlock, conflict |
ODB-IO-* |
I/O | File not found, corrupted |
ODB-FFI-* |
FFI | Native library not found |
Native Binary Distribution
The native library lives in lib/{os}-{arch}/:
lib/
windows-x64/ overdrive.dll (3.4MB)
linux-x64/ liboverdrive.so
linux-arm64/ liboverdrive.so
macos-x64/ liboverdrive.dylib
macos-arm64/ liboverdrive.dylib
Override path: Set OVERDRIVE_LIB_PATH env var to load a custom native lib.
Rebuild from source:
# Windows
.\scripts\build-native.ps1
# Linux / macOS
./scripts/build-native.sh
E2E Test Results — v2.2.0
| SDK | Tests | Status |
|---|---|---|
| 🦀 Rust | 10/10 | ✅ PASS |
| 🟢 Node.js | 10/10 | ✅ PASS |
| 🐹 Go | 10/10 | ✅ PASS |
| ☕ Java | 10/10 | ✅ PASS |
| 🐍 Python | 10/10 | ✅ PASS |
| Total | 50/50 | ✅ ALL PASS |
License
MIT OR Apache-2.0 — © 2026 AFOT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file overdrive_db-2.2.0.tar.gz.
File metadata
- Download URL: overdrive_db-2.2.0.tar.gz
- Upload date:
- Size: 8.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1d090324ec7b2fe442d29c9fe48704eb62a6d174b4f0d0da65bbbec7f8ee6055
|
|
| MD5 |
dbe8981d0545d0bee212233eab5f8baa
|
|
| BLAKE2b-256 |
9d5471546212137390a9802522253727ebb486cbdbc865a145464e5704ccdee6
|
File details
Details for the file overdrive_db-2.2.0-py3-none-any.whl.
File metadata
- Download URL: overdrive_db-2.2.0-py3-none-any.whl
- Upload date:
- Size: 7.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bf6d12991803ed5490a6d765a917c8fb077e3199c8947525aaa06b7976fe4d68
|
|
| MD5 |
c6a189c3ed126c027f2c6a8980de9f72
|
|
| BLAKE2b-256 |
1ec202147aa151592a9f7c773d77e6b3f329ace358459d703ee644f5f380227c
|