McRoss is a minimal and usable gemini:// browser written in python and tkinter, meaning it Just Works (tm) on any self-respecting desktop OS: Linux, Windows, Mac OS, and maybe the BSDs? Never tried one of those.
It currently looks like this:
Surfing plaintext and gemini content is already working well. The catch is it currently doesn't support downloading binary content and TOFU TLS verification. See feature checklist below for more details.
See my blog post for the rationale behind this project.
You need python 3.7 or higher. McRoss also uses
idlelib which is supposed to
be included in the standard library but some linux distros split it into a
separate package which you'll need to install manually. I know at least Ubuntu
and Void Linux do this.
pip install mcross mcross
Better distribution methods to be explored later. Maybe it's finally time to try nuitka?
mcross -h to get a full list of CLI arguments. The same arguments can
also be defined in a TOML config file: run
mcross-info to know where this
file should be for your OS. For example, running mcross like this:
mcross --background-color pink -t "Ubuntu"
is the same as putting this in
$HOME/.config/mcross/mcross.toml for linux:
background-color = "pink" text-font = "Ubuntu"
The priority is CLI arg > config file > default.
Ctrl-l: jump to address bar.
Altto see possible button shortcuts underlined. This is what Qt calls Accelerator Keys.
To get started:
pyenv install 3.7.7 pyenv virtualenv 3.7.7 mcross pyenv activate poetry install mcross # to publish, first bump version in pyproject.toml then poetry publish --build
There are 2 McRoss-related mailing lists:
If you're not familiar with the mailing list workflow, check out
git-send-email.io and mailing list etiquette. useplaintext.email
also has useful plaintext setup tips for various email clients, though I don't
necessarily agree with its
plaintext or nothing stance.
text/*mime types with correct charset
Long term high-level goals:
If the words
cargo build exists in the installation guide for your G U I
application then I'm sorry it's not software made for people to use.
A rendered text/gemini viewport should preserve its original text content.
This way once you've read a gemini page on the browser, you already know how to
write one. No
View Source necessary.
The Castor browser doesn't have visual indicators at all, for example, when clicking on a link it just appears to do nothing until the new page is completely loaded. That is A Bad Thing (tm).
In terms of both disk space & memory/cpu usage. The python/tkinter combo already puts us at a pretty good starting point.
Spec says protocol part is optional, but if I omit that one the server will
53 No proxying to other hosts!.
Spec says a newline should be \r\n but the server running gemini.circumlunar.space just uses \n every time.