Ship's Log: Current state of the Gosub engine

jaytaph1 pts0 comments

Where Our Independent Browser Engine Sits Today

0 m · surface<br>Ship’s Log: Current Status of the Engine<br>August 20, 2026<br>· Joshua Thijssen

30 m · sunlit zone<br>It has been over three years ago since the first commit on the Gosub engine:<br>commit 9b59cad2b63ca21d317a379854fcd6495fc0a586<br>Author: Joshua Thijssen<br>Date: Thu Aug 10 17:03:16 2023 +0200

First commit!<br>Since then, a LOT of work has been done and although we are nowhere near a &ldquo;real&rdquo; browser, I think it&rsquo;s quite remarkable what we have achieved in this time period.<br>Components<br>An &ldquo;engine&rdquo; is not just one single thing. It consists of many smaller moving parts. Especially since the goal of our engine is to be modular: we need to be able to take smaller pieces out of the engine, and replace it with something else. And we do this in practice each day: we do not have a single rendering backend, but we are able to replace the rendering engine on each compile and do so. We can test our engine on Cairo, Skia and Vello backends. We even can change the font system (pango, parley, skia) if needed.<br>But besides the engine consisting of many smaller parts, we also have a lot of other systems currently up and running that either supports or uses the engine itself.<br>Gosub Engine - The engine itself<br>Gosub Lattice - Layouting system for HTML/CSS tables<br>Gosub Sonar - Network stack<br>Gosub Beacon - Our experimental browser<br>Gosub Baleen - A adblock/filter system in the works<br>WebWeekly - A website that automatically screenshots sites with the latest version of the gosub engine.<br>CSS type generator - A generator that will generate the needed format for CSS properties.<br>What did we do the last few years<br>First off, we gained HUGE amount of knowledge on pretty much all aspects of writing a browser. From simple things like how to parse an HTML file quickly, to the more advanced things like how to safely deal with shared memory graphic tiles.<br>We started with an engine by pretty much just starting. It needed an HTML(5) parser, so we created a parser. Not good, not fast, but able to pass the rigorous libhtml5 tests so capable enough. We needed a CSS system. We needed a way to generate a document structure and a way to convert this into actual pixels on the screen.<br>So all these components are by itself a huge undertaking but we started out simple. Since our goal is modularity, we tried to make sure that we could simply plug in other and better systems when we were able to manage to create them.<br>At a certain point, we sort of found out how we wanted to use the engine: we created multiple proof-of-concepts besides the engine itself that would give us an idea on feasibility. This resulted in three distinct new components: a new network stack, which we converted into a separate crate: gosub-sonar. An API on how we expose the engine to the outside world: here is where zones, tabs and the eventsystem was born. And we created a rendering pipeline that would be able to not only use several different backends, but also was a multi-staged pipeline allowing us to quickly rerender things when we need to.<br>Now we had four different &ldquo;things&rdquo; we worked on: the engine itself, gosub-sonar, the render pipeline and the new api. These needed to be merged into one single engine which was, to say the least, not an easy job. We failed a few times before we finally managed to get everything in. And the result was a working engine, able to be controlled by any language and system, with any rendering backend, and with a decent network stack to deal with requests.<br>The focus shifted a bit now from getting the basics ready, to actually implementing code that allows us to decently show websites. That means, implementing CSS properties, making sure some of the edge-cases are handled so more and more sites started to actually look like sites when rendering.<br>Where we are now<br>At that point, we are deep into 2026 already. Almost three years after starting the first commit. We are working on a lot of things that might not seem like a big deal, but really is.<br>We started working on a few new components and systems which an engine must have:<br>Forms and input controls<br>This is a no-brainer, but until now, we didn&rsquo;t have the need to display input boxes or filling in forms. Now that we have a decent rendering system, it makes this a much easier task, so we are working on these form-controls.<br>Process isolation<br>Browsers operating in the most hostile environment available (apart from space). Every byte that is somehow fed into the engine must be treated as hostile until proven otherwise. It changes your way of thinking completely. Just because you&rsquo;re paranoid, doesn&rsquo;t mean they are not out to get you.<br>Therefore - again in a separate proof-of-concept - we tried to realize a complete multi-process and isolation system that should be on par with Chromium and Firefox systems. I&rsquo;m sure we cannot guarantee a complete watertight system, although submarines should, but it should be...

engine gosub system able rendering needed

Related Articles