<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: ochiba</title><link>https://news.ycombinator.com/user?id=ochiba</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Mon, 08 Jun 2026 16:45:49 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=ochiba" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by ochiba in "Offline-First Landscape – 2025"]]></title><description><![CDATA[
<p>PowerSync supports OPFS as SQLite VFS since earlier 2025: <a href="https://github.com/powersync-ja/powersync-js/pull/418" rel="nofollow">https://github.com/powersync-ja/powersync-js/pull/418</a></p>
]]></description><pubDate>Fri, 29 Aug 2025 20:36:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=45069099</link><dc:creator>ochiba</dc:creator><comments>https://news.ycombinator.com/item?id=45069099</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45069099</guid></item><item><title><![CDATA[New comment by ochiba in "Lessons learned from building a sync-engine and reactivity system with SQLite"]]></title><description><![CDATA[
<p>This is great to see and I like the simplicity of the approach.
You can also look at PowerSync (which I work on). It's in a similar space as ElectricSQL. It syncs to SQLite on the client-side and provides built-in reactivity. On the web, it uses wa-sqlite with either OPFS or IndexedDB. It also takes care of things like multi-tab on web, and queueing and uploading client-side mutations to the backend.</p>
]]></description><pubDate>Mon, 18 Aug 2025 23:19:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=44946384</link><dc:creator>ochiba</dc:creator><comments>https://news.ycombinator.com/item?id=44946384</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44946384</guid></item><item><title><![CDATA[New comment by ochiba in "Local-first software (2019)"]]></title><description><![CDATA[
<p>This site also has a directory of devtools: <a href="https://lofi.so/" rel="nofollow">https://lofi.so/</a></p>
]]></description><pubDate>Sat, 05 Jul 2025 17:17:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=44474114</link><dc:creator>ochiba</dc:creator><comments>https://news.ycombinator.com/item?id=44474114</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44474114</guid></item><item><title><![CDATA[New comment by ochiba in "Reverse engineering of Linear's sync engine"]]></title><description><![CDATA[
<p>You can look at PowerSync: <a href="https://www.powersync.com/" rel="nofollow">https://www.powersync.com/</a></p>
]]></description><pubDate>Sat, 31 May 2025 18:52:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=44146247</link><dc:creator>ochiba</dc:creator><comments>https://news.ycombinator.com/item?id=44146247</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44146247</guid></item><item><title><![CDATA[New comment by ochiba in "Reverse engineering of Linear's sync engine"]]></title><description><![CDATA[
<p>Realm's sync functionality (Atlas Device Sync) has been deprecated by MongoDB: <a href="https://www.mongodb.com/docs/atlas/app-services/sync/device-sync-deprecation/" rel="nofollow">https://www.mongodb.com/docs/atlas/app-services/sync/device-...</a></p>
]]></description><pubDate>Sat, 31 May 2025 10:41:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=44143348</link><dc:creator>ochiba</dc:creator><comments>https://news.ycombinator.com/item?id=44143348</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44143348</guid></item><item><title><![CDATA[New comment by ochiba in "LiveStore: State management based on reactive SQLite and built-in sync engine"]]></title><description><![CDATA[
<p>I really enjoyed the talk at Local-First Conf today — well done. I thought it was very well explained and made compelling arguments for the event-sourcing materialized into SQLite architecture.<p>Thank you for championing SQLite and especially OPFS Wasm SQLite on the web — we (PowerSync) are clearly also big proponents of it, so love to see other projects having success with it too.</p>
]]></description><pubDate>Tue, 27 May 2025 20:38:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=44110478</link><dc:creator>ochiba</dc:creator><comments>https://news.ycombinator.com/item?id=44110478</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44110478</guid></item><item><title><![CDATA[Escaping the Network Tarpit]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.powersync.com/blog/escaping-the-network-tarpit">https://www.powersync.com/blog/escaping-the-network-tarpit</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=43895974">https://news.ycombinator.com/item?id=43895974</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Mon, 05 May 2025 15:13:55 +0000</pubDate><link>https://www.powersync.com/blog/escaping-the-network-tarpit</link><dc:creator>ochiba</dc:creator><comments>https://news.ycombinator.com/item?id=43895974</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43895974</guid></item><item><title><![CDATA[New comment by ochiba in "Turso SQLite Offline Sync Public Beta"]]></title><description><![CDATA[
<p>I am not sure about Turso but I've seen a few different approaches to this with other sync engine architectures:<p>1. At a database level: Using something like RLS in Postgres<p>2. At a backend level: The sync engine processes write operations via the backend API, where custom validation and authorization logic can be applied.<p>3. At a sync engine level: If the sync engine processes the write operations, there can be some kind of authorization layer similar to RLS enforced by the sync engine on the backend.</p>
]]></description><pubDate>Mon, 31 Mar 2025 20:19:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=43539446</link><dc:creator>ochiba</dc:creator><comments>https://news.ycombinator.com/item?id=43539446</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43539446</guid></item><item><title><![CDATA[New comment by ochiba in "Turso SQLite Offline Sync Public Beta"]]></title><description><![CDATA[
<p>It's definitely quite a hard engineering problem to solve, if you try to cover a wide range of use cases, and layer on top of that things like permissions/authorization and scalability</p>
]]></description><pubDate>Mon, 31 Mar 2025 20:15:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=43539403</link><dc:creator>ochiba</dc:creator><comments>https://news.ycombinator.com/item?id=43539403</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43539403</guid></item><item><title><![CDATA[New comment by ochiba in "Turso SQLite Offline Sync Public Beta"]]></title><description><![CDATA[
<p>There are niche use cases where the former (work for days to weeks offline) are useful and even critical - like certain field service use cases. Surviving glitches in network connectivity is useful for mainstream/consumer applications for users in general, especially those on mobile.<p>In my experience, it can affect the architecture and performance in a significant way. If a client can go offline for an arbitrary period of time, doing a delta sync when they come back online is more tricky, since we need to sync a specific range of operation history (and this needs to be adjusted for specific scope/permissions that the client has access to). If you scale up a system to thousands or millions of clients, having them all do arbitrary range queries doesn't scale well. For this reason I've seen sync engines simply force a client to do a complete re-sync if it "falls behind" with deltas for too long (e.g. more than a day or so.) Maintaining an operation log that is set up and indexed for querying arbitrary ranges of operations (for a specific scope of data) works well.</p>
]]></description><pubDate>Mon, 31 Mar 2025 20:11:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=43539338</link><dc:creator>ochiba</dc:creator><comments>https://news.ycombinator.com/item?id=43539338</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43539338</guid></item><item><title><![CDATA[New comment by ochiba in "Turso SQLite Offline Sync Public Beta"]]></title><description><![CDATA[
<p>Yes, exactly. <a href="https://www.gabrielgambetta.com/client-side-prediction-server-reconciliation.html" rel="nofollow">https://www.gabrielgambetta.com/client-side-prediction-serve...</a></p>
]]></description><pubDate>Mon, 31 Mar 2025 20:07:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=43539304</link><dc:creator>ochiba</dc:creator><comments>https://news.ycombinator.com/item?id=43539304</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43539304</guid></item><item><title><![CDATA[New comment by ochiba in "Turso SQLite Offline Sync Public Beta"]]></title><description><![CDATA[
<p>I would say this is why server-authoritative systems that allow for custom logic in the backend for conflict resolution work well in practice (like Replicache, PowerSync and Zero - custom mutators coming in beta for the latter). Predefined deterministic distributed conflict resolution such as CRDT data structures work well for certain use cases like text editing, but many other use cases require deeper customizability based on various factors like you said.</p>
]]></description><pubDate>Mon, 31 Mar 2025 20:00:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=43539211</link><dc:creator>ochiba</dc:creator><comments>https://news.ycombinator.com/item?id=43539211</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43539211</guid></item><item><title><![CDATA[New comment by ochiba in "Sync Engines Are the Future"]]></title><description><![CDATA[
<p>Useful directory of tools here: <a href="https://localfirstweb.dev/" rel="nofollow">https://localfirstweb.dev/</a></p>
]]></description><pubDate>Fri, 21 Mar 2025 18:35:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=43439430</link><dc:creator>ochiba</dc:creator><comments>https://news.ycombinator.com/item?id=43439430</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43439430</guid></item><item><title><![CDATA[New comment by ochiba in "Sync Engines Are the Future"]]></title><description><![CDATA[
<p>> Yes, they are fascinating and yes they solve real problems but they are absolute overkill to your problems (except collab editing), at least currently. Why? Because they are all about conflict resolution. You can get very far without addressing this problem: for instance a cache, like you mentioned, has no need for conflict resolution. The main data store owns the data, and the cache follows. If you can have single ownership, (single writer) or last write wins, or similar, you can drop a massive pile of complexity on the floor and not worry about it. (In the rare cases it’s necessary like Google Docs or Figma I would be very surprised if they use off-the-shelf CRDT libs – I would bet they have an extremely bespoke and domain-specific data structures that are inspired by CRDTs.)<p>I agree with this. CRDTs are cool tech but I think in practice most folks would be surprised by the high percentage of use cases that can be solved with much simpler conflict resolution mechanism (and perhaps combined with server reconciliation as Matt mentioned). I also agree that collaborative document editing is a niche where CRDTs are indeed very useful.</p>
]]></description><pubDate>Fri, 21 Mar 2025 18:09:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=43439128</link><dc:creator>ochiba</dc:creator><comments>https://news.ycombinator.com/item?id=43439128</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43439128</guid></item><item><title><![CDATA[New comment by ochiba in "Sync Engines Are the Future"]]></title><description><![CDATA[
<p>> And 'synchronisation' as a practice gets very little attention or discussion. People just start with naive approaches like 'download whats marked as changed' and then get stuck in the quagmire of known problems and known edge cases (handling deletions, handling transport errors, handling changes that didn't get marked with a timestamp, how to repair after a bad sync, dealing with conflicting updates etc).<p>I've spent 16 years working on a sync engine and have worked with hundreds of enterprises on sync use cases during this time. I've seen countless cases of developers underestimating the complexity of sync. In most cases it happens exactly as you said: start with a naive approach and then the fractal complexity spiral starts. Even if the team is able to do the initial implementation, maintaining it usually turns into a burden that they eventually find too big to bear.</p>
]]></description><pubDate>Fri, 21 Mar 2025 18:06:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=43439092</link><dc:creator>ochiba</dc:creator><comments>https://news.ycombinator.com/item?id=43439092</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43439092</guid></item><item><title><![CDATA[New comment by ochiba in "Sync Engines Are the Future"]]></title><description><![CDATA[
<p>I think that is where sync engines come in that allow doing arbitrary hybrid queries (across local and remote data) and then keeping the results of those hybrid queries in sync on the client.<p>This is one of the ideas that appears to be central to the genesis of Zero [1]<p>ElectricSQL allows for a similar pattern and PowerSync is also working on this [2]<p>[1] <a href="https://www.youtube.com/watch?v=rqOUgqsWvbw" rel="nofollow">https://www.youtube.com/watch?v=rqOUgqsWvbw</a><p>[2] <a href="https://www.powersync.com/blog/powersync-2025-roadmap-sqlite-web-speed-and-versatility#1-on-demand-syncing-of-data-in-addition-to-pre-syncing-data" rel="nofollow">https://www.powersync.com/blog/powersync-2025-roadmap-sqlite...</a></p>
]]></description><pubDate>Fri, 21 Mar 2025 17:58:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=43439005</link><dc:creator>ochiba</dc:creator><comments>https://news.ycombinator.com/item?id=43439005</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43439005</guid></item><item><title><![CDATA[New comment by ochiba in "Microsoft open sources PostgreSQL extensions"]]></title><description><![CDATA[
<p>We are working on this: <a href="https://www.powersync.com/" rel="nofollow">https://www.powersync.com/</a><p>We started with Postgres and added support for MongoDB after they deprecated Atlas Device Sync in September last year.</p>
]]></description><pubDate>Fri, 14 Feb 2025 13:11:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=43047949</link><dc:creator>ochiba</dc:creator><comments>https://news.ycombinator.com/item?id=43047949</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43047949</guid></item><item><title><![CDATA[New comment by ochiba in "Sqlite3 WebAssembly"]]></title><description><![CDATA[
<p>Not sure if you've looked at PowerSync yet: <a href="https://www.powersync.com/" rel="nofollow">https://www.powersync.com/</a> (I'm on the team)<p>For the read path it hooks into Postgres logical replication or MongoDB change streams (and MySQL binlog soon). It supports partial syncing using declarative rules. For the write path, it allows writing to the local SQLite database and also places writes into an upload queue, and then uses a developer-defined function to upload writes to the backend API.<p>We did a deep dive on current options for SQLite on the web, and are currently using an IndexedDB-based VFS, and looking to move to OPFS: <a href="https://www.powersync.com/blog/sqlite-persistence-on-the-web" rel="nofollow">https://www.powersync.com/blog/sqlite-persistence-on-the-web</a><p>We recently released an integration with TanStack Query to allow leveraging some of its features in conjunction with PowerSync: <a href="https://docs.powersync.com/client-sdk-references/js-web/javascript-spa-frameworks" rel="nofollow">https://docs.powersync.com/client-sdk-references/js-web/java...</a><p>> Meanwhile for “local-only” it would be great to use sqlite in the browser + native file system API so that the db could be stored on the user’s file system and we wouldn’t have to worry about browser storage eviction. i think that could really open up a whole world of privacy preserving offline software delivered through the browser<p>Agreed. This is a limitation of IndexedDB and OPFS as persistent browser storage currently</p>
]]></description><pubDate>Tue, 15 Oct 2024 18:31:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=41851613</link><dc:creator>ochiba</dc:creator><comments>https://news.ycombinator.com/item?id=41851613</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41851613</guid></item><item><title><![CDATA[New comment by ochiba in "Show HN: One – A new React framework unifying web, native and local-first"]]></title><description><![CDATA[
<p>Yes, using IndexedDB is common, and increasingly also running SQLite in the browser using Wasm, with its data persisted through a VFS that uses IndexedDB or OPFS. <a href="https://www.powersync.com/blog/sqlite-persistence-on-the-web" rel="nofollow">https://www.powersync.com/blog/sqlite-persistence-on-the-web</a></p>
]]></description><pubDate>Fri, 04 Oct 2024 23:09:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=41746355</link><dc:creator>ochiba</dc:creator><comments>https://news.ycombinator.com/item?id=41746355</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41746355</guid></item><item><title><![CDATA[New comment by ochiba in "Show HN: One – A new React framework unifying web, native and local-first"]]></title><description><![CDATA[
<p>Local-first generally refers to apps that work with a local client database which syncs with a server database in the background. Reads and writes go to the local database first. This results in very low latency and not being dependent on the network for working with data. The term is often applied loosely and architectures and implementations differ quite a bit.<p>This community has been central to the idea of local-first: <a href="https://localfirstweb.dev/" rel="nofollow">https://localfirstweb.dev/</a><p>The term local-first was coined by Martin Kleppmann et al in this essay: <a href="https://www.inkandswitch.com/local-first/" rel="nofollow">https://www.inkandswitch.com/local-first/</a></p>
]]></description><pubDate>Fri, 04 Oct 2024 22:01:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=41745933</link><dc:creator>ochiba</dc:creator><comments>https://news.ycombinator.com/item?id=41745933</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41745933</guid></item></channel></rss>