.TH my-browser 7 .SH NAME my-browser \- My Baseline Browser .SH AUTHOR Artyom Bologov .SH SYNOPSIS Browsers don’t have to be huge, but they have to be usable. This is my list of vital browser features one cannot live without. .SH TEXT .P Web is hard. Implementing a compliant browser is a doomed enterprise unless you’re Google, Apple, or a whole Open Source community. .P But there’s a new breed of browsers like Dillo that focus on a restricted set of Web features. And ignore a whole lot of other “bloat.” Which is a good approach, I think. However, there’s no list of actually useful features that are not “bloated” and thus should be included in a browser. (Consider this a kind of informal standard.) So here’s my list of essential browser features (likely to be updated often:) .SH Hyper… Text! .P A revelation: a browser does not have to be an app platform. It can be a mere hypertext viewer. Yes, you wouldn’t browse Facebook with this, but do you need to? (I know, not the best argument.) .P So my idea of a baseline hypertext browser is that. Hyper… text. .SH smolweb HTML + Shortcuts .P .UR https://smolweb.org/specs/index.html smolweb HTML .UE is an essential read for web devs. It specifies a “safe” subset of HTML that any browser can easily implement. And that actually does not ignore Accessibility, like many other proposals. .P The only problem with smolweb HTML is that it’s… not HTML? It’s XHTML, which cuts out a lot of useful historic shortcuts, .UR https://html.spec.whatwg.org/#closing-elements-that-have-implied-end-tags like implied end tags .UE . So my perfect HTML subset is smolweb + lenient parsing. .UR https://developer.mozilla.org/en-US/docs/Web/HTML/Guides/Quirks_mode_and_standards_mode Quirks Mode .UE , basically. .SH Basic CSS .P God I love CSS. I am a heavy \fB:has\fP and pseudo-elements addict. However, I also realize that these are not friendly to smaller browsers. .P So my recommendation is this: stick to .UR https://smolweb.org/css-grading.html grades A-C of smolweb CSS .UE . Should be enough for basic styling. Without the need for essentially a .UR https://lyra.horse/x86css Turing-complete styling engine .UE . .SS Userstyles! .P Dark mode, in the simplest instance. And the ability to override all page styles, in a more complex instance. Preferably supporting .UR https://userstyles.world existing userstyles formats .UE . .SH Basic Interactivity: Forms and Commands .P Even a barebones hypertext browser needs a way to communicate with servers. There is a tool for that: HTML forms. Supporting these is enough for basic interactivity. .P (A minor pet peeve: please support \fBmailto\fP actions in your forms, as these are a nice way to bridge the worlds of Web and email.) .P \fBnew-menu (7)\fP Add Invoker Commands to that and you have an actually modern declarative interactivity in a browser. I mean, Invoker Commands are popover-heavy, which defeats the point on CSS (section \fBcss\fP). But they are a good direction anyway! .SH Essentials .P Browsers had these for a whole eternity. We don’t want to abandon these: .TP .B History Might be as simple as linear stack history. Or as involved as a .UR https://web.archive.org/web/20250927171902/https://nyxt-browser.com/article/global-history-tree.org Tree-based global / tab-local history .UE .TP .B Text search Again, can be very basic, but I’d also prefer to have case-(in)sensitivity and regex built-in. .TP .B Text fragments .UR https://developer.mozilla.org/en-US/docs/Web/URI/Reference/Fragment/Text_fragments Text Fragments .UE are a relatively recent feature. They have ugly syntax and weird behavior. So they’re proper Web citizens! Anyway, Text Fragments allow linking to any piece of text on the page. Without relying on the author adding an ID to everything. It’s an empowering thing and I want to have it in my browser. .TP .B Bookmarks .UR "https://learn.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/aa753582(v=vs.85)" Netscape browser format .UE , with all its quirks. It’s probably the most supported and simplest one. Baseline, in other words. .TP .B Tabs Yes, early browsers had no tabs. And tabs imply a certain multi-process nature required from a browser. But, overall, these are too good to leave them out. Please give me some tabs. Vertical tabs will do too. .SH DOM Modifications: Processing Instructions and Declarative Templates .P I know, I know, these are too recent! However, they are useful and lightweight and can be implemented in a JS-less browser. So why not have nice things? .P .UR https://html.spec.whatwg.org/multipage/scripting.html#the-template-element Processing instructions .UE (euphemized as Out-of Order Patching by Chrome) and \fB