The modern web, on a 25-year-old Mac.
MacSurf is a web browser for Classic Mac OS 9 PowerPC.
Real CSS3. Real ES5 JavaScript. Real PNGs with alpha. Running on a beige G3.
Warning
MacSurf is a very early alpha. It runs, it renders real CSS3, it executes JavaScript on a beige G3, and as of 2026-05-25 it speaks TLS 1.2 natively against real modern HTTPS sites (mactrove.com is the canonical hardware test target). Most websites in 2026 will still not work in it — heavy SPAs, modern CSS features MacSurf doesn't ship yet, missing form interactions, slow JS on real hardware. A lot is still rough.
It is ready to be tested. If you've got a Power Mac G3 / G4 sitting around, please load it up and try it. Bug reports and screenshots from real hardware are exactly what this project needs right now. Coders welcome too; there's an enormous amount of CSS / DOM / JS surface left to fill in, and the code is approachable C89 (the same C you'd have written in 1999). See docs/status.md for the current punch list and docs/README.md for the doc index.
What you should not expect yet: smooth browsing of arbitrary modern sites, video, audio, WebGL, service workers, anything React-heavy. What you can expect: hand-built pages, retro-style sites, a respectable subset of the CSS Grid spec, native HTTPS with the full Mozilla CA bundle, and the surreal experience of running ES5 JavaScript on a 233 MHz PowerPC.
First numbered version: 0.1a1 (2026-05-20). Latest release: v0.6 — Mac OS 9, meet TLS (2026-05-25). Full notes: docs/release-notes/MacSurf-0.6.md.
The web outgrew Classic Mac OS twenty years ago. Modern HTTPS killed it for good around 2016. Today, an out-of-the-box G3 or G4 running OS 9 can barely reach a single live website.
MacSurf brings the real web back. Not a screenshot proxy. Not a remote terminal session. A native browser, built with the tools that were on the platform—CodeWarrior, the Carbon API, QuickDraw, Open Transport—running real CSS3 layouts and real JavaScript inside the 64-megabyte memory floor of a 1999 iMac. As of 2026-05-25 it talks TLS 1.2 directly to the modern web, through a BearSSL-based stack (macTLS) that ships inside the browser binary with the full 121-anchor Mozilla CA bundle. No proxy required.
It is, as far as we can find, the first serious NetSurf port to Classic Mac OS, and the first browser shipped on Mac OS 9 with native CSS Grid, CSS custom properties, and ES5 JavaScript.
Each shot below is a real milestone, captured on a Power Macintosh G3 running Mac OS 9. The fix-number annotations match this repo's commit history.
| Component | Language | Purpose |
|---|---|---|
browser/ |
C (C89, CW8) | NetSurf fork with a macos9 frontend. Carbon UI, QuickDraw plotters, Open Transport networking, Duktape JS engine. |
proxy/ |
Go (stdlib only) | TLS-stripping HTTP proxy. Mac sends plain HTTP, proxy fetches via HTTPS, returns plain HTTP. Deploy on a VPS or run locally. |
macTLSsibling repo |
C (CW8) | Native TLS 1.2 library for OS 9, modern HTTPS straight from the Mac, no proxy required. Built on BearSSL with ten embedded root CAs. |
|
Rendering pipeline
CSS: ~150 properties consumed in layout
|
JavaScript: Duktape 2.7.0 ES5
Images: all five formats
Networking
Chrome
|
Latest release: MacSurf v0.6 — Mac OS 9, meet TLS (2026-05-25, native HTTPS). Previous: v0.5.0, v0.1a1.
- MacSurf.sit (latest binary, v0.6), ready-to-run. Expand on Mac OS 9.1+ with CarbonLib 1.5+ and launch.
- Building from source: clone this repo, then on the Mac side open
browser/netsurf/frontends/macos9/MacSurf.mcpin CodeWarrior 8 and choose Build. The earliest release ships a BuildPack.sit snapshot with the CW8 project pre-wired; current builds work straight from the git clone.
All releases (with full notes per version): github.com/mplsllc/macsurf/releases. Earlier alpha release notes: docs/release-notes/MacSurf-0.1a1.md.
|
MacSurf is built on Mac OS 9 with CodeWarrior 8 Pro (8.3 update). Source is cross-compile-clean against Retro68 PowerPC GCC for fast Linux-side syntax checks. |
A single Go binary. No config files. No dependencies beyond stdlib. cd proxy
go build -o macsurf-proxy
./macsurf-proxy |









