The Hotdog web browser and browser engine
github.com
github.com
The browser is far from stable, spec-compliant, or even really useful, but, I'm slowly working on bringing more features and supporting more sites.
When the specs are constantly churning in order to keep one gigantic company's browser an effective monopoly, maybe it isn't really that important to follow them so closely... especially if you're aiming for something more like an actually-user-friendly (i.e. with the UI and controls you actually want, not some designer's flavour-of-the-month) hypertext document viewer than a web application runtime/OS. From that perspective, even HTML4+CSS2 would probably be quite sufficient.
Maybe if enough of these "minimal browsers" show up, people might even realise that basic HTML and CSS is quite sufficient for a lot of things and start creating simpler, more efficient sites, thus dissolving the monopoly. I realise it's going to be extremely difficult to fight corporate interests, but one can hope and dream...
I want to search for information and share information with people.
I don't want any more from the net. It feels like what we want is being surpassed by those who want to monetise us.
Sure it may be bloated overkill for something that could have just been a plain text file, but it is nice to have real time and interactive visualizations.
Plus it is nice to have the choice to use mobile websites instead of using the access hungry native apps.
Application delivery though the web browser is just hella convenient. It's really hard to give that up for some "native apps and static documents" utopian dream.
Why?
Because desktop computing used to be a battlegrounds for commercial vendors in the late 20th century, and the goal was establishing market dominance. Being able to control who can run what on a platform was / still is part and parcel towards establishing that goal.
Web browsers changed the game. They are a threat and an opportunity at the same time. A threat because gave anyone a chance to escape from a native context and run whatever you want in a browser regardless of the platform your on. No more having to compile and distribute the same application for a dozen potential targets.
Microsoft was so adamant on having Explorer bundled with their OS in order to establish control over the future evolution of web applications on the information highway. And they got famously burned for it in that 1999 anti-trust case.
Application delivery as you know it today is convenient, but that came at a price. Vast amounts of resources have been poured into Chromium over the past two decades to bring that experience to billions. And it didn't happen out of sheer altruism on the part of Google.
> Microsoft was so adamant on having Explorer bundled with their OS in order to establish control over the future evolution of web applications on the information highway. And they got famously burned for it in that 1999 anti-trust case.
Totally. Microsoft was using it to try control the web as a Microsoft platform. Hence their push for ActiveX over flash/applets/javascript.
> Vast amounts of resources have been poured into Chromium over the past two decades to bring that experience to billions. And it didn't happen out of sheer altruism on the part of Google.
At the time Chrome was started it was a more or less altruistic move from Google, from the user's perspective at least. Google was heavily reliant on the web for income and existing browser were slow, had widely varying standard support, and lots of security issues. Chrome forced their hands, by showing that a web browser can be fast and "secure."
Also at the time Google have a significant platform of their own. They would be at the mercy of the platform gatekeepers. So pushing an open platform that anyone can publish on was in their own interest.
Since then Android has taken off and Chrome has morphed into arguable spyware, but at its inception it was a good thing for users.
> Application delivery as you know it today is convenient, but that came at a price.
A price to whom though. To those who would try to lock down our platforms and seek rent over application delivery? I guess I don't really care about how much it costs them ;).
Now I'm a very unique slice, I only take quick contracts from upwork and such as I don't have the pedigree to get a proper job in coding.
I wonder if there are any projects that help people find sites that don't use JavaScript. Search engines that only index JavaScript-free sites, old school "blog rings" that only link JavaScript free sites together.
You can use a plugin like NoScript to control what scripts run, it's a pretty decent compromise.
The notion breaks as soon as your users want to use youtube or gmail, which for some mysterious reason keep insisting on using all these useless "standards" even though they have no benefit to the user.
/sarcasm (sort of...)
Firefox is the only browser we use and we watch Youtube every day. If it broke, I'd know about it or hear about it.
It never breaks.
Performance. That makes the sabotage so insidious!
https://tech.co/news/google-slowed-youtube-firefox-edge-2019...
If they are close to the edge cases of the spec, just not testing on Firefox will break it. By negligence, rather than malice.
There are alternative and better ways to access gmail and YouTube.
I just found this one for youtube and twitter for example: https://www.reddit.com/r/privacytoolsIO/comments/jlkqxa/any_...
For gmail, use an IMAP+SMTP client of your liking, of which there's no shortage.
Yes, as long as a requirement is something those corps control, they'll essentially control you.
The answer is to ignore support for gmail and youtube and hope their reputation catches up to them - specifically youtube alienating creators and becoming yet another corporate on-demand television-clone.
That source will contain stuff like autocomplete and htmx or similar.
If something doesn't work with that it asks you if you want to enable "bloat mode - warning: unsafe" and I the user chooses it enables a full browser engine.
You can temporarily re-enable scripts for a website, or "lock" the reactivation for websites requiring Javascript and you need to use regularly.
My computer is once again cool, fast and quiet.
Gopher is a dead simple text-based protocol:
https://en.wikipedia.org/wiki/Gopher_(protocol)
Project Gemini is a slightly more powerful protocol for the small web:
https://gemini.circumlunar.space/
The tilde (~) community, which makes the small web social:
I recommend you have a look at James Tomasino's Youtube channel, where he shows a bunch of cool stuff going on around Gemini, Gopher and tilde:
https://www.youtube.com/watch?v=DoEI6VzybDk
This is not for everyone, but if what you want is just basic text and functionality that can work from a terminal (though there are GUI browsers too), then this is perfect.
Shameless plug for my own Gopher Client:
http://www.mattowen.co.uk/gopher/gopher-client-browser-for-w...
[0]: https://www.brow.sh/
RSS in a terminal saves time and energy.
It’s been fun revisiting it as an adult!
A voice UX was surprisingly easy to implement (given a good platform to build on), newer standards just get in the way of the experience!
I'll tackle a visual one soonish...
Gemini doesn't allow for embedding images in web pages - which makes it vastly inferior to the web for any kind of interesting documents.
Imagine reading a research paper where, in order to view figures and equations, you had to follow a link to a separate object. No font control. No two-column layout. No anchors to allow you to jump to sections of the document. No metadata to inform you of the authors.
Gemini and Gemtext actively inhibit learning and knowledge dissemination by obsessing over pure plain text, which is bad at those things.
This statement is incorrect. Gemini clients can absolutely display inline images.
The difference is that default behavior is to require a user action to load a resource. An image can be a link, but when a user clicks that link it can turn into an inline image. This is how clients like Lagrange work. In other words, inline images can have delayed loading.
If a user understands the consequences (tracking, network usage) of doing so, this behavior can be changed to load images by default; however, authors should not expect users to do this and should write their documents accordingly.
Personally, I prefer a document to not have inline images; my gemini client opens images in my default image viewer instead. My window manager makes my age viewer float above other windows by default. This way, images "pop out" into a separate window that I can keep viewing as I scroll down in a document; I never have to scroll up to look at the last image.
> Imagine reading a research paper where, in order to view figures and equations, you had to follow a link to a separate object. No font control. No two-column layout. No anchors to allow you to jump to sections of the document.
These are all client-side features. Half the point of Gemini is for the user agent to determine presentation and leave semantic markup to authors. I don't want weird fonts or multi-column views, but you do; Gemini lets us both get what we want instead of having everyone see a one-size-fits-all presentation. Clients like Kristall even give you a TOC in the sidebar.
> Gemini and Gemtext actively inhibit learning and knowledge dissemination by obsessing over pure plain text, which is bad at those things.
Text is the only form of communication that can be understood by the sighted, blind, deaf, and machine (translation, etc) while being stored and transmitted without information loss. Text is good at knowledge dissemination.
"clients" and "can" - it's not mandated by the spec, therefore, "Gemini" does not do it.
> The difference is that default behavior is to require a user action to load a resource.
Extremely non-conductive to thought. Again, take the example of a research paper - the difference between having every figure and formula appear by default and having to click-to-load is massive, with the latter being un-ergonomic and inhibiting comprehension and flow.
> These are all client-side features. Half the point of Gemini is for the user agent to determine presentation and leave semantic markup to authors. I don't want weird fonts or multi-column views, but you do; Gemini lets us both get what we want instead of having everyone see a one-size-fits-all presentation. Clients like Kristall even give you a TOC in the sidebar.
You can do exactly this same thing with the modern web with CSS styling and userscripts - the difference being that the web gives you saner defaults that are more conducive to thought, and Gemini clients seem to give you less-sane defaults that are less conducive to thought.
> blind, deaf
This is a limitation of being blind or deaf - someone who's blind wouldn't be able to view a sunset in real life. Obviously, though, while text can be read/listened to by someone who's blind or deaf, that doesn't make text a replacement for images, formulas, or interactive animations - those with those disabilities simply can't perceive the native forms of those things. Several hundred or thousand words describing a layout for a PCB is not equivalent with an image of the layout.
...and, modern webtech has accessibility properties that allow for annotation of non-text media with text. Gemini? Does not.
> machine (translation, etc)
False. Machines cannot understand plain text - it must be parsed. English (and other natural languages) are not machine-parseable, and machine-readable plain text had no reason to not exist as structured data in the first place.
> while being stored and transmitted without information loss.
All of the other kinds of electronic data that exist in the modern web can also be stored and transmitted without information loss, so this is not a special property.
> Text is good at knowledge dissemination.
Relative to text+formulas+images+interactive visualizations? Absolutely false.
Show me how to write out all of the variants of the Schrödinger Equation[1] in plain text, while still making it as readable, understandable, and useful as the mathematical formulas.
Show me how to phrase, in words, a 3D circuit layout, such that it's easier to understand and manipulate than an interactive model.
Show me how to describe the sound of a violin.
Webtech gives you text and images and sound and formulas and interactivity. Gemini gives you text, and that's it. Having to click a separate link to go to a separate object makes it not "part of Gemini" and the user experience is clearly, massively worse.
Prohibiting clients from loading inline images is not mandated by the spec either, so Gemini doesn't prevent it. Loading images inline is fine, as long as it's triggered by a user action. A core idea of Gemini is user control: network requests shouldn't happen without user consent just as presentation should be determined by the user agent.
Non-spec-compliant behavior is also fine if it's explicitly enabled by a user; the default should be spec-compliant.
> You can do exactly this same thing with the modern web with CSS styling and userscripts - the difference being that the web gives you saner defaults that are more conducive to thought, and Gemini clients seem to give you less-sane defaults that are less conducive to thought.
Try changing your browser's default background color and you'll end up seeing a bunch of pages with black text on a gray background. Change your browser's default text layout to two columns and see how many sites still work. The featureset of the web encourages authors to use those features, which begets complexity; complexity begets fragility.
Also, I'm not sure what you mean by "sane defaults"; The "default" HTML presentation is raw markup, and isn't exactly readable. The "default" Gemtext presentation is perfectly readable; in fact, all but two of the blog posts on seirdy.one were initially drafted in raw gemtext rather than markdown. Perhaps you were referring to the default stylesheets of the major browser engines. This is client behavior, and should be compared with existing Gemini clients that focus on presentation as well.
The web allows authors to dictate presentation and deliver content with visual branding; Gemini prevents this to make the focus on content rather than form.
> ...and, modern webtech has accessibility properties that allow for annotation of non-text media with text. Gemini? Does not.
Like the Web and Gopher, Gemini links have display-text. Image links are the same. I consume Gemtext with a screenreader quite regularly, and image consumption is much less painful than it is on the Web. Knowing that users will see text before an image encourages Gemini authors to use good alt-text and to only include images when they convey necessary information that text cannot. Superfluous images are virtually non-existent.
> Machines cannot understand plain text - it must be parsed. English (and other natural languages) are not machine-parseable, and machine-readable plain text had no reason to not exist as structured data in the first place.
That wasn't my point; my point was that text can be parsed and processed by machines much better than other forms of information, improving information dissemination.
> All of the other kinds of electronic data that exist in the modern web can also be stored and transmitted without information loss, so this is not a special property.
Unless you want to load a bunch of 5mb images, you're going to need re-sizing and lossy compression. https://xkcd.com/1683/
> Show me how to write out all of the variants of the Schrödinger Equation[1] in plain text, while still making it as readable, understandable, and useful as the mathematical formulas.
I admit that Gemini isn't great at mathematical formulae. Some people are working on Gemini clients that can understand LaTeX code fences.
> Show me how to describe the sound of a violin.
Include a link to an audio file so it plays when the user wants it to. Several clients can play inline audio and video.
---
Gemini isn't for everyone and everything, and that's kind of the point. It certainly doesn't seem like something meant for you, since you seem to be focused on research papers and apps. It's not trying to replace your OS, it's trying to be a part of it. Gemini also doesn't intend to replace the Web; it intends to focus on structured hypertext. The web became a steaming mess because of the feature overload you've described; the solution is to focus on being able to do fewer things and to restrict what's possible to prevent the same thing from happening.
I don't think we'll see eye-to-eye on this, because this looks like a value-based discussion on quality versus quantity to me when I don't think one is trying to replace the other. Alternatives aren't replacements; Gemini is an alternative, not a replacement.
It's amazing how complex even CSS has gotten. And implementing HTML without the ISO SGML spec and the SGML handbook is close to impossible.
So many edge cases, so much layouting overhead, and so much damned flow root types.
Honestly in the beginning I thought "how hard can it be, it's just like XML"... I was so wrong about this.
Truthfully, if my skillset had better matched the task I might have been lured into giving it a go. On another project I considered using CSS as a styling technology and got down to really understand it in detail. I then realized how good my 1,000 yard vision really is.
I can't speak to the forces which inevitably lead to decay but essentially, for some reason every technology tries to eat the world.
CSS is trying to eat the world and HTML5 is trying to eat the world and of course Javascript is famously trying to eat the world.
All these technologies (and here's the part where I see my post begin to fade to gray) are on their way to experiencing technology's version of societal collapse.
I use that analogy because it's so so apropo.
They are overwrought, overly complex systems yielding only marginally better results and being maintained at huge cost in terms of attention, brain power and collateral damage by everyone. The benefits accrue to a smaller and smaller number of people (FANG et. al) who do not have society's best interest at heart at all and are very far from the founding principals which inspired the original vision.
A simple scriptless HTML 1.0 browser minus the blink tag would deliver at least to me nearly 100% of the benefit I get from the web which can be characterized as "seeing what is happening, seeing what other people think, learning new stuff and downloading stuff".
I would love to start a (reactionary) movement away from the current web composed of a privacy-preserving HTML 1.0 browser capable of HTTPS and people dedicated to creating pages and resources for it. I don't know of any such "movement" .
If anyone is aware of anything like this do share.
Except (half kidding but only half kidding here) augmented for things like cat videos; previous generations watched tv for entertainment, and for many people that has been partially or entirely replaced by the internet.
Well, I actually tried to start a movement for that [1].
The idea is to offload as much as possible to trusted peers, and to refine the web with a trust model where the user has to trust a website specifically to deliver expected things from the user's side (e.g. a news website should have no right to shove videos down your throat).
I also think that a lot of web browsers tackle the privacy problem wrong. "User Privacy" is not sending a user-agent to a server, or downloading a resource from it in a statistically easily detectable manner.
Real privacy is not having to download anything from the web server at all, by offloading requests to its peers. In my Browser [2] I'm trying to have every metadata, configuration or observation (and extraction) federated. I believe that the real strength of peer-to-peer is not decentralization; it is federation and liberation.
I feel like some initiative to establish a super 'light' version of the html/css specs might be a very good thing...browsers are so far gone out of the hands of individual coders or even small teams now because of their complexity.
Make a specification based on old tried and tested tech. Thinking something like a set HTML/CSS specs that can be implemented fairly easily. It is a spec that is essentially something a website can be built to knowing that end browsers/users can anticipate being able to render. It doesn't need anything new to be added into current browsers but it is simply enough that others can built their browser too.
A vague standard I figured would be that a single person should be able to implement the full spec from the ground up in about one years full time work. If done in a group in a free/open manner it could theoretically be done quicker. That said there is the old joke. Two programmers can do in two months what one programmer can do in one month.
That could then be heavily optimized and used for cross-platform apps instead of the bloated, kitchen sink approach of Electron.
For example, if we want JS then it might be worth tackling that first, and bootstrapping the rest (e.g. rendering to one big canvas to begin with).
Though I think you're restricted in feature selection more by reality than by specifications. CSS is designed with assumption of designer competence, which modern webdev struggles to achieve, a better strategy is to replace CSS with semantic markup and this way integrate with user styles.
But I have noticed that plain text is sometimes very slow to render in Chromium browsers (Chrome, Edge, Vivaldi) under heavy load. The issue may to be related to a process-per-browser-tab architecture: a bloated and fragmented block of memory attached to a tab/process can’t be easily freed / allocated. So if you’re on a tab that was previously loading lots of stateful JS, then switch to plain text, Chromium might get stuck in memory management for the tab instead of short-circuiting its architecture by allocating memory solely for the page.
I am not at all an expert here and don’t know how Chromium works under the hood. I don’t think it’s literally one-process-per-tab, I just have a vague sketch of what the problem might be here. But I think “idiots like nicklecompte have 700 tabs open and complain that tab 361 doesn’t load plain text quickly” is a problem that’s very difficult to solve in general, even if a dedicated “simple” engine might offer a lot of case-specific fixes.
Well... that's kind of exciting! Is your work public? Would love to see it.
> maybe it isn't really that important to follow them so closely... especially if you're aiming for something more like an actually-user-friendly (i.e. with the UI and controls you actually want, not some designer's flavour-of-the-month) hypertext document viewer than a web application runtime/OS. From that perspective, even HTML4+CSS2 would probably be quite sufficient.
Yes. So much yes.
(I hear the source is floating around somewhere, but without a free license it's (unfortunately) likely to attract problems.)
[0] https://archive.org/details/tucows_194462_HotDog_Professiona...
https://web.archive.org/web/20020603235020/http://www.sausag...
https://web.archive.org/web/20040605112000/http://www.sausag...
A while later I helped them track down an error they couldn't find the cause of. They asked how they could thank me and i replied "bring back feature x"
For a little while they put up a link to a "Tony-edition" on the official download site until they got the feature back in the regular release. I still have it somewhere.
Hotdog was my first html editor. Brilliant is was. Happy memories
Curious that the components are named ketchup, mayo, mustard, sauce, bun, and gg. There's an obvious omission here, although it has the advantage of being vegan friendly.
Also, somewhat related: it's a pity the Servo project is going nowhere. I don't mean to put this project down, but Servo was the only realistic shot at a truly new, truly usable Free Software browser.
Servo was primarily a test bed for Firefox and all the components that they wanted to get into Firefox eventually made it.
Ex. https://github.com/danfragoso/thdwb/blob/655eac96e4faa141cb4...
That's not an html parser. It's just some code that regexes strings looking for brackets.
Projects like this are good ways to learn and have fun, but they're many years away from being a browser, even if we limit the scope to the specs of say 2012.
Also fwiw, if you're implementing a browser use the web platform tests instead of writing your own:
Off topic, but I've encountered some more serious projects that used strange nouns to name their components. I've never figured out why, but it usually results in me spending more time cross-checking what each component does. Can anyone comment?
It’s a great conversation starter, and it’s something that will keep us smiling even when things get serious.
Thanks for offsetting that vote for me.
SerenityOS is another Indie OS effort which plans to build the entire POSIX OS, Kernel and core Apps from scratch, one of the Apps their is their LibWeb browser engine complete with their own LibJS JS VM which already passes the vast ECMAScript test suite [2]. One of its USPs of SerenityOS is being able to make changes to its code-base and instantly reboot the OS in seconds with the changes, never seen this done for an OS before, the turn around time allows for some impressive dev iteration speed.
Andreas videos on developing LibWeb/LibJS is one of the best resources I've found explaining how to implement a web browser, e.g. in this video he goes through the HTML Specs which have enough info in them to develop a HTML spec parser whose behavior is the same across all browser engines:
https://www.youtube.com/watch?v=7ZdKlyXV2vw
Most of the interesting parts of LibWeb/LibJS is captured on video that has a unique skill of being able to write code really quickly whilst explaining each step. There must be close to 100 videos on implementing different parts of the Web Browser on his YouTube channel, e.g:
https://www.youtube.com/c/AndreasKling/search?query=html
https://www.youtube.com/c/AndreasKling/search?query=js
https://www.youtube.com/c/AndreasKling/search?query=css
https://www.youtube.com/c/AndreasKling/search?query=canvas
[1] https://github.com/SerenityOS/serenity/tree/master/Userland/...
[2] https://github.com/SerenityOS/serenity/tree/master/Userland/...
It's actually pretty surprising that there hasn't been a niche surge in websites specifically meant to work well in textmode browsers, considering how many programmers claim to spend 90% of their time inside either a terminal window or in a web browser. Even now on HN I'm typing this in Firefox. And Sourcehut, too is widely acclaimed for being "simple" and/or "minimal", but it's not exactly great (or even clear) to look at in the two browsers I just checked.
Gemini in particular has quite a large amount of projects hosted on sourcehut, and sourcehut even serves pages on its new pages service to Gemini.
What about sausage, sauerkraut or onion?
Yes, simple vanilla HTML is inherently responsive. And much of the modern web is rubbish.
[0]: http://motherfuckingwebsite.com/
[1]: http://bettermotherfuckingwebsite.com/
What an odd name to hit twice in the browser world.
Then again, there's Viola, Cello, and Vivaldi though ... so who knows, maybe the population size is way larger than I pretend it is.
In particular a browser engine that allow the programmer to easily turn off things that are not used and take away from performance will probably be a real killer.
Good luck!
It definitely shows how mature and versatile golang has become.
Are you building this based on a tutorial?
With that said, we need more independent web browsers. Good for them.
The entire hardware/software industry is controlled by giants. Disrupting this can no longer be done by a group of hackers as it was possible in the late 80s and early 90s.
I haven't thought about that in a long time. Not since I was using Konqueror + khtml engine.
Servo passed Acid2 in 2014: https://research.mozilla.org/2014/04/17/another-big-mileston... This is really far behind.
https://raw.githubusercontent.com/danfragoso/thdwb/master/im...
That site had its own discussion on HN many years ago: https://news.ycombinator.com/item?id=6791297