Connections fail. Trains go into tunnels, the school car park has no signal, the home broadband sulks. Shoal now handles all of that quietly: you can open the app, read recent conversations, and write messages with no connection at all, and everything reconciles when you come back.
Reading offline, without weakening anything
The obvious way to make an app work offline is to stash a readable copy of everything on the device. The catch, for us, is that “readable copy” usually means “decrypted copy sitting in plaintext,” which is precisely the thing we don’t want lying around.
So the offline cache holds what your device is already entitled to read, in the form it’s already allowed to hold it. Conversations, members, and messages are kept in a local database, and where we cache decrypted message text for speed it’s because that device could decrypt it on demand anyway — we derive the conversation key from the wrapped key already stored for you, rather than reaching out to the network to be told what you can read. Nothing in the cache is something the device couldn’t already open.
Writing offline: the outbox
Messages you write with no connection don’t fail and vanish. They go into an outbox and pick up a status you can actually see: queued while there’s no signal, sent once it reaches us, received when it lands on the other device, and read when someone opens it. When you come back online the outbox drains in order, and live updates merge cleanly into whatever you’d cached, so you don’t get duplicates or a jarring reshuffle.
The quiet amber banner
We went back and forth on how to tell you that you’re offline. An earlier version floated a little pill over the screen, which turned out to be both easy to miss and slightly nagging. What shipped is a calm amber banner inline at the top — present enough that you understand why a message is sitting as “queued,” restrained enough that it isn’t shouting. We also taught the app to fall back to its own screen when offline, so you never hit the browser’s grey “you’re not connected” interstitial inside an installed app.
Some honest limits
Offline means offline: you can read what you’ve already got and queue what you write, but you can’t pull down brand-new messages, start a call, or fetch media you’ve never opened until you reconnect. The cache lives only on that device and is wiped if you clear local data, which is exactly what you’d want before handing a device on.
How this fits with everything else
The outbox carries every kind of message — text, voice notes, reactions — and the statuses apply to all of them. Push notifications still wake the device when one arrives. The security page covers what’s stored, encrypted, and where.
Try Shoal, then turn on flight mode and see how it feels — and tell us at [email protected].