Mastodonochrome

Mastodonochrome is an UNFINISHED terminal-based client for the Mastodon federated social network.

[main-menu.png]
Mastodonochrome’s Main Menu
[posts.png]
Sample toots shown in Mastodonochrome

Description

It has the following useful properties:

The detailed user interface is modelled after Monochrome BBS, because that was a user interface that the author happened to be familiar with already, which was compatible with all the properties listed above. (OK, and also because I thought it would amuse me to mimic it as closely as possible.)

This means it looks a bit different from the typical Mastodon client UI:

Current status

Mastodonochrome is currently UNFINISHED, and in particular, lacks full online help. But it should be somewhat usable, especially by somebody who already knows the Mono UI, or who’s prepared to poke around the source code and find out the keystrokes that way.

Read TODO.md in the source code for the list of known missing pieces.

Getting it

Mastodonochrome is written in Rust, and available from crates.io via a command such as

cargo install mastodonochrome

To get the code:

git clone https://salsa.debian.org/mastodonochrome-team/mastodonochrome.git
Or you can browse the git repository on the web.

History and rationale

... or, “why write a client of your own?”

TL;DR: it was supposed to be a really quick bodge job for my own personal use, but it got out of hand, partly because it was also my excuse to learn a new language.

I joined Mastodon in September 2023, tried various clients, and had trouble finding one I liked. I immediately wondered about writing my own, and resisted the urge for about two months, but eventually decided that I could throw something together in Python pretty quickly that would be preferable to anything I’d already tried, and the annoyance it would save me would repay that small amount of effort.

Indeed, I had something working in less than a week that was good for most of my Mastodon usage, although I’d have to go back to another client or the web UI for anything outside its feature set (like uploading images).

But the client ran very slowly. When I profiled it, I found the problem wasn’t in my own code: it was in one of the Python modules I was depending on, namely wcwidth. There didn’t seem to be much I could do about that except rewrite in a faster language.

I’d been meaning to learn some Rust for ages. And this seemed like a project of about the right shape, since Rust crates were available to do all the things I was depending on Python libraries for. So I rewrote it in Rust. Success! The wcwidth performance problem went away.

But now it wasn’t just my personal Mastodon client; it was also my “learning Rust” project. So working on it became doubly motivating: it’s not just adding a feature to a program I expect to have O(1) users, it’s also at least general Rust practice, and often also learning how to do another new thing in Rust. So that justified putting a lot more effort into it than I would ever have put into the Python version.

And once it was close to the point where it would be usable by people other than me, it felt like a waste not to take it those last few steps! (Not that it’s 100% there yet, but I plan to get it to the point where I can remove some of these disclaimers and apologies.)


(comments to anakin@pobox.com)
(thanks to chiark for hosting this page)
(last modified on Mon Feb 12 21:25:47 2024)