Enter the Mastodome

March 09, 2018 in #code #software development #python #Qt #social media #mastodon

UPDATE: You can download the latest stable version of Mastodome with the following command:

svn co https://code.bobstechsite.com/svn/mastodome/tags/0.1 mastodome-0.1

This is a temporary work-around since the migration from Github. A new version of Bob's Tech Site is being developed, and this will link to tarballs you can download instead.


We don't need another hero, but we do need another Mastodon client! The best one I've come across that isn't browser-based is Tusky, but currently this is only available on Android.

I remember in the late '00s using Tweetdeck and finding it really useful for handling multiple accounts, scheduling tweets and cross-posting until Twitter bought it and ruined it. It occurred to me late last year that writing an open source equivalent for Mastodon (a free software & decentralised alternative to Twitter) would be a pretty awesome technical project that would also scratch that particular itch for both myself and others.

It had a couple of false starts with me trying to use it as an exercise to learn Kotlin, but from the new year 2018 I finally settled on using Python with the Qt GUI framework. I released an initial prototype as version 0.1 on Wednesday 31st January 2018.

Mastodome 0.1 "First Alpha"

For now this is just an initial prototype you can checkout from subversion (tarball download is coming soon).

The aim of this release was to simply create a proof of concept with the absolute bare minimum functionality to verify if this idea was viable. I learned a lot of good lessons from the exercise which I'll bring into future releases. To summarise the full functionality in this release:

  • Logs in and out of Mastodon and stores tokens in the local keystore (does not support two-factor authentication)
  • Displays home, local and public toot streams
  • Displays a list of current notifications (but not their content)
  • Sends plain-text toots a maximum of 280 characters in size
  • Refreshes visible toot streams when you manually refresh them
  • Supports custom translation files and configurations
  • Displays avatar images and custom artwork

...and that's it. You'll need Python 2 and a load of pre-requisites specified in a "Dev Notes" file. I've not tested it on non-Linux systems yet, but there's no reason why it shouldn't work if you have a working Python environment & Qt installed on your system. In future I intend to make it easier to install and use Mastodome, but as an initial prototype and a rough technical exercise this felt sufficient.

Current project status

Originally Mastodome 0.2 was scheduled to be released in early March 2018. Unfortunately I've had to push this back for a while.

This is because:

  • A lot of big paid magazine writing gigs have just come in, and they have to take priority
  • I've also been busy preparing the BTS podcast's proper season 1 launch (based on lessons learned from the initial pilot & some more cool ideas I have for it)
  • There are some big technical hurdles that could snowball into major problems if I leave them unchecked

To be more specific about those "technical hurdles":

  • The Python library I'm using doesn't cover everything in the Mastodon API
  • Said library also doesn't support two-factor authentication
  • I can't dynamically add a third column to the GUI or resize the window I autogenerated with Qt Designer because of some silly noob mistakes

Given I also want to support other networks (eg. GNU Social & Twitter) towards the end of this year I think it makes sense to write my own client libraries for REST calls. Also I'm going to have to code a new front-end UI from scratch so I don't run into the same problems again.

I've also rejigged the scope of the next few releases to reflect this change of priorities. As a general summary:

  • 0.2 will fix bugs with 0.1 and setup a solid foundation for future releases. I'll also start using TDD properly because it's not a prototype anymore
  • 0.3 will introduce the "3rd column" for viewing profiles, toots behind content warnings and conversation streams
  • 0.4 should finally support sending different kinds of toot with varying character limits, and possibly scheduled toots

Hopefully by the summer it should have enough core functionality for me to start "dogfooding" the app so I can catch annoying bugs and start introducing cool extra functionality (eg. grabbing content from RSS, plug-ins for other services like GNU Social & Twitter, cross-posting to blogs, creating your own on-screen panels, etc).

You'll also notice on the milestones page that Mastodome will support users with more than one Mastodon account. 0.2 will "remember" past logins, 0.3 will enable fast user-switching and 0.4 should provide a way of posting a toot to multiple accounts at the same time. That will hopefully be more user-friendly than pinning multiple tabs in your web browser and justify why you'd want to use a desktop client in the first place.

Share on Diaspora*