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: 21
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: 21
  • Screenshot-2026-05-21-at-3.25.23 PM.png
    Screenshot-2026-05-21-at-3.25.23 PM.png
    396.6 KB · Views: 21
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!
 
Will this be or eventually be a competent replacement to Classizilla? It's a bit of a pig, so anything that runs in a smaller footprint would be neat.
 
Will this be or eventually be a competent replacement to Classizilla? It's a bit of a pig, so anything that runs in a smaller footprint would be neat.
Absolutely. I am spending most of my time currently working on load times and compatibility with modern CSS. I also have a companion application that is working to handle TLS so a proxy is not needed.
 
Why would you remove CLAUDE.md before posting this? Do you think it isn’t obvious?
There was no effort to remove evidence of using claude, I have no problem admitting I use AI considering this is a massive project for one person. The most likely reason was a cleanup process before making the repo live to ensure I didn't include anything that wasn't critical to the application working.
 
To everyone that is upset someone in 2026 is using AI to bring modern internet to an iMac you're free to go into the lab and create it yourself.

This was a project for personal satisfaction, so that my own old hardware could load modern websites. I thought it would be awesome to share, and all of my websites and software have the missions of data minimization and privacy. I spend a lot of time ensuring the products I release are safe and secure, and while that is not a guarantee for anything product, I do my best.
 
Last edited:
Back
Top