Series · 11 parts · 8 coming soon

Offline-First KMP

When your mobile app must work without internet as a standard, not an edge case, the sync layer is just the first decision. What comes after — preserving user intent offline, trusting a "success" your server never actually confirmed, resolving conflicts as a human decision — is where offline-first actually gets hard. Field notes from a production KMP winery app.

Cover Image for Offline-First KMP
  1. 1Choosing an offline-first sync layer for KMP
  2. 2Two writes for every tap
  3. 3Minting IDs Before the Server
  4. 4The Write You Never Clean Up
  5. 5HTTP 200 Is Not Success
  6. 6Your Schema Is Not Your Payload
  7. 7You Cannot Fix a Generated File
  8. 8Every Synced Row Needs an ID
  9. 9Your Sync Stack Fits in Three Containers
  10. 10HTTP 500 Is Not a Retry
  11. 11Witness, Not Judge

Coming Soon

Already written and on their way. If a published part mentions one of these, this is where it lands. Follow along on LinkedIn or the RSS feed to catch each one as it ships.

  1. 12A Shared ID Must TravelWhy the server rejected a wine that plainly existed: the root cause promised in Part 5.Coming soon
  2. 13A Version Bump Is Not a ConflictAuto-resolve fits in one clean line. Here is everything that clean line hides.Coming soon
  3. 14Not Everything Deserves a LedgerWe event-source the entities whose history is the product. The interesting category is the one in between.Coming soon
  4. 15Shared Logic Is Not Free"One module, three runtimes" is true for the rules. It is not free at the type boundary.Coming soon
  5. 16Make Drift a Compile ErrorAuto-resolve trusts a hand-written list of what each event changes. Hand-written lists rot.Coming soon
  6. 17Events Read More Than They WriteOur conflict resolver got archived entities right for a reason nobody designed, and wrong everywhere else.Coming soon
  7. 18Blocked Is Not IgnoredWe wrote the missing rule, put it in the right layer, and still got it wrong the first time.Coming soon
  8. 19Unsent Is Not SavedEvery promise an offline-first architecture makes about your data begins when the server has it.Coming soon