frontpage.
newsnewestaskshowjobs

Made with ♥ by @iamnishanth

Open Source @Github

fp.

Dear GitHub: no YAML anchors, please

https://blog.yossarian.net/2025/09/22/dear-github-no-yaml-anchors
88•woodruffw•1h ago•56 comments

Cloudflare: A New Internet Business Model

https://blog.cloudflare.com/cloudflare-2025-annual-founders-letter/
16•mmaia•22m ago•6 comments

A Simple Way to Measure Knots Has Come Unraveled

https://www.quantamagazine.org/a-simple-way-to-measure-knots-has-come-unraveled-20250922/
20•baruchel•48m ago•3 comments

Easy Forth

https://skilldrick.github.io/easyforth/
112•pkilgore•3h ago•46 comments

Cloudflare is sponsoring Ladybird and Omarchy

https://blog.cloudflare.com/supporting-the-future-of-the-open-web/
160•jgrahamc•2h ago•96 comments

CompileBench: Can AI Compile 22-year-old Code?

https://quesma.com/blog/introducing-compilebench/
73•jakozaur•2h ago•15 comments

PlanetScale announces PlanetScale for Postgres is GA

https://planetscale.com/blog/planetscale-for-postgres-is-generally-available
26•munns•26m ago•5 comments

What is algebraic about algebraic effects?

https://interjectedfuture.com/what-is-algebraic-about-algebraic-effects/
22•iamwil•1h ago•3 comments

Cap'n Web: a new RPC system for browsers and web servers

https://blog.cloudflare.com/capnweb-javascript-rpc-library/
43•jgrahamc•2h ago•6 comments

Kmart's use of facial recognition to tackle refund fraud unlawful

https://www.oaic.gov.au/news/media-centre/18-kmarts-use-of-facial-recognition-to-tackle-refund-fr...
172•Improvement•5h ago•128 comments

SGI demos from long ago in the browser via WASM

https://github.com/sgi-demos
164•yankcrime•7h ago•36 comments

How I, a beginner developer, read the tutorial you, a developer, wrote for me

https://anniemueller.com/posts/how-i-a-non-developer-read-the-tutorial-you-a-developer-wrote-for-...
652•wonger_•14h ago•313 comments

Beyond the Front Page: A Personal Guide to Hacker News

https://hsu.cy/2025/09/how-to-read-hn/
76•firexcy•6h ago•33 comments

Anti-*: The Things We Do but Not All the Way

https://blog.jim-nielsen.com/2025/my-antis/
4•gregwolanski•33m ago•0 comments

A Beautiful Maths Game

https://sinerider.com/
50•waonderer•2d ago•15 comments

What if we treated Postgres like SQLite?

https://www.maragu.dev/blog/what-if-we-treated-postgres-like-sqlite
13•markusw•2h ago•4 comments

You did this with an AI and you do not understand what you're doing here

https://hackerone.com/reports/3340109
736•redbell•7h ago•354 comments

M4.6 Earthquake – 2 km ESE of Berkeley, CA

https://earthquake.usgs.gov/earthquakes/eventpage/ew1758534970/executive
132•brian-armstrong•5h ago•75 comments

Biconnected components

https://emi-h.com/articles/bcc.html
33•emih•16h ago•7 comments

Privacy and Security Risks in the eSIM Ecosystem [pdf]

https://www.usenix.org/system/files/usenixsecurity25-motallebighomi.pdf
215•walterbell•11h ago•114 comments

Show HN: Software Freelancers Contract Template

https://sopimusgeneraattori.ohjelmistofriikit.fi/?lang=en
100•baobabKoodaa•8h ago•38 comments

The Counterclockwise Experiment

https://domofutu.substack.com/p/the-counterclockwise-experiment
49•domofutu•2d ago•17 comments

DeepSeek-v3.1-Terminus

https://api-docs.deepseek.com/news/news250922
67•meetpateltech•3h ago•15 comments

Why Local-First Apps Haven't Become Popular?

https://marcobambini.substack.com/p/why-local-first-apps-havent-become
107•marcobambini•2h ago•137 comments

The death rays that guard life

https://worksinprogress.co/issue/the-death-rays-that-guard-life/
33•ortegaygasset•4d ago•18 comments

We Politely Insist: Your LLM Must Learn the Persian Art of Taarof

https://arxiv.org/abs/2509.01035
119•chosenbeard•15h ago•69 comments

Why is Venus hell and Earth an Eden?

https://www.quantamagazine.org/why-is-venus-hell-and-earth-an-eden-20250915/
168•pseudolus•16h ago•282 comments

What if AMD FX had "real" cores? [video]

https://www.youtube.com/watch?v=Lb4FDtAwnqU
21•zdw•3d ago•16 comments

How can I influence others without manipulating them?

https://andiroberts.com/leadership-questions/how-to-influence-others-without-manipulating
186•kiyanwang•17h ago•181 comments

Simulating a Machine from the 80s

https://rmazur.io/blog/fahivets.html
64•roman-mazur•3d ago•10 comments
Open in hackernews

Why Local-First Apps Haven't Become Popular?

https://marcobambini.substack.com/p/why-local-first-apps-havent-become
107•marcobambini•2h ago

Comments

PaulHoule•2h ago
Lotus Notes solved syncing for object databases but the world forgot

https://en.wikipedia.org/wiki/HCL_Notes

mschuster91•1h ago
Ahhh Lotus Notes... in many ways ahead of its time, timeless and horribly outdated at the same time.
echelon•1h ago
I still remember the crazy password screen with the symbols that changed as you typed.

If that was deterministic, that was a very bad idea.

