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, but most websites in 2026 will not work in it. Expect: crashes on heavy SPAs, broken layouts on sites that lean on 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, and the surreal experience of running ES5 JavaScript on a 233 MHz PowerPC.
Released 2026-05-20 as the first numbered version. Release notes: docs/release-notes/MacSurf-0.1a1.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.
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. |
macSSLsibling 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 0.1a1 (alpha, 2026-05-20).
- MacSurf.sit (581 KB), ready-to-run binary. Expand on Mac OS 9.1+ with CarbonLib 1.5+ and launch.
- MacSurf-BuildPack.sit (4 MB), full source + CodeWarrior 8 project file. Expand, open
MacSurf.mcpin CodeWarrior, choose Build.
Full release notes: docs/release-notes/MacSurf-0.1a1.md. All releases: github.com/mplsllc/macsurf/releases.
|
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 |