postgres-wasm
postgres-wasm copied to clipboard
Implement 9p protocol against a local storage (IndexedDB, FileSystem API)
To have persistent sessions and files, we need to be able to write file changes to local storage in the browser.
As of today, we have two solutions:
- IndexedDB
- FileSystem API
An implementation already exists for IndexedDB: https://github.com/humphd/v86/tree/filer-9p-lastknowngood
The demo: https://humphd.github.io/browser-shell/
The 9p filesystem is mounted under /mnt
in this case.
The difficulty we'll have is that we have 9p mounted as /
in our case (all files are statically served), so I think we'll have to make a custom implementation where we will check if the file is available in IndexedDB, and if it's not we will fallback to the statically served file.
So we'll have a hosted layer (the current implementation), with a cached layer in-between.
Links about the 9p protocol:
- https://github.com/chaos/diod/blob/master/protocol.md
- http://9p.io/magic/man2html/5/0intro
- https://web.archive.org/web/20170601065335/http://plan9.bell-labs.com/sys/man/5/INDEX.html
Is it not possible to mount two 9p filesystems at different mount points, one static and one for indexedDB?
Is it not possible to mount two 9p filesystems at different mount points, one static and one for indexedDB?
I'm not sure about that, we'll have to ask Fabian.
Even if you do this, we'll have to switch from one implementation to the other somehow.
You may want to investigate the Origin Private File System. FYI, the SQLite team are looking into this as well for their upcoming Wasm port.