MacSurf — a real NetSurf-based browser for Mac OS 9 (CSS3, ES5 JS, native HTTPS)

ptricky

6502
Hi all,
I've been working on a browser for Mac OS 9 and figured it was time to put it in front of people who'd actually run it. It's called MacSurf.

Site: https://macsurf.org
Source: https://github.com/mplsllc/macsurf

It's a NetSurf fork with a new macos9 frontend. Carbon UI, QuickDraw plotters, Open Transport networking, Duktape for JavaScript. Built with CodeWarrior 8. Target hardware is a PowerPC G3/G4 with 64 MB of RAM.

Where it is right now:
  • Full NetSurf fetch → parse → cascade → layout → plot pipeline
  • Around 150 CSS properties consumed in layout, including Grid V1, Flex, var(), border-radius, box-shadow, opacity, linear/radial gradients, transforms, text-shadow, and z-index stacking
  • libcss with var() resolution; QuickDraw plotters drawing into an offscreen GWorld back-buffer
  • Duktape 2.7.0 ES5 — closures, prototypes, regex, JSON, Promise polyfill. ackermann(3,7) runs in about 6 seconds on a 233 MHz G3.
  • PNG with alpha plus the other usual formats
  • Cooperative-multitasking networking via Open Transport.
There are three pieces in the repo:
  • browser/ — the NetSurf fork and the macos9 frontend (C89, CW8)
  • proxy/ — a small Go HTTP-to-HTTPS proxy, stdlib only, one binary, no config. The Mac talks plain HTTP to it and it handles TLS to the outside world. Useful if you don't want to deal with TLS on the Mac itself.
  • macSSL (sibling repo) — a native TLS 1.2 library for OS 9 on top of BearSSL, with ten embedded root CAs, so the browser can do HTTPS directly without the proxy.
Prebuilt MacSurf.sit and a MacSurf-BuildPack.sit are in builds/ in the repo. There's also a Linux cross-dev workflow in the docs if you'd rather not build inside CodeWarrior. License is GPLv2 (NetSurf derivative, with the OpenSSL linking exception).

Things are still rough in plenty of places and I'd really value feedback from people running it on real hardware, what sites work, what blows up, what looks wrong. Bug reports and screenshots welcome, here or on GitHub.

Thanks for taking a look.
 

Attachments

  • bannerlogo.png
    bannerlogo.png
    15.6 KB · Views: 4
Wow this is an AMAZING project!! I just had a quick try and it's very impressive, especially the flexbox and CSS3 support. Well done, I can't wait to see this progress!
 

Attachments

  • Screenshot-2026-05-21-at-3.27.32 PM.png
    Screenshot-2026-05-21-at-3.27.32 PM.png
    322.2 KB · Views: 4
  • Screenshot-2026-05-21-at-3.25.23 PM.png
    Screenshot-2026-05-21-at-3.25.23 PM.png
    396.6 KB · Views: 4
That was fast! Websites obviously don't load perfectly at the moment but I'm slowly but surely getting through CSS elements.
 
What does work already is crazy impressive! I had a few crashes with JS heavy sites e.g. Google, Apple, but otherwise it's a massive upgrade already compared to the existing browsers available on these systems
 
Awesome, glad to have eyes other than my own on it!

It went from "its not possible.." to "ok maybe a basic browse but no javascript.. no real css.."

Anyway, it's clear that a lot is possible and I am not assuming anything is impossible and push what it can display before assuming anything. I've been doing about 5-6 hrs a day on it the past month and a half so it's been serious work!

I'm also working on standalone TLS, which has also been proven, so I fully expect macsurf to load most sites on its own without a proxy server in the future.
 
Awesome, glad to have eyes other than my own on it!

It went from "its not possible.." to "ok maybe a basic browse but no javascript.. no real css.."

Anyway, it's clear that a lot is possible and I am not assuming anything is impossible and push what it can display before assuming anything. I've been doing about 5-6 hrs a day on it the past month and a half so it's been serious work!

I'm also working on standalone TLS, which has also been proven, so I fully expect macsurf to load most sites on its own without a proxy server in the future.
** Do note the proxy is on a Hetzner server so if google speaks to your in German that's why.
 
It absolutely shows! I'm surprised you've manage to squeeze so much modern functionality into this. I'll try to do some bug testing when I get a little more time :)
** Do note the proxy is on a Hetzner server so if google speaks to your in German that's why.
Haha that's good to know!
 
Back
Top