The embedded application databaseYour models.
Your models.
Your application.
Simply persisted.
Store and query your Rust models directly, including nested data. No database server to run. No mapping layer to maintain.
Application codeRust
#[derive(Serialize, Deserialize, QuokkaDocument)]
struct Plant {
#[serde(rename = "_id")]
id: QuokkaId,
name: String,
needs_water: bool,
}
let db = QuokkaDB::open("./data")?;
let plants = db
.typed_collection::<Plant>("plants")
.create_if_missing();
plants.insert_one(Plant {
id: QuokkaId::new(),
name: "Monstera".into(),
needs_water: true,
})?;
let thirsty = plants.find_one(
|plant| plant.needs_water.eq(true)
)?;Persist your models, not your mappings.
Your application already knows its data. Keep that structure when you store it.
Keep your structure
Store nested objects and collections directly, with typed queries and a BSON API for dynamic data.
Open a path. Start building.
Runs inside your application. All database files live in one directory, with no server to configure.
Database foundations
Durability, indexes, concurrent access, atomic document writes, and crash recovery.
At home inside your application.
For local data that needs more than a file and less infrastructure.
Desktop appsDeveloper toolsAgentsEdge applicationsLocal services
Small footprint. Serious engineering.
Explore the storage design, query execution, configuration, and current limitations.
Explore the documentation →Help QuokkaDB grow.
QuokkaDB is evolving. Try it in a small project and tell us what works and what feels awkward.
Project status & contributing →