TodoMVC × Interocitor
Up to three clients. One memory mesh.
Add, edit, complete, or delete a task on either side. The middle pane exposes the exact manifest, device, head, and change files written as the clients converge—without a backend. Add a third client, then disconnect any client to watch local work wait for reconnection.
Mesh size
QA a three-client mesh
Spawn another independent client, then disconnect and reconnect any panel.
Double-click a task to edit it.
Try changing the same task from this side.
Keep this client offline while the other two exchange changes.
Local data boundary
Interocitor is the data layer, not a hosted service.
Each TodoMVC client owns an independent MemoryLocalStore. A shared in-page
filesystem carries their artifacts so you can inspect the exact files while the clients
converge. A real application chooses persistence, encryption, and remote transport only
when its product needs them.
The minimal shape
Illustrative excerpt: stores, key custody, and connection setup are omitted. The linked TypeScript source is the complete runnable demo.
const schema = {
tables: {
todos: {
fields: {
id: types.string,
title: types.string,
done: types.boolean,
createdAt: types.index(types.number)
}
}
}
} satisfies DatabaseSchemaDefinition<DB>;
const todos = db.table("todos");
await todos.put(id, { id, title, done: false, createdAt: Date.now() });
await db.flush();
await peer.pull();
Read the full TodoMVC source →