April 24, 2026

Tar Wars: Unzip Drama in Your Browser

Mounting tar archives as a filesystem in WebAssembly

Skip unzipping in the browser — and watch the comments explode

TLDR: A tiny index lets the browser peek inside a .tar.gz without fully unzipping, making WebR packages load faster. Commenters are split between praising the hack, arguing it still reads everything anyway, and insisting on purpose-built formats like SquashFS.

A clever new trick lets the browser treat a big zipped bundle like a regular folder, no full unzipping needed. Devs behind WebR (R programming in the browser) use a tiny map to jump straight to files inside a .tar.gz, speeding up package loads. The code and demo are here: tar-vfs-index. Sounds neat, right? Oh boy, the comments said: hold my tarball.

Fans cheered the practicality and dropped links to similar toys like Ratarmount, which also gives random access inside tar files. But purists rolled in with “use a real read-only filesystem” energy, pushing formats like SquashFS and cramfs — translation: stop the hacks and use tools built for this. Then came the hard truth crowd: one top commenter argued this doesn’t solve the “read-only part of a gzipped file” problem and can still mean slurping the whole thing into memory. Their vibe: if you’re reading it all anyway, just extract it.

Meanwhile, the thread went gloriously weird. One dev bragged about serving files from a tarball hidden inside a PNG because their host banned tar files (yes, really) at this site. Another wanted to try it with BTFS to mount torrents as folders. The mood: practical speed hack vs. standards sticklers vs. delightful chaos gremlins.

Key Points

  • A JSON index of file offsets and sizes enables mounting .tar archives directly via Emscripten’s WORKERFS without copying data.
  • This optimization powers WebR, allowing all R packages to be distributed as standard .tar.gz files on static servers while loading faster.
  • The index format matches Emscripten’s file_packager metadata, avoiding repacking since tar files already have fixed offsets.
  • The tar-vfs-index npm tool generates the required JSON index from tar or tar.gz inputs, including byte ranges and package size.
  • For .tar.gz, the archive is decompressed in-browser using DecompressionStream to produce a tar Blob, which is mounted with the JSON index.

Hottest takes

"you’re still reading the whole file into memory, so why not just extract the files properly" — phiresky
"How about using a format that has actually been designed to be a compressed read-only filesystem?" — Ecco
"loading the files from a tar archive that is encoded into a PNG" — Lerc
Made with <3 by @siedrix and @shesho from CDMX. Powered by Forge&Hive.