What you can build with Sirannon
SQLite already sits inside your process; Sirannon gives it the parts a service needs. These are the five jobs it's built for, each linked to the guide showing the code.
One API across every JavaScript runtime
Sirannon separates the database engine from the library, so you choose a driver and keep the same query API. Run better-sqlite3 or Node's built-in SQLite on the server, wa-sqlite with IndexedDB in the browser, bun:sqlite on Bun, and expo-sqlite on React Native, all through one interface.
Read the getting started guideTransactions and concurrent reads
Wrap several statements in a transaction and they commit together or roll back together, with full ACID guarantees. Every database opens one dedicated write connection and a pool of readers, four by default, and WAL mode lets those reads run while a write is in progress, so a busy write path never blocks your queries.
Read the queries and transactions guide| idint8 | holder text | balance int8 |
|---|---|---|
| 1 | Emma Wright | 4,000 |
| 2 | Kenji Tanaka | 3,000 |
| 3 | Sofia Rossi | 8,500 |
Bulk writes for imports and backfills
Run one statement over many parameter sets as an atomic batch, or import a large dataset with bulkLoad, which runs the whole load in one transaction under relaxed durability and restores your configured level when it finishes. A big import then pays one durability barrier instead of one per row, and both paths run in process or over the server on HTTP and WebSocket.
Read the bulk load guidedurability off during load, restored to normal
Real-time features on plain SQLite
Change data capture tracks inserts, updates, and deletes through triggers as they commit, and clients subscribe to table changes over WebSocket. Activity feeds, live dashboards, and cache invalidation come from the database itself instead of a separate message bus.
Read the change data capture guideOne database per tenant
SQLite makes a database per customer cheap, and Sirannon makes it manageable. Instance lifecycle management provisions databases on demand, enforces idle timeouts, and evicts by least recent use, so the pool stays bounded as tenants accumulate.
Read the lifecycle guidebrightwood-legal
data/brightwood-legal.db
patel-associates
data/patel-associates.db
volta-tours
data/volta-tours.db
Read scaling with proven failover
One primary accepts writes and replicates HLC-stamped change batches to read replicas over gRPC. Coordinator mode adds etcd-backed authority with primary terms, in-sync sets, and majority write concern, and it fails closed for writes when it can't prove a safe primary.
Read the replication guidenode-a
accepts writes
node-b
read replica
node-c
read replica
A database your clients reach over the network
The bundled server exposes every database over HTTP and WebSocket with authentication hooks, and the client SDK mirrors the core API with automatic reconnection and subscription restore. Browser apps, serverless functions, and other services query SQLite like any networked database.
Read the client SDK guideMigrations, backups, and hardening
Versioned migrations run up and down from SQL files, scheduled snapshot backups rotate automatically, and the core enforces parameterised queries, identifier validation, and path traversal prevention.
Read the migrations guideTry Sirannon on your own data
The documentation covers everything above in depth, starting with the getting started guide.