Keep working without a round trip
A local-first interface can respond from local state when a device is in the field, moving between networks, or temporarily offline. Connectivity becomes the way work travels, not a prerequisite for doing the work.
Local-first data over storage you choose
Interocitor keeps structured data on trusted devices, syncs independent changes when connectivity returns, and carries documents and media as durable files. With a key source, payloads are encrypted before remote storage receives them.
Why Interocitor
Server-owned state is convenient, but it turns network outages into product outages and puts database operators inside the plaintext trust boundary. Interocitor splits synchronization from storage: trusted endpoints merge changes; the remote stores and moves them.
Responsibility split with a non-null key source
A local-first interface can respond from local state when a device is in the field, moving between networks, or temporarily offline. Connectivity becomes the way work travels, not a prerequisite for doing the work.
A provider can retain and serve encrypted artifacts without needing the final decryption key. This narrows the confidentiality boundary and makes a storage dump materially less revealing than a plaintext application database.
The same application model can use a Cloudflare mailbox, a user’s Google Drive, a WebDAV server or home NAS, or a custom adapter. The storage decision can follow the product’s deployment, ownership, and operational needs.
See it in action
One model covers application state that changes, files that must stay exact, and trusted workers that need to participate without exposing their work to storage.
01 Local-first application
Use two familiar TodoMVC clients side by side. A live in-page filesystem exposes the exact manifest, device, head, and change files without asking the visitor to provide storage or run a backend.
const memory = new MemoryAdapter();
const left = createDatabase('client-1');
const right = createDatabase('client-2');
await left.table('todos').add({
title: 'Ship it', done: false
});
await left.flush();
await right.pull();
02 End-to-end encrypted chat
Alice and Bob share a mesh key and exchange message rows through an inspectable in-page mailbox. The application deletes messages older than the newest fifteen, synchronizes the tombstones, and compacts covered history.
15 newest messages remain visible on both clients.
03 Collaborative board
Maya and Noah add and move cards independently, then exchange encrypted row changes through the in-page mailbox. Their boards converge without asking the mailbox to understand columns, cards, or conflicts.
04 Protected family location
Two devices share encrypted latest-known location rows while the mailbox sees no place names or coordinates. The five-second demo cadence keeps both views current; broad key-holder access, consent, revocation, and emergency reliability remain product responsibilities.
Latest known is not live or emergency-safe.
05 Private file share
Let storage do what it is good at—retain and deliver files—without giving it the document contents. Interocitor encrypts bytes before the adapter receives them, then another paired endpoint decrypts the same object.
await db.putFile(path, bytes, file.type);
const copy = await db.getFile(path);
File calls use the remote directly, so transfers need connectivity. Object paths, sizes, timing, and request identity can still be visible to the storage operator.
06 Agent workflow
A product writes a task row. An authorized agent endpoint observes it, does the work, and writes result rows or files back into the same mesh. Both endpoints can keep their own working state; the mailbox only exchanges encrypted artifacts. Work that must happen once needs an application-owned claim, lease, or safe retry rule.
What that means in practice
A plain-language view of the promises—and the trade-offs.
Picture two people changing the same shared workspace from different devices. One is offline on a train; the other is connected at home. Each can keep changing local rows. When their devices can reach the mailbox again, they exchange encrypted changes and arrive at the same result without asking the mailbox to choose a winner.
The mailbox is important, but deliberately unhelpful: it stores and returns protected artifacts without receiving the final key or interpreting the row data inside them. It can still see operational metadata—names, sizes, timing, request identity, and device identifiers—and it can still lose, withhold, or roll back what it stores.
That is why local-first and encrypted do not mean consequence-free. Row work survives offline only when the app uses durable local storage; durable-file calls still need a connection. A lost key needs recovery prepared in advance, a copied key requires a new database and key for full revocation, and important data still needs tested backups.
Read the simple questions and honest answersWhy local convergence matters
Trusted devices can change local rows without first acquiring a server lock or waiting for a leader. Interocitor’s structured data model lets those devices converge after they exchange encrypted changes.
Follow a change through the complete sync loopTwo data surfaces
Application state and file content need different promises. Treating them honestly avoids forcing large binary objects into a merge model or pretending remote files have the same offline behavior as local records.
Structured rows
Use rows for the facts an application reads, changes, and reconciles across devices—titles, statuses, notes, relationships, and other structured state. Reads and writes use the application’s local store, so the product can remain responsive without a live remote.
Durable files
Use files when the bytes themselves must remain intact. They are encrypted before storage, but they are not merged as records. File calls need the remote, which makes their availability boundary explicit instead of hiding it.
Bring your own cloud
Storage is part of a product’s trust, cost, portability, and recovery story. Some teams want an operated Cloudflare deployment. Some want data in a user-controlled Google Drive account. Others prefer WebDAV on infrastructure they already own.
Interocitor keeps those choices behind the same storage role. Changing the operator does not require moving plaintext merge logic into that operator’s environment.
The actual trust boundary
With a non-null key source, row payloads, snapshots, durable-file bodies, and recovery-wrapper contents are encrypted before the remote adapter receives them. The final decryption keys and usable plaintext remain at trusted endpoints.
The remote still observes operational metadata such as object names, sizes, timing, request identity, mesh identifiers, and device identifiers. It can also withhold, delete, or roll back stored data. Interocitor protects payload confidentiality and entry integrity; reliable storage and backups still protect availability.
See the illustrated trust boundary for the path from trusted endpoints through remote storage.
Choose the next decision
Interocitor changes where plaintext, working state, availability, and processing live. Follow the question you control before reaching for package configuration.
Before choosing the architecture
A local-first encrypted mesh changes several product responsibilities. These are the questions worth answering before implementation details.
A client, worker, or AI agent with the mesh key is a trusted endpoint. It can process the row database, so use separate databases and keys when work needs a smaller trust boundary.
Recovery must be prepared before loss. Another trusted device or a previously published recovery wrapper can restore access; without either, encrypted data is unreadable.
Removing remote access does not erase a key that was already copied. Full revocation requires a new mesh and key, which should be part of the product’s incident plan.
Encryption cannot recreate deleted objects. Important deployments still need provider version history or an independent copy, plus a restore path that has been tested.