Home Links About

Dev log: Creating a browser

For a while now I have been thinking of writing my own browser. The reason is that nowadays, when looking for a browser for daily use, there seem to be only two alternatives: 1. Something based on Chromium and 2. Firefox.

Everything Chromium-based is out of question for obvious reasons and Firefox seem to get worse every year. Of course there are some other alternatives such as Webkit-based browsers (which is basically the same as Chromium-based), text-based browsers, dillo, netsurf, etc. However, none of these fill the role of Firefox.

Therefore I was thinking of creating my own. Of course, everyone online is convinced that this is an impossible task for one person, but that is not a valid reason to not at least try it. When planning this out, I believe it can be done in a finite amount of time.

Why not just improve netsurf/dillo/...?

Because these are written in C. I have nothing against C as a language, but I believe that I do not have the skill required to write a browser in C without introducing security issues. That is why I have settled on Rust.

Goals and non-goals

One of the biggest points of criticism for me on Firefox is that it contains lots of features that I don't need, like Pocket, that screenshot function, sync, etc. To not run into the same mistake I believe it is sensible to define what features the browser should have and which can be avoided.



The browser will follow the suckless principle. This means it won’t have a lot of features that other browsers have, since better solutions are already available:


Based on these lists, I think it is possible to derive the tasks that have to be completed:

This would be milestone 1: An application which is capable of displaying plaintext web content. That is enough to read the US constitution or the fidonet policy. The next tasks would be:

Milestone 2: Being able to read plain-text HTML pages. This should be enough to read the essays of paul graham. The next task would be HTML and CSS:

Milestone 3: HTML and CSS support complete. This should allow one to visit any websites that do not require JavaScript. HTML audio and video should work at this point.

Supporting JavaScript will probably the biggest task by far. Therefore I am not sure if before doing this any smaller tasks should be integrated (e.g. print support); however, this task list will change over time anyways. I expect new ideas and goals to emerge as the implementation process continues.

Part 2