
macsurf v2.3
A modern web browser for Classic Mac OS 9 PowerPC. Real CSS3, ES5 JavaScript, native HTTPS. Built with CodeWarrior on the Carbon API.
The modern web, on a 25-year-old Mac.
A native browser for the Carbon era, Mac OS 8.6 through Mac OS X 10.6: real CSS, modern JavaScript, and HTTPS on the Mac itself. No proxy, no second machine.
MacSurf 2.0.5 on a Power Mac G3 iMac, rendering hackaday.com at full desktop width over native HTTPS.
🆓 Free monthly stableA tested build on macsurf.org, free for everyone, with real hardware testing behind it. Latest stable: MacSurf 2.3 "OPEN TABS" |
⭐ Weekly, for supportersIn-progress builds land in Beta-Box every week, ahead of every stable release, with dev notes along the way. |
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
Follow along
Thanks to our supporters:
Ko-Fi: Chris Marks, Rogue, Turuun, kilgeist
Patreon: Mack Chamberlain, Lucas, Joseph Mulvaney, Shlooom
[!NOTE] 2.3 "OPEN TABS" is the largest MacSurf release since 2.0. Tabs are finally enabled, with independent page, scroll, history, rendering and JavaScript state inside one native Mac window. Underneath that is a major dynamic-page/lifecycle rewrite, a much larger browser API surface, more CSS and image/SVG support, rebuilt native managers, stronger networking and security, and a long hardware-driven stability campaign. MacSurf remains honest, in-progress software; some very heavy modern applications still expose layout and API gaps. See the 2.3 release notes and docs/status.md for details.
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. They are kept here as a hardware baseline; MacSurf 2.3 has moved substantially beyond the browser shown in these images.
![]() hackaday.com A modern, JavaScript-heavy news site at full desktop width. | ![]() 68kmla.org A full XenForo forum: logged in, full-width, correct text size. |
![]() macintoshgarden.org Image-heavy and fully styled, over native HTTPS. | ![]() news.ycombinator.com Hacker News: login and front page, no phantom boxes. |
New in 2.3
Tabs. One native Mac window can now host multiple independent browser pages. Command-T opens a tab; Command-W closes the current tab. Background tabs retain their own JavaScript realm, title, URL, content and scroll state without taking over the foreground chrome.
The release also brings a major dynamic-page and JavaScript compatibility pass; deeper DOM reconstruction safety; CSS math, sizing, Grid, variables and paint improvements; native WebP and stronger SVG; a rebuilt Downloads window; improved Preferences, Bookmarks and History; tighter HTTPS/security behavior; and a large body of crash- and lifetime fixes.
MacSurf 2.3 supports Mac OS 8.6 through Mac OS X 10.6. On Intel Macs, the PowerPC build runs under Rosetta where available.
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
![]() Type-ahead address bar History- and bookmark-backed suggestions as you type. | |
![]() History manager Day-grouped, searchable, clearable. A real window. | ![]() Bookmark manager Save, organize, and jump straight from the menu. |
Earlier shots: the same sites on previous builds
![]() 68kmla.org | ![]() macintoshgarden.org |
![]() macintoshrepository.org | ![]() machut.net |
![]() lobste.rs | ![]() DuckDuckGo |
How it got here: a couple of early milestones
![]() v0.2: JavaScript on Mac OS 9 The first JS-bearing page evaluating live, on-device. | ![]() CSS Grid Real Grid layout: spans, full-row heroes, auto-wrap. |
The pieces
| Component | Language | Purpose |
|---|---|---|
browser/ | C (C89, CW8) | NetSurf fork with a macos9 frontend. Carbon for the UI, QuickDraw for drawing, Open Transport for networking, macQJS for JavaScript. |
macTLSsibling 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. |
macQJSsibling repo | C (CW8) | A QuickJS port for Classic Mac OS: modern ES2023 JavaScript on PowerPC. |
What works today
|
Rendering & CSS
|
JavaScript, macQJS (QuickJS / ES2023)
Networking & security
Browser chrome
|
Supported systems
MacSurf 2.3 supports Mac OS 8.6 through Mac OS X 10.6 Snow Leopard.
- PowerPC Macs run MacSurf directly.
- Intel Macs can run the PowerPC build through Rosetta where available.
- Mac OS 9 remains the primary target and the environment most heavily tested on original hardware.
- Recommended memory: 128 MB minimum, 256 MB recommended, 384 MB for the heaviest JavaScript sites.
Stability and diagnostics
A large part of 2.3 is work you should not have to notice: stronger page/runtime ownership, safer DOM reconstruction, guarded late callbacks, cache/content lifetime fixes, image reuse across reconvert, TLS bounds checks, and tab isolation.
MacSurf also now has a much deeper built-in diagnostic system for correlating navigation, documents, frames, network requests, JavaScript tasks, timers, mutations, XHR/fetch, Promise rejections, layout, paint and compatibility gaps. The final Tiger multi-tab stress campaign completed 20/20 cycles with zero crashes and zero hangs, followed by testing on Mac OS 9.2.2 hardware.
Download
MacSurf 2.3 "OPEN TABS" (2026-09-19). See what changed in the full 2.3 release notes →.
- Download MacSurf →: expand with StuffIt Expander and double-click. MacSurf supports Mac OS 8.6 through Mac OS X 10.6; on Intel Macs the PowerPC build runs under Rosetta where available. No installer.
- Already on a Mac OS 9 machine? Grab it from the plain-HTTP macsurf.org, since GitHub does not render on-device yet.
- All releases →
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














