vincent-herlemont/native_db
vincent-herlemont/native_db has 720 GitHub stars and 40 forks. Star changes are not measured yet. Last checked 2026-11-11 03:23 UTC. Last push 2026-11-06.
Drop-in embedded database in Rust
What you can do
- Note: Optional secondary keys with None values cannot be queried using range syntax. See documentation for details.
- Fast, see sqlite vs redb vs native_db benchmarks.
- Transparent serialization/deserialization using native_model. You can use any serialization library you want (bincode, postcard, your own etc.).
- Ensure query type safety to prevent unexpected results caused by selecting with an incorrect type.
Measured star growth
- in 24h
- Update delayed
- in 7 days
- Collecting history
- in 15 days
- Collecting history
- in 1 month
- Collecting history
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
README.md
OriginalNative DB
Here's a drop-in, fast, embedded database for multi-platform apps (server, desktop, mobile). Sync Rust types effortlessly. Enjoy! 😌🍃.
Features
- Simple API 🦀.
- Support for multiple indexes (primary, secondary, unique, non-unique, optional).
- Note: Optional secondary keys with
Nonevalues cannot be queried using range syntax. See documentation for details.
- Note: Optional secondary keys with
- Fast, see
sqlitevsredbvsnative_dbbenchmarks. - Transparent serialization/deserialization using native_model. You can use any serialization library you want (
bincode,postcard, your own etc.). - Ensure query type safety to prevent unexpected results caused by selecting with an incorrect type.
- Automatic model migration 🌟.
- Thread-safe and fully ACID-compliant transactions provided by redb.
- Real-time subscription with filters for
insert,updateanddeleteoperations. - Compatible with all Rust types (
enum,struct,tupleetc.). - Hot snapshots.
Installation
Add this to your Cargo.toml:
[dependencies]
native_db = "0.8.1"
native_model = "0.4.20"
Status
Active development. The API is not stable yet and may change in the future.
How to use?
- Documentation API
- Quick Start
- Major Version Upgrade Guide
- Full example with Tauri: native_db_tauri_vanilla
Projects using Native DB
If you want to propose your project or company that uses Native DB, please open a PR.
Example
use serde::{Deserialize, Serialize};
use native_db::*;
use native_db::native_model::{native_model, Model};
use once_cell::sync::Lazy;
#[derive(Serialize, Deserialize, PartialEq, Debug)]
#[native_model(id = 1, version = 1)]
#[native_db]
struct Item {
#[primary_key]
id: u32,
#[secondary_key]
name: String,
}
// Define the models
// The lifetime of the models needs to be longer or equal to the lifetime of the database.
// In many cases, it is simpler to use a static variable but it is not mandatory.
static MODELS: Lazy<Models> = Lazy::new(|| {
let mut models = Models::new();
models.define::<Item>().unwrap();
models
});
fn main() -> Result<(), db_type::Error> {
// Create a database in memory
let mut db = Builder::new().create_in_memory(&MODELS)?;
// Insert data (open a read-write transaction)
let rw = db.rw_transaction()?;
rw.insert(Item { id: 1, name: "red".to_string() })?;
rw.insert(Item { id: 2, name: "green".to_string() })?;
rw.insert(Item { id: 3, name: "blue".to_string() })?;
rw.commit()?;
// Open a read-only transaction
let r = db.r_transaction()?;
// Retrieve data with id=3
let retrieve_data: Item = r.get().primary(3_u32)?.unwrap();
println!("data id='3': {:?}", retrieve_data);
// Iterate items with name starting with "red"
for item in r.scan().secondary::<Item>(ItemKey::name)?.start_with("red")? {
println!("data name=\"red\": {:?}", item);
}
// Remove data (open a read-write transaction)
let rw = db.rw_transaction()?;
rw.remove(retrieve_data)?;
rw.commit()?;
Ok(())
}
Explore related projects
freeCodeCamp/freeCodeCamp
freeCodeCamp.org's open-source codebase and curriculum. Learn math, programming, and computer science for free.
458,970 starsdonnemartin/system-design-primer
Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards.
377,628 starsreact/react
The library for web and native user interfaces.
252,529 starsvuejs/vue
This is the repo for Vue 2. For Vue 3, go to https://github.com/vuejs/core
212,622 stars