How Offline-First Sync Works in Splitorium

The technology behind an expense app that works anywhere — even without internet

Picture this: You're on a camping trip in the middle of nowhere. Zero cell signal. Your friend just paid for firewood, and you need to track who owes what.

With most expense apps, you're stuck. "No internet connection." "Please try again later." Your expense gets forgotten, and the math gets messy.

With Splitorium, you just add the expense. It saves instantly. When you're back in civilization, everything syncs automatically.

The best expense app is the one that works when you need it — not just when you have WiFi.


The Problem with Online-Only Apps

Most expense splitting apps (including the popular green one) work like this:

  1. You tap "Add Expense"
  2. You enter the details
  3. The app sends data to the server
  4. The server saves it and responds
  5. The app shows success

What happens if step 3 fails because you're in a subway tunnel? Nothing saves. Your expense is lost.

Scenario Online-Only Apps Splitorium
Camping trip (no signal) ❌ "No connection" error ✅ Works perfectly
Airplane mode flight ❌ Can't add expenses ✅ Add expenses offline
Subway/Underground ❌ Spinner forever ✅ Instant save
International travel (roaming off) ❌ Useless without WiFi ✅ Full functionality
Spotty restaurant WiFi ❌ "Failed to save" ✅ Syncs when stable

How Splitorium's Offline-First System Works

Splitorium flips the traditional model. Instead of "send to server first," it's "save locally first, sync to server later."

The Local-First Architecture

When you add an expense in Splitorium:

  1. Instant local save: Your expense is immediately written to your device's local database
  2. UI updates immediately: You see the expense in your list within milliseconds
  3. Operation queued: The change is added to a sync queue
  4. Background sync: When online, the queue is processed automatically
  5. Confirmation: Server acknowledges, IDs are reconciled
┌─────────────────────────────────────────────────────┐ │ YOUR DEVICE │ │ │ │ 📱 You tap "Add Expense" │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────┐ │ │ │ LOCAL DATABASE │ │ │ │ • Saves instantly │ │ │ │ • No network needed │ │ │ │ • Your data, your device │ │ │ └─────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────┐ │ │ │ SYNC QUEUE │ │ │ │ • Operations queued │ │ │ │ • Survives app crashes │ │ │ │ • Retries automatically │ │ │ └─────────────────────────────────┘ │ │ │ │ │ ▼ (when online) │ │ 📡 Syncs to Splitorium Server │ │ │ └─────────────────────────────────────────────────────┘

Why This Is Better

Benefits of Offline-First

  • Speed: UI responds in milliseconds, not seconds
  • Reliability: Your data is safe even if the server is down
  • Battery life: No constant network polling
  • Works anywhere: Mountains, planes, subways, international trips
  • No data loss: App crashes? Your changes are still saved locally

Smart Sync: The Magic Behind the Scenes

Splitorium's sync system is more sophisticated than just "upload when online." Here's what makes it special:

1. Operation Coalescing

If you create an expense offline, then edit it three times before going online, Splitorium doesn't send four separate operations. It merges them into one optimized request.

This means:

  • Less battery usage
  • Faster syncing
  • No redundant server load

2. Dependency Resolution

Imagine you're offline and you:

  1. Create a new group "Camping Trip"
  2. Add an expense to that group
  3. Edit the expense

Splitorium is smart about this. It knows the expense can't sync until the group exists on the server. So it:

  1. Syncs the group first
  2. Gets the real group ID from the server
  3. Updates the expense with the real ID
  4. Syncs the expense

All automatically. You don't have to think about it.

3. Conflict Resolution

What if you edit an expense on your phone while your roommate edits the same expense on their phone?

Splitorium uses a simple, predictable strategy: server wins. Whichever edit reaches the server first becomes the "official" version. The other device gets updated to match.

Why not fancy three-way merging? Because for expense tracking, simplicity beats complexity. You'd rather have predictable behavior than a merge UI that asks "keep yours or theirs?"


How Splitorium Compares to Splitwise

Splitwise is the most popular expense splitting app. But it was built in 2011, before "offline-first" was a common pattern. Here's how the architectures compare:

Feature Splitorium Splitwise
Add expense offline ✅ Yes ❌ No
Edit expense offline ✅ Yes ❌ No
Create group offline ✅ Yes ❌ No
Record payment offline ✅ Yes ❌ No
Data survives app crash ✅ Always saved locally ❌ Lost if not synced
Speed ✅ Instant (local save) ❌ Depends on network
Price ✅ Free ❌ $40/year for full features

Technical Deep Dive

For the curious developers, here's what's happening under the hood:

Native Architecture

Splitorium isn't a web app wrapped in a mobile shell. It's built with native Swift (iOS) and native Kotlin (Android), with dedicated local databases on each platform.

  • iOS: SQLite with custom sync layer
  • Android: Room database with sync layer
  • Backend: Go (Golang) with PostgreSQL

Cursor-Based Sync

Splitorium uses cursor-based sync rather than timestamp-based. Each record has a monotonically increasing sequence number. When syncing:

  1. Device sends: "Give me all changes after cursor 12345"
  2. Server responds with changes and new cursor
  3. Device stores new cursor for next sync

This approach is more reliable than timestamps because it handles edge cases like clock drift and server time discrepancies.

Bidirectional Sync

Sync runs in both directions:

  • Outbound: Local changes → Server (triggered immediately when online)
  • Inbound: Server changes → Local (runs on a 15-second interval)

This means multiple devices stay in sync, and you see your roommate's expenses within seconds.


Real-World Scenarios Where This Matters

  • Week-long camping trip with no signal
  • International travel with expensive roaming
  • Long flights in airplane mode
  • Road trips through remote areas
  • Festivals/concerts with overloaded networks
  • Subways and underground venues
  • Budget-conscious travelers saving data
  • Cruise ships with expensive/no WiFi

Try It Yourself

The best way to understand offline-first is to experience it. Download Splitorium, put your phone in airplane mode, and add some expenses. Then turn airplane mode off and watch everything sync automatically.

It's the expense splitting app that works the way expense splitting should work — everywhere, every time.