<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/local-first-means-three-different-things-lh3vcwaom" -->

---
title: Local-First Means Three Different Things | daily.dev
description: Local-first means three different things: ownership, offline support, or speed, and developers often mean different ones when they talk to each other. The term...
canonical: https://daily.dev/posts/local-first-means-three-different-things-lh3vcwaom
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Local-First Means Three Different Things | daily.dev
og:description: Local-first means three different things: ownership, offline support, or speed, and developers often mean different ones when they talk to each other. The term...
og:url: https://daily.dev/posts/local-first-means-three-different-things-lh3vcwaom
og:image: https://api.daily.dev/og/posts/LH3VCwAOm.png
og:image:alt: Local-First Means Three Different Things
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Local-First Means Three Different Things

**[ElixirStatus](https://daily.dev/sources/elixirstatus)** · 11 min read · 0 upvotes · 0 comments

## Summary

Local-first means three different things: ownership, offline support, or speed, and developers often mean different ones when they talk to each other. The term comes from a 2019 Ink & Switch essay about owning your data, but sync engines later reused it to mean offline support or instant UI with no spinners. CRDTs let devices merge data without a server, but they can't enforce rules like one passenger per seat, so most tools (Zero, Jazz) put a server back in charge. The author is building local-first into Hologram, an Elixir-based full-stack framework, keeping the server in charge of rules, with end-to-end encryption and CRDTs planned for chosen fields.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://hologram.page/blog/local-first-means-three-different-things>

## Questions this post answers

### What does local-first actually mean in software development?

Local-first has three different common meanings: ownership (your device holds the real data copy, not the cloud), offline support (the app keeps working without a connection), and speed (writes feel instant with no loading spinner). The term originated in a 2019 Ink & Switch essay by Martin Kleppmann and others, which emphasized ownership, but most sync engines today use it to mean offline and speed instead.

_Developers comparing local-first tools can track how each one defines the term on daily.dev._

### Why can't CRDTs enforce business rules like unique seat assignments?

CRDTs only guarantee that all copies of data converge to the same result, regardless of merge order, but they have no concept of application-specific rules. For example, two people can book the same airline seat offline on separate phones, both get confirmations, and when the devices sync the CRDT merge produces a flight with two passengers in one seat, with every copy agreeing on that invalid state.

_Teams designing sync engines weigh CRDT trade-offs like this one through discussions on daily.dev._

### Why does Zero say it isn't local-first while Jazz calls itself local-first?

Zero's own docs state it isn't local-first because it relies on an authoritative server for writes, using local-first in the original ownership sense from the Ink & Switch essay. Jazz, which started as a CRDT framework, moved to a model with a server in charge too, but still calls itself local-first because it still supports writing while offline, showing the two tools interpret the same term differently despite similar designs.

_Developers picking a sync engine can follow these terminology debates as they unfold on daily.dev._

## Similar posts on daily.dev

- [Local-first is not offline-first](https://daily.dev/posts/local-first-is-not-offline-first-uwgluzdvx) · Lobsters · 2 upvotes · 1 comments
- [The Architecture Of Local-First Web Development — Smashing Magazine](https://daily.dev/posts/the-architecture-of-local-first-web-development-smashing-magazine-fi6dhffcw) · Smashing Magazine · 6 upvotes · 1 comments
- [Architectural Patterns: Moving Beyond Cloud-Native to Local-First - Insights from Adam Wiggins](https://daily.dev/posts/architectural-patterns-moving-beyond-cloud-native-to-local-first---insights-from-adam-wiggins-4dw7x1cfd) · InfoQ · 1 upvotes · 0 comments

---

Tags: [#tanstack](https://daily.dev/tags/tanstack), [#local-first](https://daily.dev/tags/local-first), [#offline-first](https://daily.dev/tags/offline-first), [#crdt](https://daily.dev/tags/crdt)

[View this post on daily.dev](https://daily.dev/posts/local-first-means-three-different-things-lh3vcwaom)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Local-First Means Three Different Things","url":"https://daily.dev/posts/local-first-means-three-different-things-lh3vcwaom","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/local-first-means-three-different-things-lh3vcwaom"},"datePublished":"2026-10-29T01:28:41.208Z","dateModified":"2026-10-29T01:29:14.565Z","description":"Local-first means three different things: ownership, offline support, or speed, and developers often mean different ones when they talk to each other. The term...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/6efa897569900d9a16ad6432c9f27fb3?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/6efa897569900d9a16ad6432c9f27fb3?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"ElixirStatus","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"ElixirStatus","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/22e4640538124187827caf8cc8e39190","url":"https://daily.dev/sources/elixirstatus"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/local-first-means-three-different-things-lh3vcwaom","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"tanstack,local-first,offline-first,crdt","timeRequired":"PT11M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"ElixirStatus","item":"https://daily.dev/sources/elixirstatus"},{"@type":"ListItem","position":3,"name":"Local-First Means Three Different Things"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/local-first-means-three-different-things-lh3vcwaom#faq","mainEntity":[{"@type":"Question","name":"What does local-first actually mean in software development?","acceptedAnswer":{"@type":"Answer","text":"Local-first has three different common meanings: ownership (your device holds the real data copy, not the cloud), offline support (the app keeps working without a connection), and speed (writes feel instant with no loading spinner). The term originated in a 2019 Ink \u0026 Switch essay by Martin Kleppmann and others, which emphasized ownership, but most sync engines today use it to mean offline and speed instead. Developers comparing local-first tools can track how each one defines the term on daily.dev."}},{"@type":"Question","name":"Why can't CRDTs enforce business rules like unique seat assignments?","acceptedAnswer":{"@type":"Answer","text":"CRDTs only guarantee that all copies of data converge to the same result, regardless of merge order, but they have no concept of application-specific rules. For example, two people can book the same airline seat offline on separate phones, both get confirmations, and when the devices sync the CRDT merge produces a flight with two passengers in one seat, with every copy agreeing on that invalid state. Teams designing sync engines weigh CRDT trade-offs like this one through discussions on daily.dev."}},{"@type":"Question","name":"Why does Zero say it isn't local-first while Jazz calls itself local-first?","acceptedAnswer":{"@type":"Answer","text":"Zero's own docs state it isn't local-first because it relies on an authoritative server for writes, using local-first in the original ownership sense from the Ink \u0026 Switch essay. Jazz, which started as a CRDT framework, moved to a model with a server in charge too, but still calls itself local-first because it still supports writing while offline, showing the two tools interpret the same term differently despite similar designs. Developers picking a sync engine can follow these terminology debates as they unfold on daily.dev."}}]}
```

