sqjson
sqjson is a simple, embedded, file-based key-value database using JSON values and memory-mapped files
(like SQLite, but for JSON). Written in pure Rust with minimal dependencies (serde, memmap2, thiserror).
🚀 Features
- Lightweight and fast embedded JSON key-value store
- File-based — stores data in a single
.dbfile using fixed-size pages - Flexible JSON values with
serde_json - Key-based storage and retrieval (
put,get) - Secondary index support: query records by arbitrary JSON field values
- Field-level access: fetch specific JSON fields without deserializing entire records
- Delete records by key
- Export full database snapshot to pretty JSON file
- Memory-mapped I/O for efficient read/write performance
- Simple API, easy to embed in Rust projects
📦 Installation
Add to your Rust project with:
Or add manually to your Cargo.toml:
🛠 Usage Examples
;
;
)
🔧 API Overview
Method Description YourDb::open(path) Open or create a database file put(key, value) Insert or update a JSON value under a string key get(key) Retrieve a JSON value by key get_field(key, field) Retrieve a specific JSON field of a record query(field, value) Return list of keys where JSON field equals value delete(key) Remove a record by key flush() Persist index and data pages to disk show_all() Print all stored key-value pairs (for debugging) export_to_file(path) Export entire DB contents to a pretty JSON file
📁 File Format
Page 0: Stores the index (mapping keys to page IDs)
Page 1 and onwards: Store actual JSON-encoded data
Fixed page size (default 4096 bytes)
Data stored as length-prefixed JSON blobs
📃 License
MIT OR Apache-2.0
👤 Author
Hafiz Ali Raza