Skip to content

Persia DB

Persia DB is an embedded, single-file, cloud-native search database, written in Rust. Think “SQLite for search”: open a file, index documents, and get ranked results that, by default, never come back empty. The same segment bytes can live in a local file or in object storage (S3, GCS, or Azure Blob) and can be served by stateless query nodes on Kubernetes.

Persia DB motion graphic: open a file, search, and get ranked results. A misspelled query is relaxed. Embedded full-text search, written in Rust.
╔═ layers ═════════════════════════════════════════════════════════╗ 
║       ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓       ║░
║       ┃ persia-server, Rust SDK, Go SDK                  ┃       ║░
║       ┃ planned                                          ┃       ║░
║       ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛       ║░
║                                ▼                                 ║░
║       ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓       ║░
║       ┃ persia · Db and Collection                       ┃       ║░
║       ┃ stub · no methods yet                            ┃       ║░
║       ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛       ║░
║                                ▼                                 ║░
║ ┏━━━━━━━━━━━━━━━━━━┓  ┏━━━━━━━━━━━━━━━━━━┓  ┏━━━━━━━━━━━━━━━━━━┓ ║░
║ ┃ engine           ┃  ┃ blob             ┃  ┃ analysis         ┃ ║░
║ ┃ WAL and query    ┃  ┃ chunks, dedup    ┃  ┃ analyzers        ┃ ║░
║ ┃ in progress      ┃  ┃ not started      ┃  ┃ done             ┃ ║░
║ ┗━━━━━━━━━━━━━━━━━━┛  ┗━━━━━━━━━━━━━━━━━━┛  ┗━━━━━━━━━━━━━━━━━━┛ ║░
║                                ▼                                 ║░
║       ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓       ║░
║       ┃ persia-storage                                   ┃       ║░
║       ┃ memory and local file                            ┃       ║░
║       ┃ s3, gcs, azure planned                           ┃       ║░
║       ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛       ║░
║                                ▼                                 ║░
║       ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓       ║░
║       ┃ persia-format                                    ┃       ║░
║       ┃ encodings, checksums, codecs                     ┃       ║░
║       ┃ done                                             ┃       ║░
║       ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛       ║░
╚══════════════════════════════════════════════════════════════════╝░
 ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
Layers from SPEC §3. Status from the 2026-11-05 PROGRESS.md snapshot. Format, local storage, schema, and text analysis are done (M1–M4). persia-engine implements collection schema, documents, and manifests (M3 done, 15/15) and a segment builder, writer, and reader (M5 done, 48/48). Its write path is in progress (M6, 49/58): a memtable, a WAL with chunks, group commit, and replay, flush, commit, snapshots, auto-commit, and open checks, deletes and upserts across segments with tombstone sidecars, and segment merging (a merge policy, a segment merger, a background scheduler, and deletion of obsolete objects). Its query path is in progress (M7, 46/51): a query AST, user-text compiler, filter DSL, and query limits, collection statistics (document count, document frequency, average field length), BM25F scoring with static rank and score bounds, matching and score top-k over one view, and a collection search with sorts, pages, facets, and stored fields (CollectionViews::search). Relaxation has not been started (M8). A collection snapshot can be searched as library code. There is no search call on the database handle. The blob store is not started (M9; its dependencies are done). The embedded API has not been started (M10), and the persia crate exports no Db or Collection. The server is not started (M11). Network SDKs are not started (M14). S3, GCS, and Azure are not started (M12). Arrows point down: each layer is used by the one above it.

Getting startedRead the guideFeaturesHow it worksRoadmapGitHub

Nothing here is ready to run. Leave an email if you want a note when that changes. What the form stores is described on the waitlist page.

The waitlist is not open yet. The public key or the relay URL is not configured.

Property What it means Status
Zero friction Db::open("app.persia") just works. No daemon and no config file for the embedded library. Planned (M10)
Own engine Index format, analysis, BM25F scoring, and query execution are written in this repository. Format codecs, text analysis, and a segment writer and reader exist. The write path is in progress (M6, 49/58): WAL, commit, and segment merging. BM25F scoring and a collection search are in the tree (CollectionViews::search). There is no search call on the database handle.
Never zero results A query that matches nothing is relaxed step by step, and the response says what changed. Not started (M8). How the cascade is designed.
Cloud-native Immutable segments. The same bytes locally and in object storage. Stateless query nodes. Segment bytes can be written (M5 done, 48/48). The write path is in progress (M6, 49/58): WAL, commit, and segment merging. Object storage has not been started (M12). Query nodes have not been started (M13).
Correctness, then speed Checksums, crash-safe commits, and fuzzed parsers come before performance claims. Checksums, fuzzed parsers, the container commit, and segment read/write exist. The write path is in progress (M6, 49/58): WAL, commit, and segment merging. A collection snapshot can be searched as library code. There is no search call on the database handle.

The design contract is SPEC.md (draft v0.1). When this site and the SPEC disagree, the SPEC wins.

  • Getting started separates the codecs you can call from the database API, which is still illustrative.
  • What is an embedded search database? explains in-process, single-file full-text search, and which parts of that design exist in the repository.
  • Typo-tolerant search explains query relaxation, fuzzy matching, BM25F, and filters: what is designed, and what the engine implements.
  • Comparison places the design next to SQLite FTS5, Tantivy, and Meilisearch. Persia DB has no persia::Db search API yet (M10); the engine library code can search.
  • Guide overview is the full narrative, split from the repository guide.
  • For AI agents is the short list of constraints. llms.txt indexes the pages.
  • About covers license, conduct, and how to contribute.