How and why Hominis was made

What led to Hominis, how early development went and our branding

Why a browser

I have a tendency to really get into context switching, multiple (eternal/never-completing) projects going on at a time, sudden spurs of inspiration, research to revisit later, all of which I just keep in open tabs. I could (and have tried) better leveraging bookmarks, even extensions like Simple Tab Groups by Drive4ik[0] and opinionated PKM clippers, different browsers per project, the lot. Everything feels either overly restrictive or just not “me”.

To date, I have 312 tabs open in Safari, 57 in Chromium, 176 in Firefox and 492 on my iPhone. I have found to my chagrin that Apple has a hard cap of 500 tabs per profile and curse on the regular how they handle exceeding that limit. Every time I have to restart a browser, mainly because CMD+W and CMD+Q are far too close, I dread that the previous session might be lost because, naturally, it has been 10 minutes since my last manual save and thus 50 new tabs have been opened and 40 old ones closed. History is something else too. How come the might of Alphabet, Apple, Mozilla, etc. are incapable of giving us even the most basic controls over time, date, search, etc.? Besides Vivaldi, that is unusable to truly retrace one’s sleep-deprived thought process from last week. And while yes, technically, it is a “window management problem”, unfortunately, I am stuck on an OS which gives little to no control in that regard.

So yeah, that’s where I was at. And I had, for over a decade, been fascinated by opinionated UX work. Fully aware how popular that philosophy can be, especially in the FOSS community, but I do like when HIG goes beyond the beaten path and feel it can lead to some great things. At this point, I’ll refrain from commenting on Cosmic and how much I wished they’d actually taken far greater steps to try new things beyond what they had with Gnome+Extensions before. Suffice to say, I greatly appreciate Gnome for their willingness to do what they truly believe in, sometimes bringing truly great innovations and the stubbornness that tends to come with that. Nail me to the nearest cross if you must.

One fascination that I likely acquired thanks to BumpTop[1] and similarly insane Windows XP and X11 era experiments was using depth and expanding the desktop (or canvas) beyond the screen. Due to that, I have been experimenting with some ideas in Flutter/Dart for a while. Nothing good, nothing really groundbreaking but I felt that if that could be applied to all manner of content (from the PKM staples like notes and docs to live webpages), there might be something here.

Lastly, the PKM conundrum. You know the one, spending more time tagging your content and maintaining a system than actually working. In my mind, ideally, any system should automatically arise from your personal use, not need a lot of intervention. Placement over writing rules, get sane defaults for tags and linking (overwritable of course) as a starting point to take away some paralysis and distraction.

Given all this, what led to the release of a full on Firefox fork is likely not a mystery, though how we got here might still be of interest to some.

Starting over and over and over

I started in 2025 with a PWA as I stubbornly believe in them to this day, but as the experiments grew, so did my want to have something more than an occasional iFrame. Having an infinite @xyflow/react[2] canvas for documents, notes, images, etc. and creating visual links across it is nice, but the limits were unbearable. Still, I learned a lot, partly because I got the hair-brained idea to leverage PartyKit for some CRDT syncing between my systems. Of course, what a pre-alpha experiment with one user needs is sub-second syncing of tile position, size and state across multiple systems. I blame Ink and Switch in lieu of taking responsibility, but will admit that, while Hominis (currently) has no support for real-time canvas based collaboration at low latency, what I learned back then to make it work, especially in terms of interpolation and other boldfaced lies to improve experience and feel has helped guide how the canvas is built in the final release. Also, while Y.js is not shipped in Hominis today, it does contain workspace sharing via a simple file.

After a while with that PWA experiment, I had to take a deeper look into existing forks of web browsers, both FOSS and closed, as I yearned for my web tabs to be first class citizens next to the other content, not limited by iFrames and the accompanying restrictions. No need for web clipping, no need to embed, no need for management.

