IndexedDB
The browser’s actual database.
IndexedDB is what you reach for when localStorage isn’t enough: keyed object stores, real transactions, and no size limit worth worrying about. Every browser has had it for years, which matters when you’re aiming at machines that stopped getting updates.
Napkin keeps every sheet in it, and nothing goes to a server. That’s the point of the thing.
Owl’s browser build uses it as the durable store for an entire project, path-keyed exactly the way git sees a tree, so 01_intro.md is the key. It won over OPFS on three counts: there’s no std::fs on wasm anyway, so “run the project code unmodified” was never on offer; OPFS can’t rename directories, and Owl renames them constantly; and one IndexedDB transaction per tree mutation is stronger atomicity than the native apps get from a filesystem.