# pac9 curated package registry. # Columns are TAB-separated: nameurlsubdirrecipedepsversion # subdir '.' = repo root # recipe '-' = default detection (mk install if the mkfile has that target) # deps optional 5th column: space-separated package names installed # first if not already present (omit or '-' for none) # version optional 6th column: the current version. If given, the release URL # MUST embed it (…/download/-v/…) so the URL is immutable # — a tag you can overwrite is not a version. Enables `pac9 outdated` # and `pac9 upgrade`. Entries without one still work; they read as '-' # and upgrade only via an explicit `pac9 install`. # NB: to give a version you MUST give deps too ('-' if none) — a blank # 5th column would make the 6th ambiguous. # Unknown names fall through to being treated as a git URL, so this file # only needs entries for packages that want a short name or a custom build. # netsurf https://github.com/netsurf-plan9/nsport . fetch clone http; mk; mk install # Prebuilt cross-ports. url '-' = no repo to clone; `tarball ` tells # pac9 to fetch a release tarball (paths inside are amd64/bin/... and # sys/lib/...), record its file list, and unpack it at /. These build from # vendored upstream that isn't cloneable, so we ship built artifacts. # zig9 — the Zig 0.14.1 compiler running NATIVELY on 9front (CBE+cc9 bootstrap): # amd64/bin/zig9 + sys/lib/zig9/lib + rc/bin/zig wrapper. `zig build` / # `build-exe` / `run` / `test` all work on-box (build.zig projects incl. -D # options; the runner spawns child compilers over pipes). ReleaseFast/ # ReleaseSmall only; no f16/f80/f128 soft-float or @cImport in target programs. zig9 - . tarball https://github.com/Alino/agent9/releases/download/zig9-v0.14.2/zig9-amd64.tar.gz - 0.14.2 python9 - . tarball https://github.com/Alino/agent9/releases/download/python9-v0.2.0/python9-amd64.tar.gz - 0.2.0 node9 - . tarball https://github.com/Alino/agent9/releases/download/node9-v0.2.1/node9-amd64.tar.gz - 0.2.1 # cc9: on-box C++ toolchain (cc -> clang -> ld.lld -> elf2aout). Self-contained. cc9 - . tarball https://github.com/Alino/agent9/releases/download/cc9-v0.2.2/cc9-amd64.tar.gz - 0.2.2 # pi9: prebuilt tarball has amd64/bin/pi9, rc/bin/new-pi9, sys/lib/tls/ca.pem. # It renders through a vts session, so it depends on vts + vtwin (5th column, # pulled in automatically). pi9 - . tarball https://github.com/Alino/agent9/releases/download/pi9-v0.1.1/pi9-amd64.tar.gz vts vtwin 0.1.1 # go — the real Go toolchain (upstream go1.26.0, plan9/amd64 is a supported # upstream port; no patches). Cross-built once with Go's own bootstrap.bash, # installed under /sys/lib/go + /rc/bin/{go,gofmt} wrappers. First `go build` # compiles the stdlib packages it needs into $home/lib/cache, so it's slower # than the following ones. go - . tarball https://github.com/Alino/agent9/releases/download/go-v1.26.0/go-amd64.tar.gz - 1.26.0 # rust9 — the real rustc (1.98-dev, cranelift backend) self-hosted on 9front: # compiler + std sysroot + n9link linker + cargo9, all in one tarball (~80 MB # download, ~210 MB installed under /usr/glenda/rust + /rc/bin wrappers). # Self-contained: bundles its cc9 runtime substrate, no other package needed. rust9 - . tarball https://github.com/Alino/agent9/releases/download/rust9-v0.2.0/rust9-amd64.tar.gz - 0.2.0 # gl9 — OpenGL 3.3 for 9front. gl9win is the native libdraw window server (builds # on-box); gl9 is the prebuilt tarball of cross-compiled GL demos + the `gl9` # launcher, depending on gl9win. `pac9 install gl9` then `gl9 cube`. # 0.2.0 carries BOTH rasterizers and picks at runtime: llvmpipe (~15x faster) on a # wxallow/W^X kernel, softpipe on a stock one. That costs size — 9front has no # dynamic linking, so each binary statically links all of LLVM (~43 MB tarball vs # 6.9 MB at 0.1.0). `pac9 changelog gl9` has the numbers and the tradeoff. gl9win https://github.com/Alino/agent9 gl9/port/plan9/win - gl9 - . tarball https://github.com/Alino/agent9/releases/download/gl9-v0.2.1/gl9-amd64.tar.gz gl9win 0.2.1 # alacritty9 — real upstream Alacritty 0.17.0 (GPU terminal) on 9front: the # cross-compiled binary (rust9 + Mesa softpipe + OSMesa EGL statically linked, # fonts bundled) + gl9win2, the interactive native window host. Self-contained # (~5 MB download / ~19 MB installed). Run `alacritty9` from a rio window. alacritty9 - . tarball https://github.com/Alino/agent9/releases/download/alacritty9-v0.2.2/alacritty9-amd64.tar.gz - 0.2.2 # neovim9 — real upstream Neovim 0.12.4 on 9front: static a.out (LuaJIT # interpreter + libuv + 7 treesitter parsers) + the runtime tree at nvim's # compiled-in /usr/local/share/nvim. Runs inside alacritty9, on a bare console # (drawterm -G, the physical console), or any TERM-setting host. # jobs/:terminal/LSP all work. neovim9 - . tarball https://github.com/Alino/agent9/releases/download/neovim9-v0.3.3/neovim9-amd64.tar.gz - 0.3.3 # gpu9 — the Intel Gen8 (Broadwell) GPU driver, entirely in userspace. Builds # on-box from a few small kencc files, so no tarball and no version column (the # registry's rule: a version needs an immutable release URL, and a git clone # tracks HEAD). `pac9 changelog gpu9` after install; the mkfile ships it. # # Gives 9front HARDWARE 2D ACCELERATION, which it has never had (`hwaccel off`, # softscreen — the CPU pushes every pixel through an uncached aperture). gpu9 # fills/scrolls the framebuffer on the GPU blitter: 300-650x the CPU on screen # work, verified. `gpu9 fill` / `scroll` / `demo`. It is honest that plain # RAM-to-RAM copies are NOT a win (`gpu9 bench`). No 3D/OpenGL; use gl9. # # SECURITY: a process with GPU MMIO + GTT can DMA anywhere in physical memory = # full privilege escalation. Opt-in only, never a default, never on a shared box. gpu9 https://github.com/Alino/agent9 gpu9 - mxio https://github.com/Alino/agent9 src/mxio - # tile9 — Magnet/yabai-style keyboard window tiling for 9front. Ctrl+Alt+arrows # snap the focused window to half the screen, Ctrl+Alt+Enter maximizes, # Alt+1..6 launch apps. Not a window manager and not a patched rio: it opens # rio's /dev/kbdtap (rio routes every key to it and delivers only what it # writes back) and resizes through /dev/wsys//wctl. Works on stock rio and # on mxio. Builds on-box from one kencc file, so no tarball and no version # column — a git clone tracks HEAD. Start it from riostart; it must live # inside the window system's namespace. `pac9 changelog tile9` after install. tile9 https://github.com/Alino/agent9 src/tile9 - vts https://github.com/Alino/agent9 src/vts - vtwin https://github.com/Alino/agent9 src/vtwin - xena-panel https://github.com/Alino/agent9 src/xena-panel - launcher https://github.com/Alino/agent9 src/launcher - # hermes9 — the NousResearch hermes-agent for 9front. Ships the site bundle + # launcher only; the interpreter (Python 3.11 with ssl/sqlite/zlib/pydantic-core/ # jiter built in) + stdlib come from the python9 package (5th-column dep). # After install: set $MINIMAX_KEY or write /usr/glenda/hermes9/minimax.key, then `hermes`. # hermes9 — NousResearch hermes-agent (site bundle + launcher; needs python9). # NOT YET RELEASED — bundle not ready. Re-add with pac9/release.sh when it is: # hermes9 - . tarball .../download/hermes9-v/hermes9-amd64.tar.gz python9 # dosbox9 — DOSBox 0.74-3 on 9front (SDL 1.2 with a Plan 9 backend over # gl9win2; cc9 can't link libdraw, so a native window server hosts it). # 12 shareware/freeware DOS games verified rendering on bare metal, plus # Windows 3.11 for Workgroups with its full GUI (Win98 boots to real mode only — # its GUI needs protected mode DOSBox 0.74 hasn't got, i.e. DOSBox-X). # Run from a rio window: `dosbox9` boots to Z:\>, `dosbox9 ` mounts it as # C:. Games are NOT bundled — dosbox9/host/fetch-games.py pulls them from # archive.org. # 0.2.0 presents DAMAGE RECTS (a blinking cursor is ~1 KB, not a 1 MB full # frame). 0.1.0's delta path was wrong because we sent alpha=0 pixels into # gl9win2's ABGR32 image and Plan 9's draw(2) blended them additively; full # frames hid it by blacking the window first. `pac9 changelog dosbox9` has the # story; P9_FULLFRAMES=1 restores 0.1.0's behaviour. dosbox9 - . tarball https://github.com/Alino/agent9/releases/download/dosbox9-v0.2.1/dosbox9-amd64.tar.gz - 0.2.1 # tailscale9 — upstream Tailscale v1.100.0 for plan9/amd64 (official GOOS=plan9 # port, stock Go 1.26, no patches; userspace WireGuard over gVisor netstack, so # a stock kernel works). /rc/bin/tailscaled wraps the daemon: it configures the # loopback interface the control socket needs (fresh 9front has no 127.0.0.1) # and defaults --statedir to $home/lib/tailscale. `tailscaled &` then # `tailscale up` prints the login URL. Verified on bare-metal cirno up to the # control-plane handshake (TLS to controlplane.tailscale.com, node key # registered, login URL issued). tailscale9 - . tarball https://github.com/Alino/agent9/releases/download/tailscale9-v1.100.0/tailscale9-amd64.tar.gz - 1.100.0 # ladybird9 — the real Ladybird browser engine (pinned master 8cc5d7a5ff) cross- # built to native Plan 9 amd64: LibWeb + LibJS (AsmInt) + Skia CPU raster + ICU + # curl/OpenSSL + the Rust crates, as UI + 5 helper procs over TransportPlan9 (shm # via #g segments, fd-pass via /srv). `ladybird ` opens a libdraw window via # the gl9win2 presenter; `ladybird --headless --screenshot-path shot.png `. # No browser chrome yet (single-URL viewport);