Live data from Hacker News

Show HN: SyncKit – Offline-first sync engine (Rust/WASM and TypeScript)

github.com

31–40 of 41 posts

Re: Show HN: SyncKit – Offline-first sync engine (Rust/WASM and TypeScript)

#32

Hey HN, I built SyncKit after shipping two local-first projects (RestBolt and Graft) and realizing there's no simple way to add cross-device sync. The problem: Existing solutions are either too complex (Automerge/Yjs require learning CRDTs) or too restrictive (Firebase isn't truly local-first, Supabase has no offline support - issue #357 has been open 4+ years with 350+ upvotes). SyncKit is the middle ground: simple…

> Automerge/Yjs require learning CRDTs

I've been using Automerge for a while and haven't had to look at any CRDTs. To me this looks very similar to Automerge.

Neat project!

Re: Show HN: SyncKit – Offline-first sync engine (Rust/WASM and TypeScript)

#35
post #30

I want to create a local first, offline/p2p realtime multiplayer prototype app soon with reactive/signal data model and frontend agnostic design (considering solidjs/svelte). I'm on a tech research stage. How does it compare to rxdb, tinybase and zero sync? For reference right now I'm considering tinydb/rxdb.

For P2P multiplayer with Svelte/SolidJS, SyncKit might not be your best fit because:

- It's client-server (not P2P)

- No Svelte adapters yet (coming in v0.2.0)

- Multiplayer games usually need P2P for lower latency

Better options for your use case:

- Jazz (jazz.tools) - Purpose-built for P2P collaborative apps

- TinyBase - Perfect signal model for Svelte/Solid, but you'd add your own sync

- Yjs - Mature CRDT with good P2P support

- RxDB - Heavier but has everything (queries, reactive, plugins)

If you went client-server instead of P2P, SyncKit would work once v0.2.0 adds Svelte support.

What's your preference? P2P or client-server? That'll determine the best fit.

Re: Show HN: SyncKit – Offline-first sync engine (Rust/WASM and TypeScript)

#36

This would make a great backbone for a Obsidian Sync plugin.

That's actually a really cool idea! Notes are just documents, so the sync model would work well. Hadn't thought about Obsidian specifically but I like it.

Re: Show HN: SyncKit – Offline-first sync engine (Rust/WASM and TypeScript)

#37
post #29

I think I know what this is, but the description is so much in its own context I'm not sure . It's for web-apps that also want an offline local version that works and deals with syncing the data when online again and either local or remote is updated? It probably markets and explains itself perfectly find for someone in that space and/or looking for this solution, so I'm not sure that's actually a problem, but if you…

That's a fair point. The description does assume some familiarity with local-first patterns. I'll think about how to make the "why you'd want this" clearer for people outside that space. I appreciate the honest feedback

Re: Show HN: SyncKit – Offline-first sync engine (Rust/WASM and TypeScript)

#38
Interesting/impressive project, and would be doubly interested in the workflow used to develop it. Could stand to have more human-voiced docs though. Aside from all the usual reasons I'd avoid using a Also maybe bias, but there are still ennough obvious agent artifacts/byproducts in the code base that it makes me doubt that the details were thoroughly attended to, and that's where the devils are.

Re: Show HN: SyncKit – Offline-first sync engine (Rust/WASM and TypeScript)

#39
post #30

I want to create a local first, offline/p2p realtime multiplayer prototype app soon with reactive/signal data model and frontend agnostic design (considering solidjs/svelte). I'm on a tech research stage. How does it compare to rxdb, tinybase and zero sync? For reference right now I'm considering tinydb/rxdb.

For P2P multiplayer with Svelte/SolidJS, SyncKit might not be your best fit because: - It's client-server (not P2P) - No Svelte adapters yet (coming in v0.2.0) - Multiplayer games usually need P2P for lower latency Better options for your use case: - Jazz (jazz.tools) - Purpose-built for P2P collaborative apps - TinyBase - Perfect signal model for Svelte/Solid, but you'd add your own sync - Yjs - Mature CRDT with goo…

Currently I am leaning more into P2P for the zero-effort user side setup, although I was considering if hybrid P2P/client-server approach is feasible: free lite P2P vs paid, managed SaaS for user convenience and improved performance.

Re: Show HN: SyncKit – Offline-first sync engine (Rust/WASM and TypeScript)

#40

Earlier quoted context omitted.

I use Loro CRDT, which is written in Rust as well, on my Dart apps with flutter_rust_bridge and it works pretty well. For syncing I'm using their Loro protocol product although I used iroh before. However, the annoying thing about how the CRDT libraries work is that they're essentially key value NoSQL type storage, not relational. I would love something like SQLite or Postgres on both the server and client that can s…

You've hit on the core limitation because SyncKit has the same issue. Document/key-value like Loro and Yjs. The relational model problem is fundamental to CRDTs. They guarantee conflict-free convergence because documents are independent, but that breaks with foreign keys and joins. Can't have arbitrary SQL queries and guaranteed convergence without coordination. ElectricSQL and PowerSync solve it differently (full SQ…

Yeah I'm essentially writing my own ORM with functions like getFoo which queries the exact substructure of the CRDT to find the info I need. Apparently Postgres is getting a CRDT extension though but we'll see how it goes, typically it's not that fast.
Post reply on HN