postgres-wasm icon indicating copy to clipboard operation
postgres-wasm copied to clipboard

Implement 9p protocol against a local storage (IndexedDB, FileSystem API)

Open jgoux opened this issue 2 years ago • 3 comments

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

jgoux avatar Sep 12 '22 09:09 jgoux

Is it not possible to mount two 9p filesystems at different mount points, one static and one for indexedDB?

burggraf avatar Sep 12 '22 12:09 burggraf

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.

jgoux avatar Sep 12 '22 18:09 jgoux

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.

tomayac avatar Oct 03 '22 15:10 tomayac