You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Embeddable hybrid SQL+NoSQL document database. Like SQLite, but for JSON — with encryption, MVCC, and 6 storage engines.
Import the package. Open a file. Query your data. No server needed.
Install
pip install overdrive-db # Python
npm install overdrive-db # Node.js
cargo add overdrive-db # Rust (native crate)
go get github.com/ALL-FOR-ONE-TECH/OverDrive-DB_IncodeSDK/go@v2.3.0 # Go
use overdrive::OverdriveDb;use serde_json::json;letmut odb = OverdriveDb::open("myapp.odb").unwrap();
odb.create_table("users").unwrap();let id = odb.insert("users",&json!({"name":"Alice","age":30})).unwrap();let rows = odb.query("SELECT * FROM users WHERE age > 25").unwrap();println!("{} rows", rows.len());
odb.close().unwrap();
SELECT, WHERE, ORDER BY, LIMIT with field comparisons
Full-text Search
Built-in tokenised text search across documents
B-Tree Indexes
Secondary indexes for fast range lookups
ACID Transactions
MVCC with 4 isolation levels + deadlock detection
Deferred Sync
WAL-based crash safety; fsync batched every 1000 ops / 5 s
Change History
Per-document WAL changelog (get_history)
Encryption
AES-256-GCM via Argon2id key derivation
6 Storage Engines
Disk, RAM, Vector, Time-Series, Graph, Streaming
Cross-platform
Windows x64, Linux x64/ARM64, macOS x64/ARM64
6 Storage Engines
Engine
Use Case
Latency
Open Flag
Disk (default)
General-purpose persistent storage
~1 ms
engine="Disk"
RAM
Caching, sessions, leaderboards
< 1 µs
engine="RAM"
Vector
Similarity search, embeddings
~5 ms
engine="Vector"
TimeSeries
Metrics, IoT, logs
~2 ms
engine="TimeSeries"
Graph
Social networks, knowledge graphs
~3 ms
engine="Graph"
Streaming
Event queues, message brokers
~1 ms
engine="Streaming"
# Open with a specific engineodb=OverdriveDb.open("cache.odb", engine="RAM")
odb=OverdriveDb.open("events.odb", engine="TimeSeries")
odb=OverdriveDb.open("graph.odb", engine="Graph")
API Reference
All SDKs share the same API surface. Method names follow each language's conventions.
Database Lifecycle
Python
Node.js
Java
Go
Rust
C
OverdriveDb.open(path)
OverdriveDb.open(path)
OverDrive.open(path)
overdrive.Open(path)
OverdriveDb::open(path)
overdrive_open(path)
odb.close()
odb.close()
odb.close()
odb.Close()
odb.close()
overdrive_close(odb)
odb.sync()
odb.sync()
odb.sync()
odb.Sync()
odb.sync()
overdrive_sync(odb)
OverdriveDb.version()
OverdriveDb.version()
OverDrive.version()
overdrive.Version()
OverdriveDb::version()
overdrive_version()
CRUD Operations
Operation
Python
Node.js
Java
Go
Rust
Insert
odb.insert(table, doc)
odb.insert(table, doc)
odb.insert(table, doc)
odb.Insert(table, doc)
odb.insert(table, &doc)
Insert Many
odb.insert_many(table, docs)
odb.insertMany(table, docs)
odb.insertMany(table, docs)
odb.InsertBatch(table, docs)
odb.insert_batch(table, &docs)
Get
odb.get(table, id)
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)
odb.update(table, id, &patch)
Delete
odb.delete(table, id)
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)
odb.count(table)
Query (SQL)
odb.query(sql)
odb.query(sql)
odb.query(sql)
odb.Query(sql)
odb.query(sql)
Query Safe
odb.query_safe(sql, params)
odb.querySafe(sql, params)
odb.querySafe(sql, params)
odb.QuerySafe(sql, params)
odb.query_safe(sql, ¶ms)
Search
odb.search(table, text)
odb.search(table, text)
odb.search(table, text)
odb.Search(table, text)
odb.search(table, text)
History
odb.get_history(table, id)
odb.getHistory(table, id)
odb.getHistory(table, id)
odb.GetHistory(table, id)
odb.get_history(table, id)
Tables
Operation
Python
Node.js / Java
Go
Create
odb.create_table(name)
odb.createTable(name)
odb.CreateTable(name)
Drop
odb.drop_table(name)
odb.dropTable(name)
odb.DropTable(name)
List
odb.list_tables()
odb.listTables()
odb.ListTables()
Exists
odb.table_exists(name)
odb.tableExists(name)
odb.TableExists(name)
Advanced / Security
Feature
Python
Node.js
C
Password open
OverdriveDb.open(path, password=...)
OverdriveDb.open(path, {password:...})
overdrive_open_with_engine(path, engine, pass)
Engine select
OverdriveDb.open(path, engine="RAM")
OverdriveDb.open(path, {engine:"RAM"})
overdrive_open_with_engine(path, engine, "")
Backup
odb.backup(dest)
odb.backup(dest)
overdrive_backup(odb, dest)
Cleanup WAL
odb.cleanup_wal()
odb.cleanupWal()
overdrive_cleanup_wal(odb)
Verify integrity
odb.verify_integrity()
odb.verifyIntegrity()
overdrive_verify_integrity(odb)
Transaction callback
odb.transaction(fn)
odb.transaction(fn)
—
Transactions
All SDKs support MVCC transactions with 4 isolation levels:
Note: The WAL is checkpointed on every sync() / close(). History is live-session only — for permanent audit logs, back up the .wal file before closing.
Security
# Encrypted database (AES-256-GCM, key from Argon2id)odb=OverdriveDb.open("secret.odb", password="my-passphrase")
# Parameterised query — prevents SQL injectionresults=odb.query_safe(
"SELECT * FROM orders WHERE amount > ?1 AND status = ?2",
[100, "paid"]
)
# Backup (flush + copy, chmod 600 on Linux/Mac)odb.backup("backups/myapp-2024-01-01.odb")
# WAL cleanup (removes replay-attack surface after shutdown)odb.sync()
odb.cleanup_wal()
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, unbound placeholder
ODB-TXN-*
Transaction
Deadlock, conflict
ODB-IO-*
I/O
File not found, corrupted, backup failed
ODB-FFI-*
FFI
Native library not found
C/C++ Memory Rules
Every char* returned by overdrive_* functions must be freed with overdrive_free_string().
Do not free: overdrive_last_error(), overdrive_version() (static pointers).