Show HN: Dolly – A Tribute to "The Birth and Death of JavaScript" A developer released Dolly, a browser-based computing environment presented on Hacker News as a tribute to Gary Bernhardt's talk "The Birth and Death of JavaScript," offering a catalog of applications and packages that run inside the page. The application list includes coding agents such as a closed-source agent that runs Claude Code downloaded from npm, a Codex TUI with shell tools, ripgrep and fd, and a Pi coding agent, alongside a Pi build bundling the Qwen3.5-2B model that installs and switches models via `/local` and requires WebGPU. The package catalog includes `amy`, the package installer, and `dollyfile`, its recipe engine, plus compilers and tools such as `cc`, `cargo`, `cmake`, `binaryen`'s `wasm-opt` and `cbindgen`. | Applications | |---| | bhop ./bhop/ | Airtime: Foundry — strafe trials and scroll jumping. | | | classicube ./classicube/ | Explore and build in a block world, with an optional agent. | | | closed-source-agent ./closed-source-agent/ | runs Claude Code, downloaded from npm into the session after a notice of its terms. | | | codex-agent ./codex-agent/ | Codex TUI with shell tools, ripgrep and fd. | | | default ./default/ | A shell, its text tools, curl, ps, amy, which installs the rest, and nena, which enables the host modules they need. | | | dollyfile-studio ./dollyfile-studio/ | Create images with Pi, local models and Neovim. | | | ghostty-x11 ./ghostty-x11/ | An application: Ghostty's window on Dolly's X server, with Slop and amy in its terminal. | | | gnu-emacs ./gnu-emacs/ | an application that opens straight into Emacs. | | | gpu-fluid ./gpu-fluid/ | Stir liquid ink and volumetric smoke. Requires WebGPU. | | | mojo-gpu ./mojo-gpu/ | a shell that installs mojo in an image that declares gpu@0 , where the kernels of its programs run. Requires WebGPU. | | | neovim ./neovim/ | Neovim with Lua and syntax parsers. | | | pi-agent ./pi-agent/ | Pi coding agent with JavaScript, shell tools, ripgrep and fd. | | | pi-local ./pi-local/ | Pi with the bundled Qwen3.5-2B; /local installs and switches models. Requires WebGPU. | | | pi-phone ./pi-phone/ | Pi for a phone: say what it should do, and tap buttons for the rest. English. | | | rts-arena ./rts-arena/ | Watch a Seven Kingdoms replay or start a vision-model match. | | | slopyard ./slopyard/ | Build machines, haul cargo and compete across a coastal scrapyard. Requires WebGPU. | | | speech-to-text-mic ./speech-to-text-mic/ | Speak, and what the microphone hears is written as text. English. | | | tmux-panes ./tmux-panes/ | an application that opens into tmux with a shell in each of two panes. | | | wine ./wine/ | /wine/ starts the desktop wine desktop ; Shut Down in its Start menu leaves a shell, where wine hello , wine notepad , wine x86emu and wine desktop run. | | | x11-desktop ./x11-desktop/ | an X session: the X server, twm, xclock, xeyes and xterm, with imgui-x11 the SDL2 demo ../sdl2/README.md for xterm to start and amy to install packages. | | | xonotic ./xonotic/ | the client with the release's data, maps and font archives 946 MB under /usr/share/xonotic/data ; /xonotic/ starts xonotic , the client in software at 1024×768, and leaves the shell when it quits. | | | zero-ad ./zero-ad/ | 0 A.D. Release 28: Athens economy and combat scenarios, audio and replay. Requires WebGPU. | | | Packages | | amy | amy , the package installer, and dollyfile , the recipe engine it runs. | | | base64 | base64 Alfred Klomp's and libbase64. | | | bc | the bc and dc calculators Gavin Howard's . | | | binaryen | Binaryen's wasm-opt , for its function-pointer cast emulation --fpcast-emu . | | | boost-headers | Boost's header-only libraries, for programs the cc package builds; it brings no compiler. | | | box3d | libbox3d, the Box3D physics library, for programs the cc package builds; it brings no compiler. | | | bzip2 | bzip2: bzip2 , bunzip2 , bzcat and libbz2. | | | cargo | cargo , built inside Dolly, with the rust package it compiles with. | | | cbindgen | cbindgen , which writes C headers for Rust libraries; SpiderMonkey's configure requires it. | | | cc | cc and c++ with ld , ar and make , and the headers and libraries they compile against. | | | cmake | cmake , with the cc package it configures and builds with. | | | codex | codex , the Codex coding agent with its launcher, and the ripgrep and fd packages. | | | core | the shell slop and its core commands: ls , cat , cp , mv , rm , mkdir , tar , man , help and others. | | | curl | curl and libcurl, over the page's HTTP broker. | | | display | the terminal: the Ghostty display plugin, its font and the termcap entry. | | | dolly-docs | the platform's documents and machine contracts, in /usr/share/doc/dolly . | | | dte | dte, a small full-screen editor with the keys of a desktop one. | | | emacs | emacs , GNU Emacs for the terminal, and etags . | | | esbuild | esbuild , the JavaScript and TypeScript bundler, built by go . | | | fd | fd , which finds files by name. | | | flex | flex 2.5.4 as Thomas Dickey maintains it reflex , which starts no m4, also as lex , with libfl and the yacc package. | | | fmt | {fmt}, a library for programs the cc package builds, by upstream's CMake; it brings no compiler. | | | freetype | FreeType with libpng and zlib, a library for programs the cc package builds, by upstream's CMake; it brings no compiler. | | | ghostty-gtk | Ghostty's GTK application, a package; it needs an X server. | | | git | git over the page's HTTP broker, with diff and patch . | | | glib | GLib, GObject and GIO, with their tools. | | | gmqcc | the QuakeC compiler, compiled from the same release source. | | | go | go and gofmt , the Go toolchain and standard library compiled again inside Dolly by the seed. | | | gzip | gzip -dc , which unpacks a .gz file to standard output; the pigz package writes them. | | | icu | ICU 68.2's common and i18n libraries with their data, for programs the cc package builds; it brings no compiler. | | | imgui | Dear ImGui with its SDL2 and SDL Renderer backends, a library for programs the cc package builds, and imgui-demo , upstream's example. | | | imgui-x11 | upstream's ImGui example as an X client: SDL2 with its X11 video driver alone, drawing on the server DISPLAY names the X11 demo ../x11/README.md . | | | janis | janis , QuickJS with a Node-compatible surface: janis FILE.js runs Node-style programs, and there is no node . | | | janis-install | installs npm packages and what they depend on from the npm registry, with a command for each program they name, run by Janis. | | | jq | jq, the JSON processor, with regular expressions. | | | less | less , the pager; Git and man page through it once it is installed. | | | lfm2.5 | Model package: LFM2.5-2.6B weights, description and license. | | | libdolly-audio | the audio@0 module's header and client library, for programs the cc package builds. | | | libdolly-gpu | the gpu@0 module's header and client library, for programs the cc package builds. | | | libdolly-microphone | the microphone@0 module's header and client library, for programs the cc package builds. | | | libdolly-sockets | the sockets@0 module's header and client library, for programs the cc package builds. | | | libdolly-touch | the touch@0 module's header and client library, for programs the cc package builds. | | | libevent | libevent's core, the event loop with its buffers and listeners, a library for programs the cc package builds; it brings no compiler. | | | libffi | libffi with Dolly's target: calls and closures of signatures known at run time, through dso@0 . | | | libjpeg | IJG libjpeg 9f, a library for programs the cc package builds; it brings no compiler. | | | libogg | Ogg 1.3.5 from upstream's CMake project, a library for programs the cc package builds. | | | libpng | libpng with zlib, a library for programs the cc package builds, by upstream's CMake; it brings no compiler. | | | libsodium | libsodium, a library for programs the cc package builds, its sources compiled as its build.zig does; it brings no compiler. | | | libterminfo | NetBSD's terminfo library with the terminal descriptions it holds, for programs the cc package builds; it brings no compiler. | | | libuv | the libuv port, built by libuv-dolly.mk libuv-dolly.mk , that CMake and Neovim are built on, a library for programs the cc package builds; it brings no compiler. | | | libvorbis | Vorbis 1.3.7 with vorbisfile and vorbisenc from upstream's CMake project, a library for programs the cc package builds; it brings libogg . | | | libxkbfile | X.Org's library of XKB keymap files. | | | libxml2 | libxml2 with zlib, a library for programs the cc package builds, by upstream's CMake; it brings no compiler. | | | llama | dolly-llama , linked on llama-cpp , serving a GGUF over stdin and stdout; it needs gpu@0 . | | | llama-cpp | llama.cpp's libraries with ggml's WebGPU backend over the GPU interface, for programs the cc package builds; they need gpu@0 . | | | llvm | LLVM's tools llvm-objdump , llvm-nm , llvm-ar , opt , llc and others , its libraries, headers and llvm-config , from the tree whose archives the seed's compiler links. | | | llvm21 | LLVM 21 with every default target, Clang and LLD as libraries and headers, and llvm-config , in /usr/lib/llvm21 : what Zig 0.16 links. | | | lua | lua , PUC Lua 5.1, with its library and headers and the LPeg and luv modules, also as static libraries. | | | lz4 | LZ4: lz4 , unlz4 , lz4cat and liblz4. | | | make | GNU make alone, for rules that compile nothing; cc brings it too. | | | mandoc | mandoc , which formats a manual page of man or mdoc macros as text, and text-page , with which a package formats upstream's pages when it is built. | | | meson | Meson, with the python , cc and ninja packages it runs on. | | | minicpm5-2b | Model package: MiniCPM5-2B weights, description and license. | | | mojo | the package that holds the compiler's build: compiled and linked from those archives with the target's patches, with the standard library and the package gpu that it precompiles, what a Mojo object links against libmojo-rt.a , and libmojo-gpu.a , its DeviceContext over WebGPU and the cc package: mojo build NAME.mojo makes a Dolly executable. | | | naga | naga , the wgpu project's shader translator; 0 A.D.'s shaders are translated to WGSL with it. | | | nena | nena , which lists a session's host modules and enables or disables them, where the image declares nena@0 . | | | ninja | ninja Samurai , which Meson and CMake's Ninja generator build with. | | | nvim | nvim , Neovim with its runtime and parsers. | | | ocaml | OCaml 5.5: the bytecode compiler ocamlc , the toplevel ocaml , ocamllex , ocamlyacc , ocamldep , and the standard, unix , str and threads libraries. | | | openal | OpenAL Soft's mixer through its loopback device, built for the 0 A.D. audio path, a library for programs the cc package builds; it brings no compiler. | | | parakeet | NVIDIA's Parakeet TDT-CTC 110M speech model English, 135 MB , which speech-to-text and voice read. | | | pcre2 | PCRE2's 8-bit library, GLib's regular expressions. | | | pi | pi , the Pi coding agent as npm publishes it, with the janis-install , ripgrep and fd packages. | | | pi-dolly | Pi's Dolly extension: the prompt, the dolly skill, Slop for its shell tool, a download tool, settings, theme and pi-key , with the pi , secretenv and dolly-docs packages. | | | pigz | pigz, which writes the .gz files gzip here only reads, and unpigz . | | | pixman | the pixel library the X server draws with. | | | pkgconf | pkgconf, also as pkg-config , which reads the .pc files libraries install; built by its own recipe. | | | posix | grep , sed , sort , find , xargs , awk , sh and the other text and file tools. | | | premake | Premake 5.0.0-beta7 as 0 A.D. bundles it, which generates Makefiles from a project's scripts. | | | protox | protox , a protobuf compiler; Codex is built with it. | | | ps | ps , which lists the processes: PID, parent, state and command line. | | | python | python3 and pip CPython , with the cc package pip builds native packages with. | | | quickjs | qjs and the QuickJS-ng engine as a library -lquickjs , quickjs.h : upstream's own command with its std and os modules, and nothing of Node. | | | qwen3.5-2b | Model package: Qwen3.5-2B weights, description and license. | | | qwen3.5-4b | Model package: Qwen3.5-4B weights, description and license. | | | raylib | raylib 6.0 with its software renderer and a Dolly platform backend: InitWindow shows the frames through display@0 , keys, text and the pointer come from input@0 , GetTime runs. A hidden window, or a program holding the display itself , renders to memory. For programs the cc package builds; it brings no compiler. | | | ripgrep | rg , which searches files by regular expression. | | | rust | rustc and the Rust standard library, built inside Dolly, with the cc package it links through. | | | sbase | the sbase commands the image leaves out: yes , cal , sha1sum , sha512sum , sponge , cols , uuencode and uudecode . | | | sdl2 | libSDL2, which draws in software into Dolly's display, for programs the cc and cmake packages build; it brings neither. | | | sdl2-image | SDL image, which loads PNG, JPEG, GIF, BMP, SVG, QOI and more into SDL surfaces and saves PNG and JPEG, with sdl2 . | | | sdl2-mixer | SDL mixer, which mixes sound effects and plays music WAV, Ogg Vorbis, MP3, FLAC, MIDI with Timidity through sdl2 's audio, with sdl2 . | | | sdl2-ttf | SDL ttf, TrueType text into SDL surfaces through the freetype package, which it brings with sdl2 . | | | secretenv | secretenv NAME PROMPT COMMAND , which reads a secret without showing it into one command's environment. | | | session-recover | session-recover , which copies the files of a saved session file into a new directory. | | | speech-to-text | speech-to-text with the Parakeet model and Silero VAD, for an image that declares microphone@0 . | | | spidermonkey | SpiderMonkey 128.13.0, a library for programs the cc package builds, built inside Dolly with mozbuild, Python, Cargo and cbindgen, which it does not bring. | | | sqlite | SQLite: the sqlite3 shell, and its library and headers for programs the cc package builds. | | | tar | sbase's tar , which writes archives and reads links and pax headers, in place of the one that only unpacks; -z , -j and -J run gzip, bzip2 and xz pigz writes .gz . | | | tmux | tmux, the terminal multiplexer. | | | toybox | toybox's grep and sed , which have grep -r and sed -i , in place of the image's. | | | transcribe | the transcribe.cpp library and its ggml, built with CMake, which speech-to-text and voice link. | | | transfer | download and upload , the page's file exchange. | | | tree | tree, which draws a directory as a tree. | | | twm | twm, the Tab Window Manager. | | | typescript | TypeScript's tsc , run by Janis. | | | unzip | Info-ZIP's unzip and zipinfo . | | | vendor-crates | vendor-crates , which writes the crates.io crates a Cargo project depends on to vendor/ for cargo build --offline : crates.io's index sends no CORS headers a page can use. | | | vi | Neatvi, a small vi and ex that needs no terminal database. | | | voice | voice with the Parakeet model, for an image that declares microphone@0 , touch@0 and pty@0 . | | | wabt | the WebAssembly Binary Toolkit: wat2wasm , wasm2wat , wasm-objdump , wasm-strip and wasm-validate . | | | xclock | xclock, the Athena clock. | | | xeyes | xeyes, the eyes that follow the pointer. | | | xkbcomp | the XKB keymap compiler the X server runs. | | | xkeyboard-config | the keyboard descriptions xkbcomp reads, with the evdev rules. | | | xonotic-shaders | the engine's shader permutations of the normal preset as WGSL in /usr/share/xonotic/shaders , for the client's gpu@0 path: dpshaders.c rewrites the engine's GLSL as naga's GLSL front end reads it and the naga package translates it, in the build. | | | xorg-server | Xsdl, the X server in Dolly's display, with xkbcomp and the keyboard descriptions. | | | xterm | xterm, the terminal emulator for X, with a shell on a pseudo-terminal. | | | xxd | xxd, the hex dump that also reads one back. | | | xz | XZ Utils: xz , unxz , xzcat and liblzma. | | | yacc | Berkeley Yacc, as yacc and byacc . | | | zero-ad-data | A build stage: 0 A.D.'s release data made into what the game reads, inside Dolly with Python, XZ and Naga. | | | zig | zig with its standard library, and the cc package: it emits C -ofmt=c that cc compiles. | | | zig-llvm | zig with its LLVM backend; the LLVM libraries are linked in, so it brings no LLVM. It brings cc for its links. | | | zip | Info-ZIP's zip , with the unzip package, which zip -T starts. | | | zlib | libz: zlib's headers and static library, for programs the cc package builds; it brings no compiler. | | | zsh | the Z shell, with its line editor, completion system and prompt themes, a package. | | | zstd | Zstandard: zstd , unzstd , zstdcat and libzstd. | | | Toolchains | | classicube-build ./classicube-build/ | ClassiCube with the Dolly SDL2 software renderer. | | | cmake-build ./cmake-build/ | CMake bootstrapped on the libuv package. | | | gamedev-sdk ./gamedev-sdk/ | the raylib and box3d packages, Box3D's sources Slopyard compiles them again with threads and SIMD and the float math functions. | | | ghostty-build ./ghostty-build/ | Ghostty terminal build with Zig and its SDK. | | | go-build | the seed with the go package installed over it; the base of every Go build. | | | go-sdk | the seed, staged: Go's GOROOT for dolly/wasm64, cross-built outside Dolly. | | | go-tools ./go-tools/ | interactive shell: system with the go and esbuild packages. | | | gtk-build ./gtk-build/ | A build stage: GTK 4 with its X11 backend and the libraries under it FreeType, FriBidi, HarfBuzz, fontconfig, cairo, pango, gdk-pixbuf, graphene, libepoxy and the rest , as static libraries. | | | llvm-build ./llvm-build/ | a build stage: the seed compiler's libraries, compiled in Dolly. It configures the tree again with those tools and compiles the closure Clang, LLD, the WebAssembly backend: 2,559 units at four jobs. It keeps /usr/lib/llvm-build : the archives, Clang's resource directory and the configured and generated headers. Then, in the same tree, it builds the rest of LLVM and installs it under /usr/lib/llvm for the llvm package; the compiler's archives are kept before, so this leaves the compiler as it is. | | | llvm-cc ./llvm-cc/ | a shell whose cc and c++ are the compiler built in Dolly. On llvm-tablegen , with llvm-build 's /usr/lib/llvm-build copied, it compiles the seed's driver src/compiler.cpp , links the compiler from those archives without its names -Wl,--strip-all , requires the same bytes from it as from the seed compiler for two programs and a sample of LLVM's sources, and installs it for cc , c++ , ld and ar . | | | llvm-tablegen ./llvm-tablegen/ | a build stage. CMake configures the tree inside Dolly; Make builds llvm-min-tblgen , llvm-tblgen and clang-tblgen and runs the TableGen targets the seed compiler's libraries need. It keeps the three tools and /usr/share/llvm-tablegen configured headers and TableGen outputs . | | | llvm21-tablegen ./llvm21-tablegen/ | a build stage: LLVM 21 with every default target, configured by CMake inside Dolly, and its TableGen tools. | | | mesa-build ./mesa-build/ | A build stage: Mesa's OpenGL with GLX over Xlib, drawing with softpipe, and libepoxy taking it from the program, over gtk-build . | | | mojo-llvm ./mojo-llvm/ | a build stage: the LLVM, MLIR and Clang Basic libraries the compiler links, at the revision Mojo pins, with Mojo's one patch to LLVM's code generator, and Zstandard. WebAssembly is the only backend. It keeps /opt/mojo-llvm : llvm-tblgen , mlir-tblgen , the archives and the headers. | | | pi-runtime ./pi-runtime/ | Reusable Pi and Janis runtime. | | | rts-build ./rts-build/ | Seven Kingdoms and its local multiplayer adapter. | | | rust-build ./rust-build/ | rustc, the standard library and Cargo built from source, the kept rustc by the first one built here; the base of every Rust build. | | | rust-llvm ./rust-llvm/ | the LLVM 22 libraries rustc links, built by Dolly's c++ . | | | rust-sdk ./rust-sdk/ | the seed, staged: its compiler and standard library, and its Cargo linked here. | | | rust-tools ./rust-tools/ | interactive shell: system with the rust and cargo packages. | | | system ./system/ | system-tools with saved sessions snapshot@0 , session-recover . | | | system-build | C/C++ compiler, headers and basic build tools. | | | system-tools ./system-tools/ | Shell, display, Git, curl, Make and POSIX tools. | | | tools-build ./tools-build/ | A build stage: cmake-build with the core's mandoc , what these packages are built on. | | | wine-build ./wine-build/ | the build. Wine's widl , wrc , wmc and winebuild , then 16 DLLs ntdll , kernel32 , advapi32 , gdi32 , user32 , version , usp10 , imm32 , comctl32 , comdlg32 , shell32 , shlwapi , shcore , uxtheme , winspool.drv , msvcrt , the display driver winedolly.drv , the programs and wineserver , linked as /usr/bin/wine on system-tools with the FreeType that zero-ad-deps built. Wine's source as built stays under /usr/src/wine , the port under /usr/src/dolly/wine . The build ends by running TinyCC's x86-64 compiler under x86emu to make the Start menu's x86-64 sample. | | | x11-build ./x11-build/ | A build stage: X's client libraries, from the protocol headers and libxcb to the Athena widgets, as static libraries. | | | xonotic-build ./xonotic-build/ | the dedicated server xonotic-dedicated and the SDL client xonotic-sdl , compiled from the pinned release source with cc , c++ and Make on system-tools with the sdl2 and gmqcc packages; the engine and qcsrc stay under /usr/src/xonotic , and make -f /usr/src/dolly/xonotic/Makefile qc compiles progs.dat , csprogs.dat and menu.dat into /tmp/xonotic/build/qc . | | | zero-ad-deps ./zero-ad-deps/ | A build stage: the engine's libraries from their packages, ENet with Dolly's transport, pkgconf and SDL2. | | | zero-ad-engine ./zero-ad-engine/ | A build stage: the 0 A.D. engine built inside Dolly with Premake and Make. | | | zig-build | Zig built from source by the C/C++ compiler; emits C. | | | zig-llvm-build | build-only; zig1 compiles the compiler to C and cc compiles that. | |