overdrive-db 2.3.1

OverDrive-DB embedded SDK — ACID transactions, AES-256 encryption, WAL durability, 6 storage engines. The SQLite alternative built in Rust.
Documentation

overdrive-db (Rust)

Crates.io License

Zero-config embedded JSON document database with ACID transactions, AES-256 encryption, and 6 storage engines.

Install

[dependencies]
overdrive-db = "1.0"

Quick Start

use overdrive::OverdriveDb;
use serde_json::json;

fn main() {
    let mut odb = OverdriveDb::open("myapp.odb").unwrap();

    odb.create_table("users").unwrap();

    // Insert — takes a &serde_json::Value
    let id = odb.insert("users", &json!({"name": "Alice", "age": 30})).unwrap();

    // Get by _id
    let doc = odb.get("users", &id).unwrap();
    println!("{:?}", doc);

    // SQL Query
    let rows = odb.query("SELECT * FROM users WHERE age > 25").unwrap();
    println!("{} rows", rows.len());

    // Count
    let n = odb.count("users").unwrap();
    println!("Total: {}", n);

    // Update
    odb.update("users", &id, &json!({"age": 31})).unwrap();

    // Delete
    odb.delete("users", &id).unwrap();

    odb.close().unwrap();
}

API Reference

Open

// Plain open
let mut odb = OverdriveDb::open("app.odb").unwrap();

// With options (password / engine)
use overdrive::OpenOptions;
let mut odb = OverdriveDb::open_with_options(
    "app.odb",
    OpenOptions::new().password("secret").engine("RAM"),
).unwrap();

// Version
let v = OverdriveDb::version();

Tables

odb.create_table("users").unwrap();
odb.drop_table("users").unwrap();
let tables: Vec<String> = odb.list_tables().unwrap();
let exists: bool = odb.table_exists("users").unwrap();

CRUD

// Insert → returns _id String
let id = odb.insert("users", &json!({"name": "Alice"})).unwrap();

// Insert batch → returns Vec<String> of _ids
let ids = odb.insert_batch("users", &[
    json!({"name": "Bob"}),
    json!({"name": "Carol"}),
]).unwrap();

// Get → Option<Value>
let doc = odb.get("users", &id).unwrap();

// Update → bool (true = updated)
let updated = odb.update("users", &id, &json!({"age": 31})).unwrap();

// Delete → bool (true = deleted)
let deleted = odb.delete("users", &id).unwrap();

// Count
let n = odb.count("users").unwrap();

Query

// SQL — returns Vec<Value>
let rows = odb.query("SELECT * FROM users WHERE age > 25 ORDER BY age LIMIT 10").unwrap();

// Full-text search — returns Vec<Value>
let results = odb.search("users", "Alice").unwrap();

Transactions

use overdrive::IsolationLevel;

// Callback style (auto-commit / auto-abort)
let result = odb.transaction(IsolationLevel::Serializable, |odb| {
    odb.insert("accounts", &json!({"balance": 1000}))?;
    odb.update("accounts", &some_id, &json!({"balance": 900}))?;
    Ok(())
}).unwrap();

// Manual style
let txn = odb.begin_transaction(IsolationLevel::ReadCommitted).unwrap();
match do_work(&mut odb) {
    Ok(_)  => odb.commit_transaction(&txn).unwrap(),
    Err(e) => { odb.abort_transaction(&txn).unwrap(); }
}

Isolation Levels:

Variant Value
IsolationLevel::ReadUncommitted 0
IsolationLevel::ReadCommitted 1 (default)
IsolationLevel::RepeatableRead 2
IsolationLevel::Serializable 3

Integrity Check

let report = odb.verify_integrity().unwrap();
println!("{}", report);

6 Storage Engines

OverdriveDb::open_with_options("app.odb", OpenOptions::new().engine("Disk"))       // default
OverdriveDb::open_with_options("cache.odb", OpenOptions::new().engine("RAM"))      // in-memory
OverdriveDb::open_with_options("vecs.odb", OpenOptions::new().engine("Vector"))    // embeddings
OverdriveDb::open_with_options("ts.odb", OpenOptions::new().engine("Time-Series")) // metrics/IoT
OverdriveDb::open_with_options("g.odb", OpenOptions::new().engine("Graph"))        // social graphs
OverdriveDb::open_with_options("q.odb", OpenOptions::new().engine("Streaming"))    // event queue

Platform Support

Platform Native Library
Windows x64 overdrive.dll
Linux x64 liboverdrive.so
Linux ARM64 liboverdrive.so
macOS x64 liboverdrive.dylib
macOS ARM64 liboverdrive.dylib

Links