What is a local-first app?
An app that keeps your data and its core work on your machine, with the network as an option rather than a requirement.
A local-first app keeps your data and its core work on your machine, treating the network as an optional extra rather than a requirement. The files live on your disk in formats you can open elsewhere, the computation runs on your hardware, and any syncing or fetching is something you choose per action. The pattern has become especially relevant to AI tools, where local-first means your documents never leave to be processed.
Data lives where you are.
The defining choice is storage. A local-first app writes to your disk, in files you can copy, back up, delete or open with something else, which means the vendor's servers hold nothing and can lose nothing of yours. The practical tests are unglamorous: disconnect the network and the app still opens your work, copy the data folder to another machine and it still reads, and delete the account without losing the library. Local search over your own documents works the same way, with the index as one more file on disk.
Work runs where you are.
The second choice is computation. Processing happens on your hardware, which in practice means the app's features keep working on a plane, in a dead zone, or on a machine with no account attached. For AI tools this is the consequential part: when the model itself runs locally, the raw material of its answers, your prompts and your documents, never becomes someone else's processing job. The privacy of chatting privately with PDFs is one instance of a much older pattern applied to a new kind of tool.
Why AI tools revived the pattern.
The term predates AI, but AI gave it teeth. A note-taker that sends your notes to a server leaks your writing; an AI assistant that sends your documents upstream leaks everything the answer drew from, plus what you asked about it. That raised the stakes on a question most apps had reduced to a footnote, and made the local versus cloud trade worth naming precisely: the network became a real capability, fetching sources you ask for, and the design question was whether it would also be a dependency. Local-first is the answer that keeps it optional.