Yet Another Sync Engine?
During Covid, it seemed like everyone and their brother was building “yet another JavaScript framework”.
Today, in the year of our Lord 2026, the trend is sync engines.
Sync used to be something only specialized apps cared about — Slack, Linear, Figma, the kinds of tools where real-time collaboration was the whole point. Then AI changed everything. Suddenly every app needs to be reactive, collaborative, and support a multiplayer (or multi-agent) experience.
And serious players have emerged to meet the demand: Convex, Zero, ElectricSQL, and even TanStack.
But in this rush to help every app become “AI-native”, all of these solutions keep kicking the can on the one feature I want: offline writes.
“When are you ever really without internet?” and “LLMs require cloud inference anyway” have become convenient excuses to avoid facing conflicts and eventual consistency head-on.
And the projects that do care about offline? They often lack the online primitives — presence, permissions, server-side actions — you need to build a real multiplayer app.
A year ago, I wanted to build a custom writing app to replace my Obsidian workflow. I wanted to keep the speed and security of writing local markdown files, but also add workspaces, collaborative editing, and public share link support.
I traveled across the local-first landscape and found nothing that fit perfectly, but picked up some ideas that let me start hacking together my own solution.
Months in, I was drowning in glue code and hadn’t shipped a single feature. But I’d learned what the glue needed to do: event sourcing like Livestore, an outbox like Powersync, hybrid-logical clocks like CockroachDB, group-based partitioning like Jazz, CDN-capable catch-up and SSE live subscriptions like ElectricSQL, conflict surfacing like CouchDB, and a simple, cohesive developer experience that hides the magic like Convex.
That proof of concept became the basis for Ebb.
So that’s why I’m building yet another sync engine — to package the primitives necessary to enable the next generation of developers to build apps that are collaborative without compromise.
This devlog is where I’ll share what I learn — the architecture decisions, the tradeoffs, the rabbit holes. If you’re interested in local-first, sync engines, or just watching someone wrestle with distributed systems in public, follow along.
Stay in sync
Subscribe to get future devlog posts delivered straight to your inbox.
Check your email to confirm your subscription.