snaplet / postgres-wasm

A PostgresQL server running in your browser
MIT License
2.32k stars 73 forks source link

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

Open jgoux opened 2 years ago

jgoux commented 2 years ago

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:

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:

burggraf commented 2 years ago

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

jgoux commented 2 years ago

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.

tomayac commented 1 year ago

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.