Multi-server. Multi-writer. Multi-runtime. Zero data loss.
No consensus. No Raft. No coordinator. Just triggers, ACK, and UUID.
Three primitives: triggers, ACK, and UUID. No consensus algorithm. No Raft. No coordinator.
SQLite simplicity + multi-writer replication + cross-runtime interop, without consensus overhead.
All nodes accept writes independently. UUID PKs = zero conflict, no coordinator, no CRDT.
Go, Bun, Node, and any language with SQLite + HTTP. Same wire protocol. Mix and match freely.
Sync runs in background. Write speed identical with or without peers. 0% overhead.
Changes survive in SQLite _changes table. Resume on restart. Zero data loss, verified.
Last-write-wins by timestamp. Both nodes always converge. Clock skew detected via health endpoint. 36/36 tests pass.
Health endpoint reports max clock skew. Alert when nodes drift — NTP required, same as Cassandra.
Point-to-point, full mesh, dedicated hub, multi-region. All built and benchmarked.
hook-sync fills a gap no other project covers: SQLite simplicity + multi-writer + cross-runtime.
| Postgres | Litestream | rqlite | hook-sync | |
|---|---|---|---|---|
| Multi-writer | ✗ Primary-only | ✗ Read-only | ✗ Leader-only | ✓ All nodes write |
| Write penalty | ✗ WAL overhead | ✓ Async | ✗ Raft quorum | ✓ 0% overhead |
| Cross-runtime | ✗ C only | ✗ Go only | ✗ Go only | ✓ Go · Bun · Node · any |
| Split-brain safe | ✓ Sync repl | ✗ | ✓ Raft | ✓ Timestamp LWW |
| Crash recovery | ✓ WAL replay | ✓ S3 restore | ✓ Raft log | ✓ _changes replay |
| Batch 10K QPS | 8,278 | N/A | N/A | 31,558 |
Each runtime is self-contained. All sync to each other — same wire protocol, same ACK-based reliability.
Importable packages. Trigger + hook capture modes. Pre-built binaries. Cross-runtime.
hooksync.js + bun:sqlite. Trigger-based capture. Bun.serve() wiring.
hooksync.js + better-sqlite3. Trigger-based capture. http.createServer or Express.
Rust, Python, PHP, or any language with SQLite + HTTP. Wire protocol is language-agnostic.
From 2 nodes to multi-region. All built, verified, and benchmarked.
2 nodes, active-active. Simplest setup — one --peer flag each.
3-7 nodes, all-to-all. Per-peer watermarks, no coordinator.
8+ nodes. Go-only relay with Pebble KV. Durable forwarding queue.
Hub-to-hub cross-region. Loop prevention via X-Node-Url header.
Get up and running in 5 minutes. Go, Bun, Node, or any language with SQLite + HTTP.
Quick Start →