RuntimeFS banner

RuntimeFS

10 devlogs
26h 6m 43s

RuntimeFS is an IndexedDB and ServiceWorker file-system, served in your browser with offline functionality (like a localhost).

This project uses AI

Used AI to help to debugging obscure errors/edge cases near the end of the project, reducing debugging cycles. Used free online APIs for Gemini 3 Pro/Claude 4.5 Opus.

Demo Repository

Loading README...

e

Shipped this project!

Hours: 26.06
Cookies: 🍪 559
Multiplier: 26.59 cookies/hr

Finally finished this iteration of RuntimeFS! Although StreamSaver was too complicated to implement in time, I’m still really happy that I managed to make some behind-the-scenes improvements.

Hoping the idea of a localhost in the browser is super interesting and practical, I’ve probably used this project for well over 50-100 hours to program and play games :D

e

Fixed some issues where the UI would sporadically break that had been bothering me for a while now. Project should finally be stable enough.

Shown in screenshot: also learned PvZ Gardendless works on Chromium now and started playing it a lot! There’s a lot of peak things you can easily do with RuntimeFS.

Attachment
0
e

Performed even more fixes and added a new clearData feature to LittleExport! Also got rid of onsuccess entirely in favor of…just returning the blob from await? (Not sure how I didn’t think of that lol)

Next I’ll hopefully be able to start working on implementing StreamSaver to LittleExport to allow non-Chromium browsers to still export large amounts of data (and not be stuck with just being able to import).

Attachment
0
e

Just applied even more changes; now the logs from outputting are finally fully fixed with no funny numbers! Also fixed some edge cases in LittleExport. I think this project might finally be fully complete :D

[Attached: README shows just how many options there are with LittleExport!]

Attachment
0
e

Added a bunch of new stuff!

  • LittleExport now uses PAX (still USTAR) to allow for huge file sizes and unlimited file name sizes
  • Fixed more RAM-consuming issues
  • Improved performance of CBOR for importing/exporting by using custom cbor-x flags
  • Made file uploading better and faster
  • Made logs and errors more consistent across the codebase
  • Fixed a few crashes

Attached image shows a small portion of the in-house result of unsafeObjectToReadableJS, an optional new way to “encode” instead of using CBOR. It literally converts a complex JS object into an async function string generator, while supporting many sophisticated types.
This makes data such as from IndexedDB much more readable; see documentation here: https://github.com/plasma4/LittleExport

Attachment
0
e

A few small cleanup changes here and there; MB is now 1000000 instead of 2^20, added per-file logging, and fixed a few sources of crashes.

[Attached image: you can explore the exported data and even upload files from the rfs/ folder back into RuntimeFS! This acts as a cheeky way to let you mess around with files and extract lost data. Exporting data effectively acts as a snapshot back in time, and it’s really interesting to see all the local data you’ve built up over time.]

Attachment
0
e

Shipped this project!

Hours: 10.74
Cookies: 🍪 34
Multiplier: 3.2 cookies/hr

Fixed all the bugs (hopefully) that plagued the codebase, and made LittleExport easier to use with better documentation. Overall quite happy with how the project looks. Hardest challenge was figuring out the bugs by far, but I’m happy that I could make a practical and niche project that others might be able to use!

e

The features work now, and everything is quite performant! I think I’m basically done with the project. See the LittleExport repo at https://github.com/plasma4/LittleExport

Uploaded is an example of what you can do with RuntimeFS; I got terraria-wasm working with custom headers.

Attachment
0
e

Just fixed some issues with performance when importing a large .enc file in the GBs! Now, it’s time for me to tackle recursive crawling for LittleExport. The idea is to allow users of LittleExport, one of the components of RuntimeFS, to be able to more specifically choose what to export, all in a performant and unified manner.
Image attached shows the basic gist of things.

I’ll eventually add this to RuntimeFS to allow users to choose what to export (and maybe import), live with the async functionality, and also object presets to allow people to “export” their previous choices. This way, I don’t have to send 3GBs of data of my Terraria-WASM and other games every single time!

Attachment
1

Comments

jmw
jmw about 2 months ago

this seems really cool!

small note: on voting, the banner is cropped to a square for some reason, so the nice image you made mostly won’t show up there. do with this information whatever you want. also again, looks quite good!

e

Fixed drag-and-drop and made errors more consistent (so now they’ll use the same logging system, and will all reset the UI).

Attachment
0
e

Did a bunch of stuff!
Changed UI to use a more chill blue-ish theme to be easier on the eyes
Improved performance of a bunch of things, like exporting, importing, adding new folders
Fixed a bunch of failing edge cases
Documentation is a little more clear now
Also added hiding of non-supported buttons for some browsers and added a new feature to the plugin tool to clear the cache directly

Attachment
0
e

Shipped this project!

Hours: 3.49
Cookies: 🍪 100
Multiplier: 28.54 cookies/hr

Fixed a bunch of bugs and also improved performance of RuntimeFS, which I’ve worked on previously. Hopefully the last update necessary!

e

Just fixed a few edge case bugs with the code, improved performance, and cleaned up the code in general. No longer crashes when exporting!

Also made regex replacement MUCH easier for scripts by adding a custom {{SCRIPT}} text option, which automatically inserts at intelligently at the start of head, body, or HTML.

Attachment
0