Offline-First Design

BoxOwl is built around an offline-first architecture. Your vault lives on your device first, and the cloud is treated as a sync target, not the primary source. This means:

All local data is stored in an encrypted SQLite database using SQLCipher 4.5.4 with 256-bit AES transparent encryption. The encryption key is derived from your credentials and never leaves your device.

Delta Sync

When you are online, BoxOwl syncs only what changed. This is called delta sync. Instead of uploading your entire vault on every connection, the app sends a compact patch containing only the modified fields.

Delta sync reduces bandwidth, preserves battery, and completes in seconds even on slow connections. The sync payload is compressed and sent over TLS 1.3.

Sync Queue

Changes made while offline are placed in a local sync queue. Each entry records:

When connectivity returns, the queue is drained in order. If a sync attempt fails (e.g., server error or timeout), the entry stays in the queue and is retried automatically.

You can view the number of pending changes on The Perch. If the count seems stuck, use Pull-to-Refresh or go to Settings > Sync > Force Sync Now.

Conflict Resolution

If you edit the same item on two devices before either syncs, a conflict can occur. BoxOwl resolves conflicts using last-write-wins based on the server timestamp:

If you need to preserve both versions, the recommended approach is to export your vault as JSON before making large edits on a second device.

Automatic Background Sync

BoxOwl attempts to sync automatically in the background every 15 minutes while the app is open. It also syncs immediately when:

Manual Sync Controls

Go to Settings > Sync to access manual controls:

ControlWhat It Does
Force Sync NowImmediately pushes pending changes and pulls the latest server state
Last SyncedShows the timestamp of the most recent successful sync
Pending ChangesShows the number of operations waiting to be sent
Sync on Wi-Fi OnlyWhen enabled, prevents sync over mobile data

What If Sync Keeps Failing?

If you see a persistent "Sync failed" message in the activity feed:

  1. Check your internet connection.
  2. Verify that your JWT session has not expired (log out and log back in if needed).
  3. Try Force Sync Now from Settings.
  4. If the problem persists for more than 24 hours, export your vault as a JSON backup and contact support.

Your local data is safe regardless of sync status. Nothing is lost if the server is temporarily unreachable.

← Back to Docs