AlexandrB•1h ago
IIRC the symbols were basically a hash of the password that let you know if you typed the password correctly without showing it.
codegeek•1h ago
You just reminded me of the nightmare Lotus Notes was. Great idea but absolutely horrendous implementation. Probably the worst piece of software I have ever used and I have been in the industry for 21+ years now.
patwolf•20m ago
From my time using Notes I remember lots of manual replication config to get anything to properly work offline, and even then I struggled to get it to work reliably. So while they might have solved it, I don't think their solution was very good.
self_awareness•2h ago
> Offline-first apps sound like the future: instant loading, privacy by default, and no more spinning loaders on flaky connections.

The future? I thought all apps were like this before this web2.0 thing ruined it.

threetonesun•1h ago
What's a little funny to me is that most of Web 2.0 was supposed to solve things like collaborating on a Word doc on a shared server, ideally getting us around the X+1 versions of files problem, but collaboration is a human problem, so now we have X+1 versions, but in the cloud.
takluyver•1h ago
The implied context for that is that whatever information you have in the apps should be kept in sync between devices and between people. Classic desktop applications are more like offline-only. Web 2.0 traded that approach for data living on a server, so it stays in sync because there's only one source of truth, but you can only edit it when online.

'Offline-first' is trying to combine the benefits of both approaches.

gritzko•1h ago
The author’s journey is probably just starting. I had this exact mindset about 10 years ago. Long story short: distributed systems are hard. A linear log of changes is an absolute lie, but it is a lie easy to believe in.
aleph_minus_one•1h ago
> distributed systems are hard.

While this may be true, the central issue is a different one: most users and/or developers are not very privacy-conscious, so they don't consider it to be worth the effort to solve the problems that go in hand with such distributed systems.

MangoToupe•55m ago
> A linear log of changes is an absolute lie

Compared to what?

ainiriand•51m ago
A graph of changes in a distributed system, I assume.
MangoToupe•50m ago
...how is that any less of a lie? You can project a linear log into a graph trivially.
wellpast•1h ago
It’s a least-common denominator effect.

I.e., most people don’t care.

Local-first is optimal for creative and productivity apps. (Conversely, non-local-first are terrible for these.)

But most people are neither creative nor optimally productive (or care to be).

chii•1h ago
> most people don’t care.

it's not that they "don't care", but that they dont know this is an issue that needs to be cared about. Like privacy, they didnt think they need it until they do, but by then it's too late.

tomxor•1h ago
> 1. Unreliable Ordering

If you think this is only a problem for distributed systems, I have bad news for you.

api•1h ago
I feel like a broken record here: it is not an engineering problem.

Local-first and decentralized apps haven't become popular because SaaS has a vastly superior economic model, and more money means more to be invested in both polish (UI/UX) and marketing.

All the technical challenges of decentralized or local-first apps are solvable. They are no harder than the technical challenges of doing cloud at scale. If there was money in it, those problems would be solved at least as well.