Browsers are good at making massive losses[3], this isn’t a lucrative business, but stuff like Zen[4] and Refrax[5] do show that there was a (niche) appetite for new concepts. And there was a lot I could learn from each, what worked, what didn’t, launch day mistakes, the lot. Unashamed to admit that. Still, making a browser fork, it sounded impossible and frankly, it may have been better if I had kept it there, among a pile of ideas I was sure I should give a go, but never got around to.

Something stuck though and as my PWA experiment became less sufficient, my delusions grew. So I decided to look into every viable base from Servo to Chromium hoping to find that what I wanted was simply not possible. I mean, there is a reason why even browsers with split view and other such features never commit the cardinal sin of stacking web content. On Chromium for example, this isn’t just hard but practically impossible, at least if superfluous things like “interacting” with a website are of concern to you. Unfortunately, around late December 2025, I found that Gecko could handle it. Not well, mind you, the first experiment was code so bad, it’d violate a convention or two, performed even worse than it read and was about as pleasant to use as a root canal without anaesthetic, but it worked. And at that point, I could not stop.

At some point I’ll publish a run-down of each part Hominis contains, how they interact, what has been reused from upstream, what was modified and why, optimisations and (not particularly) clever hacks. A post on the canvas viewport, one on the workspaces, etc. Will be fun for all ages. For the time being, I’ll just say that I am gratefully reusing the very pleasant Places[6], a SQLite DB shipped with Firefox that manages history, bookmarks, tabs, etc. That battle tested, well documented DB handles all manner of data a browsing experience requires in a format I could understand and build on.

From early 2026 on, I had a rough idea of what I wanted, but not a line of code from then survives. I restarted from scratch multiple times. Sometimes due to gaps in my knowledge which led me down a hard to recover path, sometimes because the code became hard to maintain or even parse for me, sometimes because I simply realised that while everything worked as it should, I could do better. Thankfully, we live in an age where MVP and beyond are achievable in record time and, while throwing out working code can be annoying, it isn’t devastating, especially if only a few days later, I got a better result out of it. FireForge[7], the CLI tool I built to drive my patch based development process, has grown subsequent to every learning I have made and its changelog is something of a cross section of previous attempts at getting Hominis into a shippable state.

Despite all of this, I am willing to admit that I very much still expect bugs, dread security issues affecting users and would hate nothing more than data loss during use. Every time a browser crash has made me lose my open tabs, it feels like Caesar had come back from beyond the grave to rekindle the Library of Alexandria. Very much would prefer not to be responsible for that feeling in others.

Branding

No image shipped with Hominis has been “generated”.

The logo was sketched by me in Affinity Designer. Nothing special, simple shapes, ictool is used to export for Liquid Glass support on macOS. Incidentally, Apple CLI tools could be better documented and more consistent, but c’est la vie. Got the idea to change the colours with the seasons, which quickly turned into one for each month. A brief distraction in the middle of the project that I have carried over into this website.

Each of the months.

The Hominis mascot is a marten and was drawn by the illustrator John Poh (Johnery) under commission, with the copyright assigned to my company, Noduz e.U.

The hand-inked sketches of the marten in nine poses: two main poses, incognito, welcome, protected, searching, insecure and no connection.
The original ink sheet.

From there, John did an amazing job turning these sketches into these:

The marten, protected pose
Protectedthe trust panel when protection is on
The marten, maximum blocking pose
Maximum blockingand the breach alert
The marten, welcome pose
Welcomethe start page
The marten, private pose
Privatethe private start page
The marten, searching pose
Searchingempty history and bookmarks
The marten, no connection pose
No connectionthe network error page
The marten, insecure pose
Insecurecertificate and security errors
The marten, resting pose
Restingsettings pane and onboarding

Truly incredible. I am incredibly happy with how these turned out and, while it was objectively premature to the nth degree to commission art for a browser that, at the time, even I didn’t use, I really like the way it worked out. I needed icons anyways and while I can make simple shapes, I am very much not the person for that job. Tried to use the marten sparingly to keep it a nice treat rather than overbearing/in your face.

References