Syncular 0.5.0 – オフラインファースト SQL 同期 TypeScript と Rust コア

Overview

Syncular 0.5.0 は、各クライアントが実際のローカル SQLite データベースを維持し、書き込みがサーバーオーソリティティブなコミットログによって検証および順序付けされる前に楽観的アウトボックスを通じて永続化される、オフラインファースト SQL 同期を提供します。

このプロジェクトはセルフホスト型で、プレ‑1.0 であり、マネージドサービスまたはピアツーピアモードは提供していません。ネイティブパッケージングの成熟度はエコシステムによって異なります。

Architecture

クライアントは本物の SQLite データベースにデータを保存します:ブラウザでは Origin Private File System (OPFS) によってバックアップされた sqlite‑wasm、それ以外ではネイティブ SQLite。すべての書き込みはローカルに適用され、同時に同じトランザクション内の耐久性のあるアウトボックスに記録されます。サーバーは単一の順序付けられたコミットログを維持し、これが真実のソースとなり、受信変更を検証し、アプリケーションバックエンドで定義された明示的なスコープを使用して解決します。

Protocol and Spec‑first Approach

Syncular のプロトコルは SPEC.md で実装とは独立して指定されており、spec/vectors/ のゴールデンバイトベクターが正準参照として機能します。仕様とコードが乖離した場合、コードは仕様に合わせて調整されます。プロトコルドラフトは SSP2 と名付けられ、正準バイナリエンコーディングを含みます。

実装に依存しない適合性スイートによって 95 のシナリオを両方の実装に対して実行し、TypeScript で書かれたコアと Rust で書かれたコアをロックステップで保つ二つの独立したコアがあります。

Client Cores and Bindings

TypeScript コアはウェブクライアント (@syncular/client) を駆動し、@sqlite.org/sqlite-wasm 上で実行されます。Rust コアは Swift、Kotlin、Flutter、React Native、Tauri、プレーン Rust、および小さな C API の言語バインディングを通じて公開されます。

これらのバインディングにより、開発者は同じ同期ロジックを共有しながらネイティブモバイルおよびデスクトップアプリケーションに Syncular を統合できます。

Key Features

  • WebSocket を介したリアルタイム同期と、効率的な初期同期のための再開可能なブートストラップセグメント。
  • アプリケーションが分岐した変更を理解し解決するのに役立つ、明示的な競合証拠の記録。
  • 認証の取り消しとローカルパージにより、ユーザーの権限を削除し、クライアントからそのデータを削除できます。
  • ウィンドウレプリカにより、クライアントは定義された範囲に基づいてデータのサブセットのみを同期できます。
  • バイナリラージオブジェクト(blob)は通常の SQL データとともにサポートされます。
  • オプションの CRDT カラムは、packages/crdt-yjs ディレクトリにある Yjs ベースのマージャーによってバックアップされます。
  • 列ごとの暗号化により、選択されたフィールドに対してエンドツーエンドの機密性が提供されます。
  • typegen パッケージを介して、共有中間表現からスキーム認識ヘルパーを出力することで、5 つの言語に対してタイプセーフなクエリ生成が提供されます。

Development Practices

Syncular は spec‑first メソドロジーに従います:仕様が正しさの仲裁者です。テストドクトリンは、インテグレーションテストのためのループバックインメモリトランスポート、トランスポートレイヤーでのフォールトインジェクション、および明示的な準備完了シグナルを義務付けます(テストでのスリープは禁止)。実際のソケットテストは制限され、隔離されています。

リポジトリは「一つの良いパス」を奨励します:ブラウザは OPFS に永続化し、サポートされていない環境をエラーとして報告し、同期は WebSocket を介して行われます。

AI アシスタンスについては、プロジェクトの貢献ガイドラインでは、大規模言語モデルはテスト、再現、ベンチマーク、ドキュメント、および本番コードの作成に歓迎されますが、各行はレビューされ、理解され、防御できる状態である必要があります。低労力の機械生成貢献はコメントなしで閉じられます。

Deployment and Limitations

最新リリース(v0.5.0、2026年7月14日)時点では、Syncular はプレ‑1.0 のままです。セルフホスト型デプロイメントのみを対象として設計されており、ホスト型サービスまたはピアツーピアモードは提供されていません。README では、ネイティブパッケージングの成熟度がエコシステムによってまだ異なることを指摘しており、つまり一部の言語バインディングは他のものより成熟している可能性があります。

Community Questions and Author Responses

  • CRDT handling in SQL: 作者は、Syncular が Yjs マージャーを介して実装されたオプションの CRDT カラムを提供し、アプリケーションが特定のフィールドに対して競合フリーのレプリケートデータ型をオプトインできる一方で、データモデルの残りは関係的であることを指摘しています。
  • Conflict resolution: 自動的な競合解決アルゴリズムではなく、Syncular は明示的な競合証拠を記録し、解決ポリシーをアプリケーション開発者に委ねます。
  • Comparison to PowerSync: 作者は直接的な比較を提供しておらず、プロジェクトのドキュメントでは PowerSync は言及されていません。
  • Browser storage eviction: 作者は、保留中の書き込みが OPFS‑バックアップされた SQLite データベースに残っていることを確認しましたが、ライブラリが永続ストレージを要求するか、アウトボックスの可能な eviction についてユーザーに警告するかは指定していません。
  • Use of LLMs: 作者は、Syncular の開発中に LLM の支援は主にテストの作成と技術コンセプトの反復に使用され、すべての貢献に適用される同じ厳格なレビューバーの下で行われたと述べています。

これらのポイントは、リポジトリの README、リリースノート、および Hacker News 投稿での作者のコメントから直接引用されています。

Conclusion

Syncular 0.5.0 は、仕様駆動のオフラインファースト SQL 同期ソリューションを提供し、デュアル TypeScript と Rust ランタイム、耐久性のあるアウトボックスモデル、暗号化された列からオプションの CRDT サポートまでの機能スイートを備えています。これは、マネージドサービスに依存せずにセルフホスト型でリアルタイム機能を備えた同期が必要な開発者を対象としています。

Sources