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

main
Branches
Tags
Go to file
Code
Open more actions menu
Folders and files
Name
Name
Last commit message
Last commit date
Latest commit
History
1,231 Commits
1,231 Commits
.githooks
.githooks
.github
.github
apps
apps
bench
bench
bindings
bindings
docs
docs
editors/
vscode-syql
editors/
vscode-syql
examples/
quickstart
examples/
quickstart
load
load
logo
logo
packages
packages
rust
rust
scripts
scripts
spec
spec
.gitattributes
.gitattributes
.gitignore
.gitignore
.oxfmtrc.json
.oxfmtrc.json
.oxlintrc.json
.oxlintrc.json
AGENTS.md
AGENTS.md
LICENSE
LICENSE
README.md
README.md
bun.lock
bun.lock
bunfig.toml
bunfig.toml
deny.toml
deny.toml
knip.json
knip.json
package.json
package.json
tsconfig.build.base.json
tsconfig.build.base.json
tsconfig.json
tsconfig.json
View all files
Repository files navigation
README
Apache-2.0 license
More
items
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.
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
.
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
)
Commands
bun install
bun run check
#
typecheck + lint + test
Contributing
Read
AGENTS.md
first. The doctrine in it (spec-first, no
fallbacks, no timers in tests, cross-core parity) applies to human and
machine contributors alike.
On AI assistance: LLMs are welcome for tests, reproductions, benchmarks,
docs, and production code. Review, understand, and iterate on everything you
submit, and be ready to defend every line; production code gets the
strictest review. In syncular’s own development, LLM assistance is used
mainly for writing tests and iterating over technical concepts, under that
same review bar.
Low-effort machine-generated PRs, issues, and comments are closed without
comment. The full policy and the plain-text docs bundle for agents live at
syncular.dev/llms
.
About
Offline-first SQL sync with Typescript and Rust cores
syncular.dev
Topics
bun
kysely
local-first
offline-first
postgres
react
real-time
sqlite
sync
typescript
Resources
Readme
Apache-2.0 license
Activity
Custom properties
Stars
11
stars
Watchers
0
watching
Forks
0
forks
Report repository
Releases
Packages
Contributors
Languages