Melonade blog

Idea Exploration: Making a web browser in 3D

Published on the 27th June 2025.

So, the web is a very spatial space. We use spatial analogies all the time. However, I do not know of any tool that tried to render the WEB content in a 3D space. Traditional web browsers are 2D. and it’s so difficult to make a browser.

What is a browser in the first place?

According to wikipedia:

A web browser, often shortened to browser, is an application for accessing websites. When a user requests a web page from a particular website, the browser retrieves its files from a web server and then displays the page on the user’s screen. Browsers can also display content stored locally on the user’s device.

Among the current web browsers, there are only a few layout engines. All of these layout engines are 2D. When making a web browser, AFAIU, there’s four layers:

  1. Communication layer, responsible for querying and retrieving the resources.
  2. Layout engine, responsible for converting the resources into a visual representation.
  3. Javascript engine
  4. User-side interface, responsible for presenting preferences and configuration of the other two.

Let’s now prioritize them in order of implementation for implementing a 3D layout engine:

  1. Is mandatory for a MVP, but can be mocked until late. AFAIK a basic communication layer should be quite fast to setup in most context, HHTTP queries on URLs is common and should have helper libraries in most high level languages.
  2. It’s the meat and bone of the project. Design and implementation should start from here :)
  3. Can do without even for a MVP. Native HTML/CSS interactivity provided by the layout engine is enough for a MVP.
  4. Will probably be mandatory for debugging and manual testing.

2 > 4 > 1 > 3

What should a layout engine support exactly?

Naive idea before researching: HTML content, User controls on the display (scrolling, hovering, …), CSS rules, some native interactions, in this order of priority.

What about the accessibility tree, shadow tree and preprocessing of the HTML?

Looking at a benchmark for browser like https://html5test.com/ , it gives a better idea of what is expected. This is probably a bit too complex for us right now.

I guess user agent is a wider definition than web browser, and it fits quite well my idea, without creating too much expectations.

https://github.com/cbracco/html5-test-page looks like much more reasonable expectations