Skip to main content

McRoss is a minimal and usable gemini:// browser written in python and tkinter, meaning it Just Works (tm) on any self-respecting desktop OS. I use and test it on Linux & Windows, but it should also run fine on macOS or any of the BSDs.

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.

Installation

Dependencies are:

  • python3.7+
  • tkinter
  • idlelib

idlelib 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.

On Ubuntu:

sudo apt install python3 python3-pip python3-tk idle3
pip3 install --user mcross
# make sure ~/.local/bin is in $PATH first of course
mcross

On Arch:

sudo pacman -S python tk
pip install --user mcross

Also consider using pipx for a cleaner, better isolated installation.

Better distribution methods to be explored later. Maybe it's finally time to try nuitka?

Usage

Run 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.

Keyboard shortcuts:

  • Ctrl-l: jump to address bar.
  • Hold Alt to see possible button shortcuts underlined. This is what Qt calls Accelerator Keys.

Development

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.

Feature checklist

  • back-forward buttons
  • handle redirects
  • non-blocking I/O using curio
  • more visual indicators: waiting cursor, status bar
  • parse gemini's advanced line types
  • render text/* mime types with correct charset
  • handle binary/* mime types
  • configurable document styling
  • human-friendly distribution
  • TOFU TLS (right now it always accepts self-signed certs)

Long term high-level goals:

Easy for end users to install

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.

What-you-see-is-what-you-write

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.

Responsive & pleasant to use

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).

Lightweight

In terms of both disk space & memory/cpu usage. The python/tkinter combo already puts us at a pretty good starting point.

Server bugs/surprises

Forces gemini:// in request

Spec says protocol part is optional, but if I omit that one the server will respond with 53 No proxying to other hosts!.

Newline

Spec says a newline should be \r\n but the server running gemini.circumlunar.space just uses \n every time.

License

Copyright (C) 2020 Bùi Thành Nhân

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License version 3 as published by the Free Software Foundation.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.

Forks

McRoss development is... conservative and sporadic. If that bothers you, check out picross which is a nice fork with more features (TOFU, tabs, among other things).

Metadata

Release files for mcross 0.5.19

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mcross 0.5.19
File Size Uploaded Provenance Actions
mcross-0.5.19.tar.gz 28.1 kB Without provenance Details for mcross-0.5.19.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for mcross 0.5.19
File Interpreter ABI Platform Actions
mcross-0.5.19-py3-none-any.whl Python 3 none any Details for mcross-0.5.19-py3-none-any.whl

Total release size: 55.9 kB

Release files / mcross-0.5.19.tar.gz

Download URL mcross-0.5.19.tar.gz
Size 28.1 kB
Tags Source
SHA-256 checksum
How to use checksums
e63b2bb701ed24e79b36dd4bddf1b435b01ee9bb78910174921479c358b4fba0
BLAKE2b-256 checksum
How to use checksums
fcc2b1c33ccf0ca1a6d3e11a312ddda8565dcf7d06170cb2c4ea257e5153d923
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.0.10 CPython/3.8.6 Linux/5.9.10-arch1-1

Release files / mcross-0.5.19-py3-none-any.whl

Download URL mcross-0.5.19-py3-none-any.whl
Size 27.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d9be98c2da78051fe530980eb1f33013ba0ef90aaf9130a96e7db06efa9c793c
BLAKE2b-256 checksum
How to use checksums
3c7d84a5697b992a8ae81662e001c988abc1da414018549be2ee2357bdabe3bb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.0.10 CPython/3.8.6 Linux/5.9.10-arch1-1

Security for mcross 0.5.19

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page