local-first software
owning state on the device, syncing on the owner's terms.
local-first software keeps working on one machine and treats the network as optional: you opt into sync, and conflicting copies can be reconciled. the examples here range from fully local apps to a hosted research workspace that borrows some of the same techniques.
these notes cover the state models, content addressing, and storage quotas that make local-first practical, and the places where it still costs you.
lessons
- local-first doesn't need crdts: a state model for single-user appsstart here · when the conflict machinery is overkill, and when it isn't
- state models where invalid states cannot exist · parse every foreign value from unknown
- content addressing for browser apps: dedupe, verify, sync · identity that comes from the bytes, not the row
- storage quotas and encrypted sync: budgeting bytes on someone else's machinesubscriber · persist, estimate, and design for eviction
projects
- soundfish · its midi editor (beta) keeps a local indexeddb library, with optional sign-in sync for loops.
- peopleblade · a local-first crm for your personal agent.
- sponge · a hosted research workspace and personal source library.
- lifecharts · a life timeline maker whose cli builds chart links without uploading your data.
by hraness · drafted with ai assistance