The topic of web browsing and how the web should look like, has been occupying my mind for a very long time.
I have written a few articles about it in the past:
I'm not opposed to the web as it is, but I'm looking for a web experience that is different from what modern websites or modern web browsers are giving me.
I think the creators of the Gemini protocol had the right idea when creating the specs and markdown format. Its restrictions force the users to create the type of websites and content that I want more of. But the fact of the matter is that most web sites are served via HTTP. This doesn't make it very accessible.
I like using the text-based browser Links, to browse simple, static websites. Its minimal UI does not distract from the content of the page. I can set my terminal to different colors and fonts to my liking. I have used Links to improve my website so that it easy to read on text-based browsers. But it is missing one feature that I would really like.
I am searching for a very specific web browser and browsing experience. There is a technical but also an emotional aspect to it. I wouldn't exactly call it nostalgia, because even in the late 90s, early 00s, the web was already quite rich in content and multimedia. But browsing through a well made personal homepage, reading the musings of its creator, and jumping from homepage to homepage, never knowing what might come next - I feel like this is something that has been lost.
The same goes for the creators of personal homepages, who used the limited tools to create really unique experiences for their users. If you wanted to relive this nowadays, you would have to embark on a search for fringe communities of the web, that still know what cryptic symbols to enter into their machines in order to summon the web demons.
When it comes to the technical side, that's quite easy to define. I'll start with the most important feature of the web browser first.
The browser treats HTML (.html), Markdown (.md), Gemini (.gmi), and text (.txt) files as browseable web pages.
This means that if you browse to a Markdown file it will automatically format and display it as if it is an HTML web page. As a user, you can continue browsing the web undisturbed. As a website creator, you don't have to convert the Markdown into HTML so that people can view your website.
The same goes for Gemini files. If you want to browse the Gemini space, you either have to use a web browser that supports the Gemini protocol, or the website creator has to convert the Gemini files to HTML and serve them via HTTP. Why not serve Gemini files via HTTP directly.
And last but not least, if text files contain URLs, the URLs are displayed as links that you can click. Otherwise the text files are displayed as-is.
The browser uses HTTP/HTTPS to communicate with the web server. It only uses GET requests to retrieve data from the web server. This makes it a read-only browser.
It only does one download operation per web page. All content must be served at once.
It does not store cookies on the user's machine. Cookies are not supported.
It does not execute scripts that are embedded in the web page. JavaScript is not supported.
The browser leaves it up to the user to define which color scheme and font should be used to display the web page. CSS is not supported.
The user has absolute control. If the user does not interact with the browser, nothing happens. Nothing happens in or outside of the browser without the user knowing it.
The browser is a text-based browser, which means that it only displays text. Any multimedia content has to be downloaded to disk and opened with the appropriate software.
The argument here is that I already have an operating system that can play music and video files, open images and PDF documents. Why would I need a browser that does the same thing?
The purpose of a web page is to link to information and multimedia content.
Websites that work well on text-based browsers usually don't have intrusive advertisements.
The browser should do one thing, but do it well without crashing.
It must have a small footprint on disk and in memory.
It must be responsive.
As you can probably imagine, the scope of the modern web and the expectations of its users, makes it exceptionally difficult to develop web browsers. Web browsers have become as complex as operating systems.
There have been attempts to simplify usability aspects of browsers, with projects like surf, uzbl, and qutebrowser. But they all use already established web engines like WebKit, Chromium, Gecko, and others. With these engines, you can only provide superficial improvements to how the browser looks and feels. These browsers may look minimal but they are still carrying all the unnecessary baggage with them.
In my case, using an existing web engine, only to try to remove everything that I don't need, might be more complicated than creating a small web browser. Even if this means that the web browser is very limited in its use.
I also looked for a stand-alone WebView implementation that only layouts and displays the HTML that you give it. Meaning that the WebView issues callbacks when the user clicks on links, or when images have to be loaded, but you have to provide the backend.
Another option would be to modify the source code of an already existing text-based web browser, but I decided not to. Even some of them do more than I need, and are created with a specific use-case in mind.
I guess this means I have to write my own text-based web browser?