Introduction
SlateDB is an embedded storage engine built as a log-structured merge-tree. Unlike traditional LSM-tree storage engines, SlateDB writes data to object storage (S3, GCS, ABS, MinIO, Tigris, and so on). Leveraging object storage allows SlateDB to provide bottomless storage capacity, high durability, and easy replication. The trade-off is that object storage has a higher latency and higher API cost than local disk.
To mitigate high write API costs (PUTs), SlateDB batches writes. Rather than writing every put() call to object storage, MemTables are flushed periodically to object storage as a string-sorted table (SST). The flush interval is configurable.
put() returns a Future that resolves when the data is durably persisted. Clients that prefer lower latency at the cost of durability can instead use put_with_options with await_durable set to false.
To mitigate read latency and read API costs (GETs), SlateDB will use standard LSM-tree caching techniques: in-memory block caches, compression, bloom filters, and local SST disk caches.
Checkout slatedb.io to learn more.
Get Started
Add the following to your Cargo.toml:
[]
= "*"
= "*"
Then you can use SlateDB in your Rust code:
use ;
use ;
use Arc;
async
SlateDB uses the object_store crate to interact with object storage, and therefore supports any object storage that implements the ObjectStore trait. You can use the crate in your project to interact with any object storage that implements the ObjectStore trait. SlateDB also re-exports the object_store crate for your convenience.
Documentation
Visit slatedb.io to learn more.
Bindings
Features
- Basic API (get, put, delete)
- SSTs on object storage
- Range queries (#8)
- Block cache (#15)
- Disk cache (#9)
- Compression (#10)
- Bloom filters (#11)
- Manifest persistence (#14)
- Compaction (#7)
- Transactions (#785)
- Merge operator (#328)
- Clones (#49)
- Range deletions (#577)
- Change data capture (CDC) (#249)
- Database splitting
- Database merging
Projects
Check out CONTRIBUTING.md for fun (and useful) projects to work on.
Release Schedule
SlateDB follows Semantic Versioning. We release new versions approximately every 2 months at the end of each even month (February, April, and so on). We guarantee forward/backward compatibility for storage formats between adjacent versions, but we do not currently guarantee API compatibility at this time (we reserve the right to break compile-time API compatibility).
Adopters
See who's using SlateDB.
Talks
- Internals of SlateDB: An Embedded Key-Value Store Built on Object Storage (Vignesh Chandramohan, 2025)
- Internals of SlateDB — by Vignesh Chandramohan (Vignesh Chandramohan, 2025)
- Database Internals - SlateDB (Chris Riccomini, 2024)
- Building a Cloud Native LSM on Object Storage (Rohan Desai/Chris Riccomini, 2024)
License
SlateDB is licensed under the Apache License, Version 2.0.
Foundation
SlateDB is a member of the Commonhaus Foundation.
Infrastructure Sponsors
Thanks to the following companies for donating services and infrastructure to the SlateDB project.