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 (
query) - Filter records with custom predicates (
filter) - Pagination for queries (
query_page) - Export query results to JSON file (
export_query) - Field-level access: fetch specific JSON fields without deserializing entire records (
get_field) - Delete records by key (
delete) - Export full database snapshot to pretty JSON file (
export_to_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 filter(predicate) Return key-value pairs matching a custom predicate query_page(field, value, limit, offset) Paginated query results by field value export_query(field, value, path) Export query results to JSON file 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