← На главную

Syncular синхронизирует SQL офлайн через локальный SQLite

02.08.2026 09:48 · hackernews

Syncular — сервер-авторитарная офлайн-первая SQL-синхронизация, которую можно поднять самостоятельно. Клиенты держат настоящую локальную SQLite: в браузере через OPFS, на других платформах — нативную. Записи идут через оптимистичный outbox, а единый упорядоченный commit log на сервере остаётся источником истины. Проект стартует командой bun create syncular-app my-app.

Разработка построена spec-first. Файл SPEC.md — нормативный, а spec/vectors — золотые фикстуры. Если спецификация и код расходятся, правят код, а не спек. Два ядра, TypeScript и Rust, держат в синхроне с помощью implementation-agnostic conformance-сьюта.

Тестовая доктрина такая: интеграционные сценарии гоняют через loopback in-memory transport, на интерфейсе транспорта включают fault injection, тесты ждут явных сигналов готовности, а sleep в тестах запрещены. Real-socket тестов мало, и они вынесены в карантин. Основной путь один: браузер сохраняет данные в OPFS, неподдерживаемые окружения возвращают ошибку, синхронизация идёт по WebSocket.

В монорепе: packages/core — кодексы протокола, общие типы, vector round-trip. packages/serverhandleSyncRequest(bytes, ctx) и интерфейсы storage/auth для SQLite, Postgres и D1. Поверх него — packages/server-hono и packages/server-workers для Hono и Cloudflare Workers. Веб-клиент — @syncular/client на @sqlite.org/sqlite-wasm, для React есть packages/react. packages/typegen генерирует TypeScript из схемы и умеет именованные запросы без cargo. packages/crypto и packages/crdt-yjs дают по-колоночную E2EE и объединение CRDT через Yjs. packages/testing — это @syncular/testkit: in-memory loopback реального сервера и клиентов. packages/conformance — раннер сценариев, которые обязаны проходить оба ядра. В rust/ лежит Rust-клиент и его C-ABI FFI, а в bindings/ — обвязки для Tauri, React Native, Swift, Kotlin и Flutter. Документация — на syncular.dev.

Для локальной разработки: bun install, затем bun run check — typecheck, lint и тесты. Сначала нужно прочитать AGENTS.md. Доктрина оттуда — spec-first, никаких fallback, никаких таймеров в тестах, cross-core parity — обязательна и для людей, и для машинных контрибьюторов. LLM приветствуются для тестов, воспроизведений, бенчмарков, доков и продакшен-кода, но каждую строку надо понять и быть готовым защищать; продакшен-код ревьюят строже всего. В собственной разработке Syncular LLM используют в основном для тестов и итераций по техническим концепциям, с тем же уровнем ревью. Низкокачественные автоматические PR, issues и комментарии закрывают молча. Полная политика и plain-text docs bundle для агентов — на syncular.dev/llms.

Читать оригинал →