logo
Kurashizu Blogwhere ideas flow
  • Home
  • News
  • Blog
  • About
  • Home
  • News
  • Blog
  • About

© 2026 Kurashizu. All rights reserved.

Admin·New Post·Service Status
Powered by Cloudflare·02.11.26
← Back to news

MacSurf 1.68 – NetSurf on OS 9 Released

Original article
github.com|23 points|2 comments|by mplsllc|Jul 7, 2026

MacSurf 1.68: The "macQJS" Update for NetSurf on OS 9

Developer

The latest iteration of MacSurf, version 1.68, has officially arrived. This is a native web browser specifically engineered for Classic Mac OS (supporting PowerPC architectures and Mac OS 9.1 through 9.2.2). It brings the modern web to vintage hardware via native TLS 1.3 and a contemporary JavaScript engine, eliminating the need for external proxies or companion computers.

🏛️ A Tribute to 68kmla.org

The version number 1.68 is a deliberate nod to 68kmla.org. This community and its platform were the primary catalysts for the current development cycle.

"An enormous amount of 1.68 exists because 68kmla exists: it's the site I test against every single day, it's where the toughest real-world rendering, login, and JavaScript problems surfaced, and it's the reason so many of the fixes below are as thorough as they are."

The developer expresses deep gratitude to the 68kmla community for their patience with bugs, their detailed feedback, and their welcoming nature toward a "rough-around-the-edges" project. Achieving a state where a user can render a forum, log in, and post a reply from an actual OS 9 machine has been a major milestone.


💰 Supporting the Project

Bringing a modern, HTTPS-only experience to legacy hardware is a massive undertaking. To keep the project sustainable, financial support is requested:

  • Patreon: https://www.patreon.com/cw/MacSurf
  • Ko-Fi: https://ko-fi.com/macsurf

Supporters gain access to development logs and a voice in the project's future roadmap.


🚀 The Headline: Introducing macQJS

The most significant evolution since version 1.5 is the complete overhaul of the JavaScript engine. MacSurf has transitioned from Duktape (ES5) to macQJS.

What is macQJS?

macQJS is a port of QuickJS for Classic Mac OS. It allows PowerPC machines running OS 9 to execute ES2023 JavaScript natively.

Comparison of JS Capabilities

FeatureOld Engine (Duktape)New Engine (macQJS)
StandardES5ES2023
Modern SyntaxRequired TranspilerNative Support
Key FeaturesBasic JSlet, const, arrow functions\text{arrow functions}arrow functions, classes\text{classes}classes, Promises\text{Promises}Promises
StabilityProne to bundle corruptionHardware-verified stability

Technical Improvements

Previously, MacSurf used an internal ES6→\to→ES5 transpiler to "pre-chew" modern code. This has been retired because the async/await rewriting process was silently damaging minified bundles. Now, site bundles execute directly on-device.

To prevent a malicious or poorly written script from crashing the system, the engine implements:

  1. Memory Cap: A strict per-heap limit.
  2. Execution Deadline: A timeout to prevent hangs, defined as: Execution Time<20s\text{Execution Time} < 20\text{s}Execution Time<20s

Note: macQJS is developed as a standalone project, meaning other Classic Mac OS software can potentially integrate it.


🛠️ Showstoppers Fixed

This cycle focused on "the basics"—essential features that are now fully operational:

  • Visual Caret: Input fields and textareas now feature a blinking text cursor (via native place_caret).
  • Text Manipulation: Click-and-drag selection is functional; Cut/Copy/Paste now correctly interface with the Mac Scrap Manager.
  • Session Persistence: Fixed a bug where the browser served stale, cached "logged-out" pages immediately after a successful login.
  • Viewport Stability: Caret movement and page scrolling no longer cause the entire viewport to shift sideways.
  • Boot Speed: Removed a heavy JS benchmark that ran at every launch, eliminating a ≈17\approx 17≈17-second freeze.
  • UI Interaction: Fixed "click-through" issues where buttons on sticky overlays (like cookie banners) would trigger elements on the page behind them.

🔍 Detailed Change Log

JavaScript Engine (macQJS)

  • Integrated via the WITH_QUICKJS build flag.
  • Implemented a fresh JS realm for every navigation to prevent top-level declarations (like class or const) from colliding between different pages.
  • Completed a multi-month migration (fixes 482–554) and a stability arc (fixes 565–577).

Site Compatibility (XenForo & 68kmla)

The switch to a modern engine initially broke the XenForo editor due to a crash chain: parentNode -null →\rightarrow→ jQuery Sizzle →\rightarrow→ jQuery.support →\rightarrow→ XF.Element

The Solution:

  • Small ES5 shims are now used for three specific bundles to define XF.Element and properly size the editor.
  • "Doomed" feature bundles (e.g., lightbox, media gallery) that are incompatible with the engine are now skipped entirely to improve load times.

Text Input & Keyboard

  • Full support for password fields and standard text inputs.
  • Integration of Cmd keys and the Edit menu for clipboard actions.

macQJS Banner