
A modern web browser for Classic Mac OS 9 PowerPC. Real CSS3, ES5 JavaScript, native HTTPS. Built with CodeWarrior on the Carbon API.
<p align="center"> <img src="https://assets.kitploit.com/production/public/readmes/743/87c5ce9fd7c78e2895b84309af0f2f3be7fd564e164924cb1e61326cba3f0d14.png" alt="MacSurf" width="460"> </p> <p align="center"><strong>The modern web, on a 25-year-old Mac.</strong></p> <p align="center"> 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. </p> <p align="center"> <img src="https://assets.kitploit.com/production/public/readmes/743/fb4a79f7fa6ad9677aaf9d54be6c9e658f55eec44cd69861f6578312ff2341d6/9c73ba8da57051b38bb06e04b8b2cd7bf6d3721197051ac600fe9ea919ce0107-display-v1.webp" alt="MacSurf 2.0.5 rendering hackaday.com on a Power Macintosh G3 iMac" width="760"> <br> <em>MacSurf 2.0.5 on a Power Mac G3 iMac, rendering <a href="https://hackaday.com/">hackaday.com</a> at full desktop width over native HTTPS.</em> </p> <p align="center"><strong>Support MacSurf</strong></p> <p align="center"> <a href="https://ko-fi.com/macsurf" target="_blank"><img src="https://img.shields.io/badge/Ko--fi-Support-FF5E5B?style=for-the-badge&logo=kofi&logoColor=white" alt="Support on Ko-fi" height="40"></a> <a href="https://www.patreon.com/MacSurf" target="_blank"><img src="https://img.shields.io/badge/Patreon-Support-FF424D?style=for-the-badge&logo=patreon&logoColor=white" alt="Support on Patreon" height="40"></a> <a href="https://github.com/sponsors/mplsllc" target="_blank"><img src="https://img.shields.io/badge/GitHub-Sponsor-DB61A2?style=for-the-badge&logo=githubsponsors&logoColor=white" alt="Sponsor on GitHub" height="40"></a> </p> <p align="center"><strong>Thanks to our supporters:</strong><br>Ko-Fi: <strong>Chris Marks, Rogue, Turuun, kilgeist</strong><br>Patreon: <strong>Mack Chamberlain, Lucas, Joseph Mulvaney, Shlooom, Bigdipper</strong></p> --- > [!NOTE] > **2.3 "OPEN TABS"** is the largest MacSurf release since 2.0. Tabs bring independent page, scroll, history, rendering and JavaScript state into one native Mac window. The release also expands dynamic-page support, browser APIs, CSS and image/SVG handling, native managers, networking and security. Read the [2.3 release notes](https://github.com/mplsllc/macsurf/releases/tag/v2.3). ## 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, and Open Transport. It speaks TLS 1.3 straight to the modern web through a BearSSL-based native TLS stack and runs modern JavaScript through a QuickJS engine adapted for Mac OS 9. As far as we can tell, it is the first serious [NetSurf](https://www.netsurf-browser.org/) 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. <table> <tr> <td width="50%" align="center" valign="top"><img src="https://assets.kitploit.com/production/public/readmes/743/f7e42baa7e5603cd5430a93498b20bfc49b5c32ae901be25e87f297e81b279a4/da9f7ce761a716d514d5105d91cc110c6b0891d77a1dfb272431db7110491811-display-v1.webp" alt="hackaday.com"><br><strong>hackaday.com</strong><br><em>A modern, JavaScript-heavy news site at full desktop width.</em></td> <td width="50%" align="center" valign="top"><img src="https://assets.kitploit.com/production/public/readmes/743/6c0116afafd7f013cd1a140777ce956a2329502afe7929fb903165e48ec1030b/0ce48516ed84705ce2f117b4773d681dddadf5b025a23eb45f73d22b274bd197-display-v1.webp" alt="68kmla.org forum"><br><strong>68kmla.org</strong><br><em>A full XenForo forum: logged in, full-width, correct text size.</em></td> </tr> <tr> <td width="50%" align="center" valign="top"><img src="https://assets.kitploit.com/production/public/readmes/743/1933e1c51b26720fc514289533bf9463c55c5e034e38540bdd91b71d4e693eb5/5cc889318bcb1c9fdda63efe45a001927c836ffdc8ed1dfcb3642bd8a37e4448-display-v1.webp" alt="macintoshgarden.org"><br><strong>macintoshgarden.org</strong><br><em>Image-heavy and fully styled, over native HTTPS.</em></td> <td width="50%" align="center" valign="top"><img src="https://assets.kitploit.com/production/public/readmes/743/8a5164d3bdd5a347fe198420c0655ecda89f5f43d2b83e1c43c667f7d8ce94a9/6645c51274f292a610125e66cbf996c770e5bd5c47a8f8ae3173bccf8cc7d37d-display-v1.webp" alt="Hacker News"><br><strong>news.ycombinator.com</strong><br><em>Hacker News: login and front page, no phantom boxes.</em></td> </tr> </table> ## 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. [Full 2.3 release →](https://github.com/mplsllc/macsurf/releases/tag/v2.3) ## 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 release →](https://github.com/mplsllc/macsurf/releases/tag/v2.0) ## New in 2.0 <table> <tr> <td colspan="2" align="center" valign="top"><img src="https://assets.kitploit.com/production/public/readmes/743/26b5e76736fb4a0726fb1c3a5905abb971bff96ad9d073de629d3daae5448662/fe35d31da846b5229eac601142482e63de511b1ec48f54c77291c88eba797624-display-v1.webp" alt="Type-ahead address bar" width="720"><br><strong>Type-ahead address bar</strong><br><em>History- and bookmark-backed suggestions as you type.</em></td> </tr> <tr> <td width="50%" align="center" valign="top"><img src="https://assets.kitploit.com/production/public/readmes/743/16f9e23ea25ab7a151c6f9dcb1025c89fef831d92c2a181aa286a17ce1d01f21/e91e6a07ae8aab725a76e0bf74a90e00692c10ecfea3ba0af9970f4ae3c60377-display-v1.webp" alt="History manager"><br><strong>History manager</strong><br><em>Day-grouped, searchable, clearable. A real window.</em></td> <td width="50%" align="center" valign="top"><img src="https://assets.kitploit.com/production/public/readmes/743/681a623afeb16a48ab647a1d3d5bf5ba7b0842651ebe36c12b74b84483cb55f4/a9e20b8b77984a1d4132798bc6da0f75c4300dfa6dabfbd676eefd56f69be201-display-v1.webp" alt="Bookmark manager"><br><strong>Bookmark manager</strong><br><em>Save, organize, and jump straight from the menu.</em></td> </tr> </table> <details> <summary><strong>Earlier shots</strong>: the same sites on previous builds</summary> <br> <table> <tr> <td width="50%" align="center" valign="top"><img src="https://assets.kitploit.com/production/public/readmes/743/5269fb37960f51b25e98961d48dc9b3f3ab132751ba97c978e8cb858d3fc69d8/1ca8534e2da867a15bdb3cfbbcff3084d42276849e19edd784590688523b44a4-display-v1.webp" alt="68kmla.org forum"><br><strong>68kmla.org</strong></td> <td width="50%" align="center" valign="top"><img src="https://assets.kitploit.com/production/public/readmes/743/d1a50dd403b8d2941347db70a9c15acd12d1ef8f3b44ab654d93b98512b3eda0/2166466ed725c9d65ad07af177ccc827b5c14e32a84ea8163e25cd77812f72e3-display-v1.webp" alt="Macintosh Garden"><br><strong>macintoshgarden.org</strong></td> </tr> <tr> <td width="50%" align="center" valign="top"><img src="https://assets.kitploit.com/production/public/readmes/743/3d80b226a12cdd09e0620ef536f5d33f8ff636c3faddd8355a3ba99282556b60/60acdafac5d4e277d625544bbdb520fd9c1a7dac8e7457381d7aa4f1b555c7bb-display-v1.webp" alt="Macintosh Repository"><br><strong>macintoshrepository.org</strong></td> <td width="50%" align="center" valign="top"><img src="https://assets.kitploit.com/production/public/readmes/743/8874915a879730713a57bc4448decf9e256ea48ad2d6983eef25cfd3ab59b566/bea52800a863d6db71af5992f5494ad94d254545d6dfe6223577e112b0c6464c-display-v1.webp" alt="Mac Hut"><br><strong>machut.net</strong></td> </tr> <tr> <td width="50%" align="center" valign="top"><img src="https://assets.kitploit.com/production/public/readmes/743/2fe50ae12abf74788d09ae55fbd2feafdf0041e9eb80c632efe5a5b42a500f47/5686c61f8beb2d126e61dbc3692e989aada2543c4824f86caba10ea27b6ae28d-display-v1.webp" alt="Lobsters thread about MacSurf"><br><strong>lobste.rs</strong></td> <td width="50%" align="center" valign="top"><img src="https://assets.kitploit.com/production/public/readmes/743/d791ebaf41fbc11671942a131813414af2bbafb1830ad5a9100843808b914867/512b2f74726f12b62ed6935f0235fe4a66b3efe2f052a68365c5a31e5198bf78-display-v1.webp" alt="DuckDuckGo search"><br><strong>DuckDuckGo</strong></td> </tr> </table> </details> <details> <summary><strong>How it got here</strong>: a couple of early milestones</summary> <br> <table> <tr> <td width="50%" align="center" valign="top"><img src="https://assets.kitploit.com/production/public/readmes/743/1972ef263827e73260bc45512bd7e17a7f65bf83e40da509d45b20d717e2e924.jpg" alt="JavaScript on Mac OS 9"><br><strong>v0.2: JavaScript on Mac OS 9</strong><br><em>The first JS-bearing page evaluating live, on-device.</em></td> <td width="50%" align="center" valign="top"><img src="https://assets.kitploit.com/production/public/readmes/743/d915e4817c263c8da93d9bc0b8aadd602155f2a6575ae7647852e0a4c204d467.jpg" alt="CSS Grid on Mac OS 9"><br><strong>CSS Grid</strong><br><em>Real Grid layout: spans, full-row heroes, auto-wrap.</em></td> </tr> </table> </details> ## Built for classic Macs <table> <tr><th align="left">Component</th><th align="left">Language</th><th align="left">Purpose</th></tr> <tr> <td>Browser engine</td> <td>C (C89, CW8)</td> <td>NetSurf-based browser with a native Mac OS frontend: Carbon for the interface, QuickDraw for drawing, Open Transport for networking, and an on-device JavaScript engine.</td> </tr> <tr> <td>Native TLS</td> <td>C (CW8)</td> <td>Native HTTPS with TLS 1.3 and TLS 1.2 fallback, using BearSSL and an embedded Mozilla CA bundle.</td> </tr> <tr> <td>JavaScript</td> <td>C (CW8)</td> <td>QuickJS-based modern JavaScript on Classic Mac OS and PowerPC.</td> </tr> </table> ## MacSurf 2.3 capabilities <table> <tr> <td valign="top" width="50%"> **Rendering & CSS** - Full NetSurf fetch, parse, cascade, layout and QuickDraw paint pipeline - CSS custom properties with selector/media scope, specificity, inheritance and deferred `var()` resolution - Flexbox and CSS Grid, including stronger auto-track sizing, `minmax()`, `justify-self`, row/column gaps and stretch behavior - CSS math and sizing: `calc()`, `min()`, `max()`, `clamp()`, min/max/fit-content and viewport-relative sizing - Gradients, `border-radius`, `box-shadow`, opacity, transforms, z-index stacking and improved background clipping/origin - PNG, GIF, JPEG, BMP, TIFF and **native WebP**, including animated WebP machinery - Much stronger inline/external **SVG**: sizing, `viewBox`, aspect-ratio modes, shapes, transforms, fill/stroke and embedded raster images - Downloadable web fonts, including WOFF2/Brotli fixes [Full 2.3 release →](https://github.com/mplsllc/macsurf/releases/tag/v2.3) </td> <td valign="top" width="50%"> **JavaScript, macQJS (QuickJS / ES2023)** - Modern language features plus **ES modules** - `fetch` / XHR, Headers, Request, Response, AbortController / AbortSignal and native cancellation - Promises, microtasks, timers, `requestAnimationFrame`, persistent `localStorage` and `sendBeacon` - MutationObserver, ResizeObserver and IntersectionObserver - Stronger DOM traversal/selectors, cloning/replacement, reflected properties, events and prototype relationships - Canvas 2D compatibility surface with native-font `measureText()` - `crypto.getRandomValues()` and `randomUUID()` **Networking & security** - HTTP/1.1: chunked transfer, keep-alive, redirects, pooling, cache revalidation and gzip responses - HTTPS via macTLS: TLS 1.3 with TLS 1.2 fallback and Mozilla CA bundle - Certificate rejection fails closed; scripted HTTPS requests cannot silently downgrade to HTTP - Persistent cookies/logins, tighter referrer handling and tracker blocking **Browser chrome** - **Tabbed browsing** with independent page, history, scroll, rendering and JavaScript state - Address bar, back / forward / reload / home and type-ahead suggestions - Rebuilt Downloads window with progress, speed, ETA, cancel, open and Reveal in Finder - Native Preferences, Bookmarks and History managers - Text input, selection, clipboard commands, keyboard navigation and native form controls </td> </tr> </table> ### 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 The 2.3 release strengthens page and tab lifetimes, dynamic DOM reconstruction, late asynchronous callbacks, cached resources, and TLS record checks. MacSurf's built-in diagnostics summarize navigation, requests, script activity, layout, and paint directly on the Mac. ## Download **[MacSurf 2.3 "OPEN TABS"](https://github.com/mplsllc/macsurf/releases/latest)** (2026-09-19). See what changed in the [full 2.3 release notes →](https://github.com/mplsllc/macsurf/releases/tag/v2.3). - **[Download MacSurf →](https://macsurf.org/download.html)**: 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](http://macsurf.org/)**, since GitHub does not render on-device yet. - [All releases →](https://github.com/mplsllc/macsurf/releases) ## Source and licensing Version-specific source archives and SHA-256 checksums are attached to MacSurf releases. Start with the source archive attached to the release you downloaded: [MacSurf 2.3 source archive](https://github.com/mplsllc/macsurf/releases/download/v2.3/MacSurf-v2.3-source.tar.gz) ([SHA-256](https://github.com/mplsllc/macsurf/releases/download/v2.3/MacSurf-v2.3-source.tar.gz.sha256), [release notes](https://github.com/mplsllc/macsurf/releases/tag/v2.3)). See [LICENSE](https://github.com/mplsllc/macsurf/blob/master/LICENSE) and the notices included with each source package. --- <p align="center"><sub> Native HTTPS · On-device JavaScript · built on <a href="https://www.netsurf-browser.org/">NetSurf</a> · <a href="https://www.youtube.com/watch?v=PLpbHSXca60">intro video</a> </sub></p> <br> <p align="center"> <img src="https://assets.kitploit.com/production/public/readmes/743/ae78595fa6f8f85dea585251b70e690251bffbc029a8e93188f23f383a4afd00/6176d5141a72a9ff5d6ac3076d0e972c2fb6f109e9435c3b2669d3d709755e70-display-v1.webp" alt="" width="90"> </p> <p align="center"><em><a href="https://www.patreon.com/MacSurf/posts/this-is-for-gary-163164919">For Gary & Kaija</a></em></p>