GitHub - mplsllc/macsurf: A modern web browser for Classic Mac OS 9 PowerPC. Real CSS3, ES5 JavaScript, native HTTPS โ€” built with CodeWarrior on the Carbon API.

5 min read Original article โ†—

MacSurf

The modern web, on a 25-year-old Mac.

A native web browser for Classic Mac OS 9 on PowerPC: real CSS3, modern JavaScript, and HTTPS, running on a G3 iMac. No proxy, no second machine.

MacSurf 2.0.5 rendering hackaday.com on a Power Macintosh G3 iMac
MacSurf 2.0.5 on a Power Mac G3 iMac, rendering hackaday.com at full desktop width over native HTTPS.


๐Ÿ†“ Free monthly stable

A tested build on macsurf.org, free for everyone, with real hardware testing behind it.

Next stable: August 22, 2026

โญ Weekly, for supporters

In-progress builds land in Beta-Box every week, ahead of every stable release, with dev notes along the way.

Become a supporter โ†’

Every project stays free as source. Build it yourself and you never need Beta-Box. You are paying for the build and the cadence, not for access.

Support development

Support on Ko-fi   Support on Patreon   Sponsor on GitHub

Follow along

Join our Discord   Follow on Bluesky

Thanks to our supporters: Shlooom, Kestral, Mothra (Patreon) ยท kilgeist, Turuun, Rogue (Ko-Fi)

The MacSurf 2.0 About box crediting supporters


Note

2.0.5 "HACKADAY" is a polish release over 2.0: point it at hackaday.com and the front page renders at real desktop width, with the right fonts and the article cards laid out. Under that headline is a browser-wide text-size fix (author font-size was drawing about 25% too small, which is why so many sites came up cramped), a large modern-CSS pass, a more capable on-device JavaScript engine, and tracker/ad-network blocking. It is still at its best on hand-built pages, retro sites, and forums. Very heavy modern apps (GitHub, video, React-heavy SPAs) still do not render. This is honest, in-progress software. Got a G3 or G4? Load it up and tell us what breaks. See docs/status.md for the current punch list.

Why this exists

The web outgrew Classic Mac OS twenty years ago, and modern HTTPS finished the job around 2016. Pull a G3 or G4 out of the closet today and it can barely reach a single live site.

MacSurf fixes that on the machine itself, with no screenshot proxy and no remote-terminal trick. It is a native browser built with the tools that shipped on the platform: CodeWarrior, Carbon, QuickDraw, Open Transport. It speaks TLS 1.3 straight to the modern web through macTLS, a BearSSL-based stack baked into the binary with the full Mozilla CA bundle, and runs modern JavaScript through macQJS, a QuickJS port for Mac OS 9.

As far as we can tell, it is the first serious NetSurf port to Classic Mac OS, and the first Mac OS 9 browser with native CSS Grid, CSS custom properties, and an on-device modern JavaScript engine.

Real sites, on real hardware

Every shot below is a live site, captured on a Power Mac G3 running Mac OS 9.2.2 with MacSurf 2.0.5.

New in 2.0.5

The headline is hackaday.com rendering at full desktop width (shown above): correct type, article cards, and images in place.

Under it: text is measured in real device pixels (author font-size no longer draws 25% too small), a large modern-CSS pass (justified text, soft hyphens, logical properties, box-alignment shorthands, grid auto-sizing), a more capable JavaScript engine (real fetch/XHR, resolving Promise chains, DOM traversal, document.cookie), and tracker/ad-network blocking. Full 2.0.5 notes โ†’

New in 2.0

Earlier shots: the same sites on previous builds
How it got here: a couple of early milestones

The pieces

ComponentLanguagePurpose
browser/ C (C89, CW8) NetSurf fork with a macos9 frontend. Carbon for the UI, QuickDraw for drawing, Open Transport for networking, macQJS for JavaScript.
macTLS
sibling repo
C (CW8) Native TLS 1.3 (1.2 fallback) for OS 9: HTTPS straight from the Mac. BearSSL underneath, full Mozilla CA bundle baked in.
macQJS
sibling repo
C (CW8) A QuickJS port for Classic Mac OS: modern ES2023 JavaScript on PowerPC.

What works today

Rendering

  • Full NetSurf fetch, parse, cascade, layout, plot
  • Native libcss with var(), about 150 properties consumed in layout
  • Flexbox, CSS Grid, gradients, border-radius, box-shadow, opacity, transforms, z-index stacking
  • PNG (real alpha), GIF, JPEG, BMP, TIFF
  • Downloadable web-font icon glyphs

Full status โ†’

JavaScript, macQJS (QuickJS, ES2023)

  • let/const, arrows, classes, template literals, Promises, generators, modern regex
  • Runs real site bundles on-device

Networking

  • HTTP/1.1: chunked, keep-alive, 3xx follow, connection pooling
  • HTTPS via macTLS: TLS 1.3, 1.2 fallback, full CA bundle
  • Cookies and logins that persist

Chrome

  • Address bar, back / forward / reload / home, bookmarks menu, downloads manager
  • Text input: caret, selection, cut / copy / paste, Tab between fields
  • Multi-window, smooth scroll bar, keyboard scrolling

Download

MacSurf 2.0.5 "HACKADAY" (2026-07-17). See what changed in the full release notes โ†’ or the 2.0 notes โ†’.

Want the builds between releases? Weekly in-progress builds land in Beta-Box for supporters, ahead of every stable release.

Building

MacSurf builds on Mac OS 9 with CodeWarrior 8 Pro (8.3 update). The source is cross-compile-clean against Retro68 PowerPC GCC, which we use for fast Linux-side syntax checks.


Native HTTPS via macTLS ยท JavaScript via macQJS ยท built on NetSurf ยท intro video

For Gary & Kaija