0 m · surface

Current status of the project

Gosub is in its very early stages. Since Gosub is not a mere shell around an existing engine, it will take time before we can introduce a browser. Here is where each core component stands today. At this point, we have a multitude of components operational that allows us to combine them into a demonstration browser: it can render some pages (but most of them are still not working), we can click hyperlinks, and browse easy and non-javascript sites. We are able to demonstrate modularity by having this demonstration browser in a multitude of toolkits (gtk, egui, winit) and backend renderers (cairo, vello, skia).

25 m · the shallows

HTML parser

Working

Almost all HTML5 documents are parsed correctly, and the parser passes nearly all tests from the html5lib test suite. Current focus:

  • Optimizing performance and memory usage. We are almost on par with mature parsers.
  • Improving handling of invalid HTML
  • Reducing unnecessary memory copying
  • Separating parsing from the tree-building phase
  • Advanced functionality like speculative parsing

Network stack

Usable

Our network stack (called "sonar") is capable of handling requests and deals with many aspects a network stack needs to worry about:

  • Streaming and buffered data
  • Priority queing
  • Cancellation and timeouts
  • Consolidation
  • Retry mechanisms

But a lot is still missing:

  • Dynamic configurable settings
  • HSTS
  • CORS
  • HTTP Chaching

CSS3 parser

Proof of concept

Our CSS3 parser is able to parse most of the CSS3 stylesheets out there, but it is not an optimal system. We are currently building a new CSS3 setup that we can implement, but we should be able to use mature systems like Stylo without too much effort as well.

Render pipeline

Maturing

A lot of work and a lot of optimization needs to happen in the render pipeline of a browser. We have set up a render pipeline that allows us to do that. Depending on the action (mouse movement, scrolling, hovering, loading), the render pipeline decides which stages needs to be redone, and tries to keep computations at a minimum for fast response times. The pipeline is backend agnostic, so it doesn't matter wheter you use a backend running on cairo, vello, or any other system.

  • Multi stages pipeline
  • Backend agnostic
  • Caching and pre-rendering for fast scrolling

JavaScript engine

Early stage

An initial implementation built on V8, designed behind a pluggable interface so other engines can be swapped in later.

  • V8 integration through the pluggable engine API
  • Basic console API implementation

Engine foundations

Working

In order to call the engine, we need a clearly defined public API for developers to use. We've created and merged this into the engine and allows to set up complex environments with multi-tab, multi-zoned pages that all can behave differently when it comes to cookies, sessions and settings. This allows us to have private sessions and containerized pages out of the box. Log into websites with multiple users at the same time, or as a developer see side-to-side scrollable views of the same page.

80 m · open water

Want to move a component forward?

Every item on this page is an opportunity to contribute. Pick one and dive in.

- seafloor reached · resurface at ↑ 0 m -