Cloud SaaS is both unbreakable DRM (you don't even give the user the code, sometimes not even their data) and an impossible to evade subscription model. That's why it's the dominant model for software delivery, at least 90% of the time. The billing system is the tail that wags the dog.

There are some types of apps that have intrinsic benefits to being in the cloud, but they're the minority. These are apps that require huge data sets, large amounts of burstable compute, or that integrate tightly with real world services to the point that they're really just front-ends for something IRL. Even for these, it would be possible to have only certain parts of them live in the cloud.

cosmic_cheese•1h ago
Cloud SaaS services are often extremely heavily marketed, too, often with a VC-backed ad spend pool. That’s difficult if impossible to compete with.

There’s also an upcoming generation that doesn’t know what a filesystem is which also doesn’t help matters.

api•1h ago
> There’s also an upcoming generation that doesn’t know what a filesystem is which also doesn’t help matters.

This is why I sometimes think it's hopeless. For a while there -- 90s into the 2000s -- we were building something called "computer literacy." Then the phones came out and that stopped completely. Now we seem to have inverted the old paradigm. In that era people made jokes about old people not being able to use tech. Today the older people (30s onward) are the ones who can use tech and the younger people can only use app centric mobile style interfaces.

The future is gonna be like: "Hey grandpa, can you help me figure out why my wifi is down?"

cosmic_cheese•46m ago
I know some of us technically inclined millennials intend to make a point of (or are already in the process of) ensuring that their kids are computer-literate. I’m not a parent but should that change I would certainly plan to. Whether or not that gets passed down to the grandkids or not is out of our control, but gotta do what you can right?
jjcob•1h ago
I don't know. I think it's a lucky coincidence, but I genuinely think that cloud based solutions are better.

Local first tends to suck in practice. For example, Office 365 with documents in the cloud is so much better for collaborating than dealing with "conflicted copy" in Dropbox.

It sucks that you need an internet connection, but I think that drawback is worth it for never having to manually merge a sync conflict.

api•1h ago
Those technical problems are largely a result of trying to shoehorn collaboration onto older local-only PC era apps that store data in the form of simple files. For really rich collaboration you want something designed for it from the ground up, and Office is not. Office pre-dates even the Internet.

That has nothing to do with where the code lives and runs. There are unique technical challenges to doing it all at the edge, but there are already known solutions to these. If there was money in it, you'd have a lot of local first and decentralized apps. As I said, these technical challenges are not harder than, say, scaling a cloud app to millions of concurrent users. In some cases they're the same. Behind the scenes in the cloud you have all kinds of data sync and consistency enforcement systems that algorithmically resemble what you need for consistent fluid interaction peer to peer.

jjcob•1h ago
It's not a technical challenge, it's a fundamental problem.

When multiple people work on a document at the same time, you will have conflicts that will become very hard to resolve. I have never seen a good UI for resolving non-trivial changes. There is no way to make this merging easy.

The only way to avoid the merge problem is to make sure that the state is synchronised before making changes. With cloud based solutions this is trivial, since the processing happens on the server.

The local first variant of this would be that you have to somehow lock a document before you can work on it. I worked on a tool that worked like that in the early 2000s. Of course that always meant that records remained locked, and it was a bit cumbersome. You still needed to be online to work so you could lock the records you needed.

lenerdenator•1h ago
They're extra work.

Now that people are used to having someone in a data center do their backing up and distributing for them, they don't want to that work themselves again, privacy be damned.

marapuru•1h ago
I always start with a local first application. And then find that I want to access List X, Design Y, Scribble Z on the road and on my phone. Resulting in a frenzied search for a mobile / desktop alternative that includes syncing. Then finding a solution that requires a subscription and then falling back into fiddling with Google Drive, or something in the Google workspace.

I guess I should bring my devices back to exactly 1 device. Or just take a subscription on one service.

candiddevmike•1h ago
IMO, offline read-only is enough of a compromise. How many times are users truly offline, AND want to be able to edit at that time (and deal with the potential conflicts, which by the nature of the operation, won't have a good UX)?
lordnacho•1h ago
Local-first was the first kind of app. Way up into the 2000s, you'd use your local excel/word/etc, and the sync mechanism was calling your file annual_accounts_final_v3_amend_v5_final(3).xls

But also nowadays you want to have information from other computers. Everything from shared calendars to the weather, or a social media entry. There's so much more you can do with internet access, you need to be able to access remote data.

There's no easy way to keep sync, either. Look at CAP theorem. You can decide which leg you can do without, but you can't solve the distributed computing "problem". Best is just be aware of what tradeoff you're making.

marginalia_nu•1h ago
> There's no easy way to keep sync, either. Look at CAP theorem. You can decide which leg you can do without, but you can't solve the distributed computing "problem". Best is just be aware of what tradeoff you're making.

Git has largely solved asynchronous decentralized collaboration, but it requires file formats that are ideally as human understandable as machine-readable, or at least diffable/mergable in a way where both humans and machines can understand the process and results.

Admittedly git's ergonomics aren't the best or most user friendly, but it at least shows a different approach to this that undeniably works.

jjcob•1h ago
Git works, but it leaves conflict resolution up to the user. It's good for a tool for professional users, but I don't see it being adopted for mainstream use.
criddell•1h ago
How can you avoid leaving conflict resolution up to the user?
PaulHoule•57m ago
The funny thing about it is I see git being used in enterprise situation for non-dev users to manage files, often with a web back end. For instance you can tell the average person to try editing a file with the web interface in git and they're likely to succeed.

People say git is too "complex" or "complicated" but I never saw end users succeeding with CVS or Mercurial or SVN or Visual Sourcesafe the way they do with Git.

"Enterprise" tools (such as business rules engines) frequently prove themselves "not ready for the enterprise" because they don't have proper answers to version control, something essential when you have more than one person working on something. People say "do you really need (the index)" or other things git has but git seemed to get over the Ashby's law threshold and have enough internal complexity to confront the essential complexity of enterprise version control.

jjcob•50m ago
> you can tell the average person to try editing a file with the web interface

Yes, but then you are not using a "local first" tool but a typical server based workflow.

poszlem•1h ago
Git solved this by pushing the syncing burden onto people. It’s no surprise, merge conflicts are famously tricky and always cause headaches. But for apps, syncing really ought to be handled by the machine.
marginalia_nu•1h ago
If you want local-first, conflict resolution is something you're unlikely to be able to avoid. The other option is to say "whoops" and arbitrarily throw away a change when there is a conflict due to a spotty wifi or some such.

Fortunately, a lot of what chafes with git are UX issues more than anything else. Its abstractions are leaky, and its default settings are outright bad. It's very much a tool built by and for kernel developers with all that entails.

The principle itself has a lot of redeemable qualities, and could be applied to other similar syncing problems without most of the sharp edges that come with the particular implementation seen in git.

jordanb•1h ago
I feel like git set back mainstream acceptance of copy-and-merge workflows possibly forever.

The merge workflow is not inherently complicated or convoluted. It's just that git is.

When dvcses came out there were three contendors: darcs, mercurial and git.

I evaluated all three and found darcs was the most intuitive but it was very slow. Git was a confused mess, and hg was a great compromise between fast and having a simple and intuitive merge model.

I became a big hg advocate but I eventually lost that battle and had to become a git expert. I spent a few years being the guy who could untangle the mess when a junior messed up a rebase merge then did a push --force to upstream.

Now I think I'm too git-brained to think about the problem with a clear head anymore, but I think it's a failure mostly attributable to git that dvcs has never found any uptake outside of software development and the fact that we as developers see dvcs as a "solved problem" outside more tooling around git is a failure of imagination.

marginalia_nu•1h ago
Yeah I mostly agree with this. I'm mostly talking about git the model, rather than git the tool when I say git has solved the problem of asynchronous decentralized collaboration.

For local-first async collaboration on something that isn't software development, you'd likely want something that is a lot more polished, and has a much more streamlined feature set. I think ultimately very few of git's chafing points are due to its model of async decentralized collaboration.

robenkleene•1h ago
> The merge workflow is not inherently complicated or convoluted. It's just that git is.

What makes merging in git complicated? And what's better about darcs and mercurial?

(PS Not disagreeing just curious, I've worked in Mercurial and git and personally I've never noticed a difference, but that doesn't mean there isn't one.)

TylerE•53m ago
That git won over hg is a true tragedy. The hg ux/ui is so much better.
robenkleene•58m ago
The problem with "human understandable" with respect to resolving syncing conflicts, is that's not an achievable goal for anything that's not text first. E.g., visual and audio content will never fit well into that model.
marginalia_nu•29m ago
I can undo and redo edits in these mediums. Why can't these edits be saved and reapplied?

Not saying this would be in any way easy, but I'm also not seeing any inherent obstacles.

robenkleene•5m ago
Nothing. But that's not what the comment I was replying to was suggesting:

> It requires file formats that are ideally as human understandable as machine-readable, or at least diffable/mergable in a way where both humans and machines can understand the process and results.

What you're proposing is tracking and merging operations rather than the result of those operations (which is roughly the basis of CRDTs as well).

I do think there's a number of different problems with that approach as well though (e.g., what do you do about computationally expensive changes like 3D renders?). But most of these arguments can be summed up by just saying the value just isn't there relative to the technical complexity of rearchitecting these apps that way.

recursivedoubts•42m ago
“solved”

imagine asking a normie to deal with a merge conflict

marginalia_nu•32m ago
That's an UX issue with git, not really what's being discussed.
JustExAWS•25m ago
Git hasn’t solved it in a way that any normal person would want to deal with.
taeric•19m ago
Git does no such thing. Plain text files with free form merging capabilities somewhat solves the idea that you can merge things. But, to make that work, the heavy lifting has to be done by the users of the system.

So, sure, if you are saying "people trained to use git" there, I agree. And you wind up having all sorts of implicit rules and guidelines that you follow to make it more manageable.

This is a lot like saying roads have solved how to get people using dangerous equipment on a regular basis without killing everyone. Only true if you train the drivers on the rules of the road. And there are many rules that people wind up internalizing as they get older and more experienced.

bryanlarsen•1h ago
There's no perfect general solution, but the number of conflicts generated by small teams collaborating in an an environment where the internet almost always works is going to be miniscule. No need to let the perfect be the enemy of the good.
madcaptenor•1h ago
This is why I just use timestamps if I am doing local-first. (yyyy-mm-dd date format, for sortability)
elzbardico•1h ago
I remember the concept of departmental server/database/apps from that age. Lots of big companies still had mainframe applications running on their HQ, that had a consolidated view of their enterprise, and a lot of data transfers and batch jobs running off hours to synchronize everything.

It was the first practical manner to downsize mainframe applications.

tcoff91•1h ago
CRDTs are a pretty good experience for many data types when it comes to collaborative editing.
card_zero•1h ago
> nowadays you want to have information from other computers.

Do I? What sort of information ...

> shared calendars

OK yes that would be a valid use, I can imagine some stressed executive with no signal in a tunnel wanting to change some planned event, but also to have the change superceded by an edit somebody else makes a few minutes later.

> the weather

But I don't usually edit the weather forecast.

> a social media entry

So ... OK ... because it's important that my selfie taken in a wilderness gets the timestamp of when I offline-pretend-posted it, instead of when I'm actually online and can see replies? Why is that? Or is the idea that I should reply to people offline while pretending that they can see, and then much later when my comments actually arrive they're backdated as if they'd been there all along?

raincole•1h ago
> offline-pretend-posted

It's a far, far more complicated mental model than simply posting it. It'd be a huge barrier for normal users (even tech-savvy users, I'd say). People want to post it online and that's it. No one wants an app what requires its users to be aware of syncing state constantly unless they really have no choice. We pretend we can step on gas instead of mixing the gas with air and ignite it with a spark plug until we need to change the damn plug.

dundarious•29m ago
Email clients had the outbox that was local only and then you pushed to send them all. Hiding the outbox is why some of these things seem fiddly to use, despite being conceptually very simple. This model would seem to work very well at least for non-collaborative changes like IG posts.
bluGill•1h ago
Nearly everything I do is on a shared computer.

At work: I write code, which is in version control. I write design documents (that nobody reads), and put them on a shared computer. I write presentations (you would better off sleeping through them...) and put them on a share computer. Often the above are edited by others.

Even at home, my grocery list is shared with my wife. I look up recipes online from a shared computer. My music (that I ripped from CDs) is shared with everyone else in the house. When I play a game I wish my saved games were shared with other game systems (I haven't had time since I had kids, more than 10 years ago). When I take notes about my kid's music lessons they are shared with my wife and kids...

tetralobita•29m ago
in our company some team is trying to solve offline selling items dropping from stock, when become offline it syncs, there are price and stock changes to be sync.
bluGill•1h ago
We have gone back and forth several times in history.

It started with single computers, but they were so expensive nobody had them except labs. You wrote the program with your data, often toggling it in with switches.

From there we went to batch processing, then shared computers, then added a networking, with file sharing and RPC. Then the personal computer came and it was back to toggling your own programs, but soon we were running local apps, and now our computers are again mostly "smart terminals" (as opposed to dumb terminals), and the data is on shared computers again.

Sometimes we take data off the shared computer, but there is no perfect solution so distributed computing and since networks are mostly reliable nobody wants that anyway. What we do want is control of our data and that we don't get (mostly)

dustingetz•1h ago
also, AI
Sharlin•1h ago
Well, the first kind of PC app, anyway. For decades before that, programs were run on time-sharing mainframes via remote terminals.
jakelazaroff•1h ago
I wouldn't call local Excel/Word/etc "local-first". The "-first" part implies that the network is used for secondary functionality, but the apps you're talking about are fully offline. IMO local-first definitionally requires some form of networked multi-device collaboration or sync.
echelon•59m ago
Local-first apps aren't common because teams building web apps are primarily targeting online, database backed, SaaS.

With the exception of messenger clients, Desktop apps are mostly "local-first" from day one.

At the time you're beginning to think about desktop behavior, it's also worth considering whether you should just build native.

robenkleene•56m ago
Excel and Word both support real-time collaboration and sync, e.g., https://support.microsoft.com/en-us/office/collaborate-on-wo...
paldepind2•1h ago
> Local-first was the first kind of app. Way up into the 2000s, you'd use your local excel/word/etc, and the sync mechanism was calling your file annual_accounts_final_v3_amend_v5_final(3).xls

To be precise, these apps where not local-_first_, they where local-_only_. Local-first implies that the app first and foremost works locally, but also that it, secondly, is capable of working online and non-locally (usually with some syncing mechanism).

MangoToupe•56m ago
> There's no easy way to keep sync, either.

There's no easy way to merge changes, but if you design around merging, then syncing becomes much less difficult to solve.

magicalhippo•42m ago
> There's no easy way to keep sync, either. Look at CAP theorem.

Sure there is, you just gotta exploit the multiverse[1]. Keep all the changes in their own branch aka timeline, and when there's some perceived conflict you just say "well in the timeline I'm from, the meeting was moved to 4pm".

[1]: https://www.reddit.com/r/marvelstudios/comments/upgsuk/expla...

guywithahat•29m ago
I also suspect it's more portable. You build one site with one API, and then you just interact with that api across all the devices you support. If you write it locally it has to get rewritten for each platform
ForHackernews•1h ago
If they're building this on top of sqlite, probably worth considering adopting https://rqlite.io/ that has already done a lot of work for a clustered sqlite
Xelbair•1h ago
Technical reasons are honestly overblown - it all boils down to one, business, reason - control.

When you do serverside stuff you control everything. What users can do, and cannot do.

This lets you both reduce support costs as it is easier to resolve issues even by ad-hoc db query, and more importantly - it lets you retroactively lock more and more useful features behind paywall. This is basically The DRM for your software with extra bonus - you don't even have to compete with previous version of your own software!

i want my local programs back, but without regulatory change it will never happen.

hobs•1h ago
Yep at every company I have ever worked at the question is not only how to assert control, but how to maintain it for the long term. Even if the company isn't exploiting you today, they want the option for later.
gwbas1c•1h ago
> Technical reasons are honestly overblown

Having built a sync product, it is dramatically simpler (from a technical standpoint) to require that clients are connected, send operations immediately to central location, and then succeed / fail there. Once things like offline sync are part of the picture, there's a whole set of infrequent corner cases that come in that are also very difficult to explain to non-technical people.

These are silly things like: If there's a network error after I sent the last byte to a server, what do I do? You (the client that made the request) don't know if the server actually processed the request. If you're completely reliant on the server for your state, this problem (cough) "doesn't exist", because when the user refreshes, they either see their change or they don't. But, if you have offline sync, you need to either have the server tolerate a duplicate submission, or you need some kind of way for the client to figure out that the server processed the submission.

hasanhaja•1h ago
I've only started playing with local first recently to learn the Service Worker API and IndexedDB, and I'm looking forward to learning about CRDTs more. Here's a little todo app that I built:

[1] GitHub: https://github.com/hasanhaja/tasks-app/ [2] Deployed site: https://tasks.hasanhaja.com/

radarsat1•1h ago
I spent some time learning about PouchDB a little while ago, it seems to be a nice solution at least for a No SQL approach. Although I still need some more practical experience to understand the security model, because it feels weird to just sync a database that was updated on some web page, really you want to ensure there is validation and treat it as an untrusted source to some extent. Still not sure of the best way to deal with that without implementing most of the application as server side validation scripts, or maybe that is just the way to do it.
jakelazaroff•1h ago
The real answer to the question isn't technical. Local-first apps haven't become popular because companies recognize that their value comes from controlling your data.

In a talk a few years ago [1], Martin Kleppman (one of the authors of the paper that introduced the term "local-first") included this line:

> If it doesn't work if the app developer goes out of business and shuts down the servers, it's not local-first.

That is obviously not something most companies want! If the app works without the company, why are you even paying them? It's much more lucrative to make a company indispensable, where it's very painful to customers if the company goes away (i.e. they stop giving the company money).

[1] https://speakerdeck.com/ept/the-past-present-and-future-of-l...

xorvoid•1h ago
I believe the lack of popularity is more of an economics problem. There are established business models for SaaS apps or freemium with ads. But, the business model for local-first apps is not as lucrative. Those who like the local-first model value features like: data-sovereignty, end-to-end encryption, offline usage, etc. These properties make existing business models hard-to-impossible to apply.

My current thinking is that the only way we get substantial local-first software is if it's built by a passionate open-source community.

canpan•1h ago
Yes, I don't think replicated data structures are the problem.

Look at single player video games, cannot get more ideal for local-first. Still you need a launcher and internet connection.

SilverbeardUnix•1h ago
No you don't. There are plenty of games you can buy and go into the wilderness and play just fine offline. Just because game developers WANT you to be online so they can get data doesn't mean you NEED to be online.
Reubachi•42m ago
Your point is correct, but OP is correct.

There are currently tens of thousands of games that are unplayable due to requiring pinging to a network/patch server which long ago was deprecated.

Forsaking patch requirements, just as many games are no longer playable due to incompatibility/abandoned OS, codebase, gamebreaking bugs.

In both of these scenarios, my "lifetime license" is no longer usable through no action of my own, and breaks the lifetime license agreement. I shouldn't need to be into IT to understand how to keep a game I bought 5 years ago playable.

The solution to this "problem" for user, as offered by the corporate investment firms in control, is to offer rolling subscriptions that "keep your license alive", for some reason. Rather than properly charge for a service at time of purchase.

TLDR: Why move the goal posts further in favor of tech/IT/Videogame Investment firms?

antonvs•1h ago
This is the primary reason. The heaviest push for SaaS came from Silicon Valley, which wanted a recurring revenue stream model.
godshatter•59m ago
It's crazy that we live in a time when "pay with money and your data" or "pay with your eyeballs" are the only viable options and "pay with your money without your data" can't even be considered.
chaostheory•36m ago
Someone has to prove that there’s a demand for paid local first subscriptions. Open source and tailscale can’t shoulder it all if you want more adoption.
wartywhoa23•1h ago
Because Big Money are behind Local-Last Apps
rkapsoro•1h ago
The use case I always think of is the developer experience for regular hobbyist and workaday devs writing their apps with local-first sync.

Apple comes close with CloudKit, in that it takes the backend service and makes it generic, basically making it an OS platform API, backed by Apple's own cloud. Basically cloud and app decoupled. But, the fundamental issue remains, in that it's proprietary and only available on Apple devices.

An open source Firebase/CloudKit-like storage API that requires no cloud service, works by p2p sync, with awesome DX that is friendly to regular developers, would be the holy grail for this one.

Dealing with eventually consistent data models is not so unusual these days, even for devs working on traditional cloud SAAS systems, since clouds are distributed systems themselves.

I would be very happy to see such a thing built on top of Iroh (a p2p network layer, with all the NAT hole punching, tunnelling and addressing solved for you) for example, with great mobile-first support. https://github.com/n0-computer/iroh

lifty•1h ago
Off topic, but why would I choose iroh instead of libp2p which seems to have much better language coverage compared to iroh?
gizmo•1h ago
I think that the database layer is the wrong layer for reconciliation of change sets.

The main problem with any sync system that allows extensive offline use is in communicating how the reconciliation happens so users don't get frustrated or confused. When all reconciliation happens as a black box your app won't be able to do a good job at that.

PLenz•1h ago
Harder to rent-seek with non-saas software
robmccoll•1h ago
I wonder about the categories of apps for which offline first with potentially infinitely delayed sync provides a better experience and how large those really are.

It seems like most of those are apps where I'm creating or working on something by myself and then sharing it later. The online part is almost the nice-to-have. A lot of other apps are either near-real-time-to-real-time communication where I want sending to succeed or fail pretty much immediately and queueing a message for hours and delivering it later only creates confusion. Or the app is mostly for consuming and interacting with content from elsewhere (be that an endless stream of content a la most "social media", news, video, etc. or be it content like banking apps and things) and I really mostly care about the latest information if the information is really that important at all. The cases in those apps where I interact, I also want immediate confirmation of success or failure because it's really important or not important at all.

What are the cases where offline-first is really essential? Maybe things that update, but referencing older material can be really useful or important (which does get back to messaging and email in particular, but other than something that's designed to be async like email, queueing actions when offline is still just nice-to-have in the best cases).

Otherwise the utility of CRDTs, OT, et al. is mostly collaborative editing tools that still need to be mostly online for the best experience.

blacklion•1h ago
> It seems like most of those are apps where I'm creating or working on something by myself and then sharing it later.

It is interesting. I've thought about things I don in non-messaging apps (which are online0first for obvious reasons), and all of them create something, which can be EXPORTED to on-line presence, but doesn't require connected app.

Code? I write it locally and use separate app to share it: git. Yes, code is collaborative creation (I'm working in the team), but it is still separate tool and I like it, as I control what I'll publish for my colleagues.

Photos? Of course I want to share result, but I'm working on RAW files with non-destructive editing and I want to share final bitmap (as JPEG) and not RAW data and editing steps.

Same with music, if I create one (I doesn't).

Texts must be polished in solitude and presented as final result (maybe, as typographically set one, as PDF).

All my "heavy" applications are and should be offline-first!

crote•1h ago
Yeah, I feel like for most applications the online part acts more like a backup than an interactive sync. How often do you really work on the same file on different devices? And if you do so, how often do you want to continue working on an old version rather than first forcing a sync of the latest revision? After all, without a sync you can't continue your work but only edit completely unrelated parts...

I think most real-world applications fall under either "has to be done online", or "if there are conflicts, keep both files and let the user figure it out". Trying to automatically merge two independent edits can quickly turn into a massive mess, and I really don't want apps to do that automagically for me without giving me git-like tooling to fix the inevitable nightmare.

codeulike•1h ago
Every problem is a sync problem these days.

Sync problems are harder than just 'use a CRDT'.

What counts as 'consistent' depends on the domain and the exact thing that is being modelled.

luplex•1h ago
Apps that let you manipulate artifacts are often local. MS Office, Photoshop, Blender, CAD tools. But it turns out that actually, humans rarely work or live alone, and you can't facilitate communication through a local-first app.
Sharlin•1h ago
Yet somehow people managed to do that before everything went to the cloud.
syntaxing•1h ago
It’s a hard balance, local first a lot of times feel local only. I really like the model on Home Assistant/Nabu Casa. Local first and you can pay a subscription to cloud access.
gejose•1h ago
Shameless self plug, but my workout tracking app[1] uses a sync engine and it has drastically simplified the complexities of things like retry logic, intermittent connectivity loss, ability to work offline etc.

Luckily this is a use case where conflict resolution is pretty straightforward (only you can update your workout data, and Last Write Wins)

[1] https://apps.apple.com/us/app/titan-workout-tracker/id644949...

elzbardico•1h ago
Network speeds are of sufficient bandwidth and latency to allow cloud first applications, which are vastly simpler to develop than Local-first whenever you need to add any remote/collaborative feature.
kachapopopow•1h ago
I don't understand why we have servers in the first place for any kind of local appliance, they ARE a server already, 256mb of flash costs pennies for storing hundreds of thousands of metrics - almost enough for a year!
kachapopopow•56m ago
Not sure why this is getting downvoted I assume because it has nothing to do with the article but these problems don't exist in applications that never have to reach a server in the first place. Remote access can be solved with a simple relay appliance (ex what homepod does for apple) for the average joe.
VikingCoder•1h ago
I want many more Local-Only apps, thanks. Self-Hosted.

Or Federated apps, again Self-Hosted.

And I think network infrastructure has been holding us back horribly. I think with something like Tailscale, we can make local-only apps or federated apps way, way easier to write.

hasanhaja•1h ago
I've been having fun exploring this actually: https://news.ycombinator.com/item?id=45333494

I've found it to be a fun way to build apps.

ktosobcy•1h ago
I try to use those as much as possible. We ended up in this situation mostly because of the Google push to make everything an "web-app" with web-technologies instead of protocols...

Anyone uses IMAP email? Works just fine (save for IMAP design but that's another story).

Same with CalDAV.

For stydy I use Anki and it has brilliant sync (it can even automatically/automagaically merge study changes when I study some items on mobile and others on desktop).

Many seem to claim that it's impossible to sync correctly in "colaborative environment" as in it would always involved dozens of people constantly working and editing the document (which would be utterly difficult to track the evolution of)… Most of the time it's not that colaborative and having the data locally makes it easier to work with.

OTOH not everything has to be (web-)app…

jjcob•1h ago
IMAP works fine until you try to continue working on a draft email that you started on another computer... somehow it always gets broken and I end up with 5 copies of the message in the drafts folder...
isaachinman•46m ago
We fixed this at Marco, FYI.

https://marcoapp.io

Anonyneko•39m ago
With Anki the sync works perfectly until it doesn't and the app asks you to choose the copy you want to keep. Thankfully it doesn't happen often and hasn't caused any trouble for me, but it (seemingly) has no options for manual conflict resolution.
cramcgrab•1h ago
Because cloud. And local hardware and software lags now.
anon1395•1h ago
Personally I think PWAs are a bit confusing for consumers as they think "It's a website, i won't be able to use it offline." and if they get reminded that they can use it offline they usually forget.
alextingle•1h ago
Why would they think "its a web-site"? PWAs just look like normal phone apps.

In fact, many "normal" phone apps are basically just a web-site inside a thin wrapper. So the difference is largely academic in many cases.

crote•54m ago
Because a user first encounters it on the web - where it acts exactly like a website. The only difference is that the bookmark-button-thingy says "add app to home screen" instead of "add to home screen".

It's not giving a "I'm installing an application" vibe, it is giving "I am creating a shortcut to a website" vibes. Apps are installed via the app store, not as weird quasi-bookmarks in your browser.

anon1395•12m ago
Most ordinary people thing that they are just adding a shortcut to the website, whereas these wrappers convince the user they are actually installing an app app.
Andrew_nenakhov•1h ago
Server-centric computing is just more efficient, and it usually becomes less popular only at because means of communication aren't up to the task at the moment.

1. In the beginning, there were mainframes and terminals. You saved resources by running apps on a server and connecting to them with cheap terminals

2. Then, PCs happened. You could run reasonably complex programs on them, but communication capabilities were very limited: dialup modem connections or worse

3. Then, internet happened, and remote web apps overtook local apps in many areas (most of those that survived required massive usage of graphics, like games, which is difficult even with modern internet)

4. Then, smartphones happened. At the time of their appearance they didn't have ubiquitous network coverage, so many first apps for these platforms where local. This is eroding too, as communication coverage improves.

So if you look at this, it is clear that main share of computing oscillated back and forth between server and local, moving to local only when communication capabilities do not permit remote running, and once comms catch up, the task of running apps moves back to servers.

setnone•1h ago
Just because "personal server" hasn't happened yet in the way personal computer did
RajT88•1h ago
That is an interesting thought.

How do you make self-hosting appealing to more than weird nerds?

crote•1h ago
Make it a comprehensive service you can rent at a fixed monthly cost. Which of course defeats the whole "self-hosting" part.

Regular people don't like the Magic Box Which Makes Things Work. They'll begrudgingly shove it in a cupboard and plug it in, but even that is already asking a lot. If it needs any kind of regular maintenance or attention, it is too much effort. "Plug in a harddrive once a month for backups"? You'll have just as much asking them to fly to Mars and yodel the national anthem while doing a cartwheel.

SilverbeardUnix•1h ago
1. People don't work alone and need to collaborate

2. People value convenience over privacy and security

3. Cloud is easy.

RajT88•1h ago
Do not forget - cloud makes apps easier to monetize via ads and selling user data.

Business trumps perfect software engineering almost every time.

weego•57m ago
Absolutely.

I can't believe so many replies are struggling with the easy answer: privacy, security, "local first", "open source", "distributed", "open format" etc etc etc are developer goals projected onto a majority cohort of people who have never, and will never, care and yet hold all the potential revenue you need.

sylens•1h ago
There's no money in making a local first app. Businesses want your data, they want you to be dependent on them, and they want to be able to monetize your behavior and attention
zsoltkacsandi•1h ago
There is money in local first apps, businesses are just greedy.
JustExAWS•11m ago
Today you can still buy Microsoft Office as a one time purchase.
observationist•10m ago
They want everything to be cloud applications and services that run on terminals you rent, managed through portals you have subscribe to. They want to sell your attention and screenshare on top of making you pay for the privilege of being nickel and dimed, and they want to surveil every aspect of your life, free from liability or accountability for what they do with the data, or who they sell it to.
russnewcomer•1h ago
I'm not sure CRDTs are actually the right answer here for your example of #2, Marco. A double-entry accounting system might actually be more ideal. In that case, what you are keeping in sync is the ledger, but depending on your use-case, that might actually be easier since you can treat them as a stream-of-data, and you would get the 'correct' answer of 100.

In this case, you would need two accounts, a credit and debit account, and then device A would write +20 to the credit account and -20 to the debit account, device B would write -20 to the credit account and +20 to the debit account, then using a HLC (or even not, depending on what your use-case is again), you get back to the 100 that seems from the description of the problem that it is the correct answer.

Obviously, if you are editing texts there are very different needs, but this as described is right in the wheelhouse of double-entry accounting.

Sharlin•1h ago
> Offline-first apps sound like the future

...and here we go again. Time is a flat circle.

vahid4m•1h ago
I’ve been working on https://with.audio which is a local app.

I think there should be way more local apps with sync capabilities. I haven’t finished the sync feature in WithAudio and you have very nice ideas there. Specially the eventual consistency. That’s what will work.

But I must say for sure the most difficult part of local apps is debugging customer issues. For someone who is used to logs and traces and metrics and most of users using a one version of the code in the backend, debugging an issue in customers computer on an old version without much insight (without destroying all your premises of privacy) is very challenging.

em-bee•55m ago
i recently discussed the development of a new application for a customer. one of the important aspects was that the app would handle data that would have to stay local. despite that my thinking went like this:

if i develop it as a webapplication, then i can do all the work on my computer, test with various browsers and deliver a working result. if the customer has issues, i can likely reproduce them on my machine.

but if it was a desktop application, my feeling was that testing would be a nightmare. i would have to set up a machine like my client, or worse visit the client and work with them directly, because my own machine is just to different from what the client uses. also not to forget distribution and updates

in short: web -> easy. desktop -> difficult.

jlarocco•1h ago
As a user the simple answer is that I'll always use a regular application instead of a "local-first" web app when I have the ability.

"Local-first apps" are the worst of everything - crappy, dumbed down web UI; phoning home, telemetry, and other privacy violations; forced upgrades; closed source, etc.

At work, I don't have a choice, so it's Google Docs or Office 365 or whatever. And in that context it actually makes sense to have data stored on some server somewhere because it's not really my data but the company's. But at home I'll always choose the strictly offline application and share my data and files some other way.

em-bee•1h ago
"Local-first apps" are the worst of everything - crappy, dumbed down web UI along with no privacy.

which apps are you talking about here? that description doesn't make any sense to me.

jlarocco•54m ago
Aren't "local-first apps" in this context the ones where you vist "example.com", and it caches a bunch of HTML and Javascript and saves data locally using the "local storage" APIs? And then periodically makes requests back to "example.com" to check for updates, sync data, etc.?
shortercode•24m ago
Kinda yes kinda no? Most PWAs have some idea of offline support but it tends to be an afterthought. The argument of local first is that you design the app to work against a local database ( normally stashed in indexeddb or OPFS ) meaning that you don’t have to wait for data to load or network requests to complete. Your backend is then just a dumb storage engine which accepts changes and sends push messages to the client to indicate things have changed.

The only “big” local first app I’m aware of is Linear.

knubie•51m ago
> crappy, dumbed down web UI; phoning home, telemetry, and other privacy violations; forced upgrades; closed source

What does any of this have to do with local first? Most online only apps have this stuff too.

MathMonkeyMan•1h ago
The free software evangelist in me says "because local-first gives more to the user of the software," which will tend not to happen when the user is not in control of the software.

Realistically the reason is probably that it's easier to make changes if you assume everything is phoning home to the mother ship for everything.

Also, an unrelated nit: "Why Local-First Apps Haven’t Become Popular?" is not a question. "Why Local-First Apps Haven’t Become Popular" is a noun phrase, and "Why Haven't Local-First Apps Become Popular?" is a question. You wouldn't say "How to ask question?" but instead "How do you ask a question?"

robenkleene•50m ago
Apple is practically the most antithetical to "free software" company around, yet Apple maintains perhaps the largest fleet of local-first apps in existence, e.g., off the top of my head: Calendar, Contacts, Keynote, Mail, Notes, Numbers, Photos, and Pages (these are all examples of apps that support multi-device sync and/or real-time collaboration).

I think the truth of your statement is more that free software tends towards what you might call "offline" software (e.g., software that doesn't sync or offer real-time collaboration), because there's more friction for having a syncing backend with free software.

brainzap•1h ago
Does Apple Notes count as local first? it is an amazing experience.
czx111331•57m ago
I believe that in the right contexts—specifically where eventual consistency is acceptable—the local-first paradigm is highly valuable and will gradually become mainstream. A major factor limiting adoption today is that existing local-first solutions are incomplete: when building such applications, developers must handle many problems that are trivial under strong-consistency or traditional models. This raises the learning cost and creates significant friction for paradigm shifts.

Our recent work on Loro CRDTs aims to bridge this gap by combining them with common UI state patterns. In React, developers can keep using `setState` as usual, while we automatically compute diffs and apply them to CRDTs; updates from CRDTs are then incrementally synced back into UI state [1]. This lets developers follow their existing habits without worrying about consistency between UI state and CRDT state. Paired with the synchronization protocol and hosted sync service, collaboration can feel as smooth as working with a purely local app. We’ve built a simple, account-free collaborative example app[2]. It only has a small amount of code related to synchronization; the rest looks almost the same as a purely local React app.

[1]: https://loro.dev/blog/loro-mirror

[2]: https://github.com/loro-dev/loro-todo

poisonborz•51m ago
The goals have shifted. What is "local" nowadays? ~Everybody uses multiple devices, and things are expected to be in sync. What users now (should) need is easy self-hosting apps and centralised storage, with clients that can work/cache offline locally. A good example is Bitwarden.
mhuffman•51m ago
Some people might say that the browser you are using to look at your webapp or ask chatgpt for something is a local-first app ... making it pretty damn popular.
pixelpoet•45m ago
That's a bit like saying we live in outer space because earth is in outer space.
andsoitis•41m ago
Lotus Notes and later Groove Networks (both brought to us courtesy Ray Ozzie) both provided a platform to create apps with data synchronizing as a first-class citizen.

The technology behind Groove now powers OneDrive and Microsoft 365.

Notes: https://en.wikipedia.org/wiki/HCL_Notes

Groove: https://en.wikipedia.org/wiki/Groove_Networks

dboreham•39m ago
While the article is about eventual consistency, the real reason local web apps haven't become popular is that current browsers don't support them. Any code running in the browser has to come from some url. The server at that url is assumed to control everything. Any data stored locally might vanish any time, and can't be accessed by code loaded from any other url. So while you might like the idea of "just running code on my computer via the browser to do something useful" what you're actually doing is providing a way for whoever controls the web server to do whatever they want on your computer (modulo what Google wants). Since any idea of an independent app running on your computer is a fiction, there's no need to even attempt to solve the eventual consistency problems. Just have the server that's in total control do your consistency.
0xffff2•28m ago
I feel like I'm taking crazy pills. How on Earth could anyone consider the example in #2 "conflict-free"? You haven't removed the conflict, you're just ignored it! Anything can be conflict free in that case.

Obviously not every problem will have such an obvious right answer, but given the example the author chose, I don't see how you could accept any solution that doesn't produce "100" as a correct result.