Skip to content
Tech News
← Back to articles

Show HN: Syncular – offline-first SQL sync with TypeScript and Rust cores

read original more articles
Why This Matters

Syncular introduces an offline-first, server-authoritative SQL synchronization solution leveraging TypeScript and Rust cores, enabling seamless data consistency for clients with local SQLite databases. Its design ensures robust, real-time synchronization even in disconnected environments, making it highly relevant for modern web and mobile applications that demand offline capabilities and data integrity. This innovation can significantly enhance user experience and data reliability across the tech industry.

Key Takeaways

syncular

Server-authoritative, offline-first SQL sync you can operate. Clients keep a real local SQLite database (OPFS in the browser, native SQLite elsewhere), writes go through an optimistic outbox, and one ordered commit log on the server stays the source of truth.

Documentation · Quickstart · Live demos · Benchmarks · Blog

bun create syncular-app my-app

How the repo is built

Spec-first : SPEC.md is normative and spec/vectors/ are golden fixtures; when spec and code disagree, the code changes. Two cores (TypeScript and Rust) are kept in lockstep by an implementation-agnostic conformance suite.

: is normative and are golden fixtures; when spec and code disagree, the code changes. Two cores (TypeScript and Rust) are kept in lockstep by an implementation-agnostic conformance suite. Test doctrine : loopback in-memory transport for integration scenarios; fault injection at the transport interface; tests wait on explicit readiness signals (sleeps are banned); real-socket tests few and quarantined. See packages/conformance .

: loopback in-memory transport for integration scenarios; fault injection at the transport interface; tests wait on explicit readiness signals (sleeps are banned); real-socket tests few and quarantined. See . One good path: the browser persists to OPFS and reports unsupported environments as errors; sync runs over the WebSocket.

Layout

Path What it is packages/core Protocol codecs, shared types, vector round-trip packages/server handleSyncRequest(bytes, ctx) + storage/auth interfaces (SQLite, Postgres, D1) packages/server-hono , packages/server-workers Framework bindings (Hono, Cloudflare Workers) packages/web-client @syncular/client : TS client core on @sqlite.org/sqlite-wasm packages/react React hooks over the client packages/typegen Schema IR + TypeScript emitter, named queries (cargo-free) packages/crypto , packages/crdt-yjs Per-column E2EE primitives, Yjs CRDT mergers packages/testing @syncular/testkit : in-memory loopback of real server + clients packages/conformance Scenario runner both cores must pass rust/ The Rust client core and its C-ABI FFI crate bindings/ Tauri, React Native, Swift, Kotlin, Flutter apps/docs The docs site (syncular.dev)

... continue reading