Waystone Browser: One Window for the Whole Internet – Even the Parts Most People Forgot About

I've been messing around with computers since before most of the folks reading this were born. I watched the internet go from a handful of university terminals and bulletin board systems to the bloated, JavaScript-everywhere, ad-tracked monster it is today. And somewhere along the way, a few people decided they'd had enough of all that noise and built something quieter. I'm talking about Gemini, Gopher, and some of the other small protocols living out on the edges of the web.
The problem was, if you wanted to browse any of that stuff, you needed a separate app for each one. Lagrange for Gemini. An old Gopher client for Gopher. Firefox or whatever for the regular web. That started to bug me. Why can't one browser just handle all of it?
So I built one. I called it Waystone Browser.


What It Is

Waystone is a multi-protocol GUI browser for Linux. It handles five different protocols in a single tabbed window:

You type a URL in the address bar, whether it starts with https://, gemini://, gopher://, spartan://, or titan://, and the right thing happens. Cross-protocol links work too. Click a gemini:// link from inside a regular webpage and it opens a Gemini tab. Click a web link from inside a Gopher menu, same deal.


Why I Built It

Truth be told, I just got tired of context-switching. I spend real time in Geminispace. There's a whole community out there, personal journals, technical writing, interactive spaces, even BBS-style stations where you log in with a client certificate. None of that fits in Firefox, and it shouldn't have to.
But I also still use the regular web. I'm not a purist. I need to look something up on a normal website the same as anyone else. So the answer wasn't to abandon WebKit, it was to wrap it alongside native renderers for the text protocols, all in one window, all sharing the same bookmarks and history.
I've been around long enough to remember when Gopher was the web. Before Tim Berners-Lee's thing took over, Gopher menus were how you navigated information at universities and research labs. It feels right to give it a proper client again in 2025 rather than leaving it to decade-old command-line tools.


The Technical Side

Waystone is written in Python, using GTK 4 and Libadwaita for the UI – that's the GNOME toolkit, gives it a clean modern look, dark mode support for free, and plays nicely with Flatpak packaging. Web rendering is handled by WebKitGTK. The Gemini, Gopher, Spartan, and Titan clients are all native Python, async, non-blocking.
Data lives locally. Bookmarks, history, certificate trust records, and client certificate identities are all stored in a plain SQLite database at ~/.local/share/waystone/waystone.db. Settings are a JSON file. Nothing phoning home, nothing in a cloud, nothing you don't control.


Features Worth Knowing About

Bookmarks work across all protocols. You can organize them into nested folders, get a bookmarks bar across the top, import your existing browser bookmarks from a standard Netscape HTML file, and export back out again. Works the same whether you're bookmarking a webpage or a Gopher menu.
History is automatic, every navigation gets logged with a timestamp, full-text searchable, clearable whenever you want.
Themes. Gemini and Gopher pages render in a custom text viewer with seven built-in color themes: System default, Solarized Light, Solarized Dark, Nord, Dracula, Paper, and Gruvbox Dark. You can also control font family and text size. Folks who stare at screens all day will appreciate having options there.
Gemini client certificates. This one's a little niche, but it matters for people who use authenticated Gemini spaces, things like Station (a Gemini social network) or interactive capsules that require a login. Waystone lets you create identities (self-signed certificates), manages the host mapping automatically so the right cert gets sent to the right capsule, and supports import/export as .p12 files so you can move identities between browsers.
TOFU certificate trust – “Trust on First Use” – handles Gemini's certificate model the way it's supposed to work. First time you visit a capsule, Waystone records the fingerprint. If the cert ever changes unexpectedly, it warns you instead of silently accepting it.
Streaming render for Gemini. Pages start appearing as data arrives over the wire, same as a regular browser loading HTML. No waiting for the whole document before you see anything.


Installing It

You can run it from source today, it's a straightforward Python project:

git clone https://github.com/njb1966/waystone-browser
cd waystone-browser
./run.sh

You'll need a few system packages on Debian/Ubuntu – mainly the GTK 4 and WebKit GObject bindings, which can't come from pip. The README has the full list, it's not complicated.


Who It's For

If you spend any time in Geminispace, browse Gopher out of nostalgia or genuine interest, run a Gemini capsule and want to post to it via Titan, or just want a browser that respects the fact that not everything on the internet is a gigabyte of JavaScript, Waystone might be exactly what you're looking for.
It's Linux only, for now. That's where I live, that's what I build for. It's MIT licensed, source is on GitHub, and I'm actively working on it.
The small internet is still out there. Waystone is just a decent window into it.