A new Mastodon client written in Kotlin
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.



A new Mastodon client written in Kotlin


This git repo is just an empty placeholder for now. The plan is to spend the week I have off work hacking away on this project. I'll be making full use of the API reference here, and am genuinely intrigued to see how I'll get on.

More specifically this project will eventually be a new client for Mastodon, a federated social network that takes all the best elements of Twitter and makes them better. Specifically the profit motive is removed because there isn't one VC-funded entity making all the decisions and moderation should be more effective because it's been farmed out to the community instead of a limited pool of staffers.

The lingo as you might have picked up is a bit different. You "toot" a message, "boost" other toots to your followers and "favourite" messages you like. I'm convinced that in time, most people will migrate across.


Why not just contribute to Tusky?

I think it's a fantastic project & it's probably going to be the app everyone standardises on. You can see the roadmap here and follow the project on Mastodon here. I wish Vavassor the best of luck.

There are a few reasons I'm having a crack at writing my own Mastodon client:

  1. I'm an experienced Java developer who wants to spend some time learning Kotlin because it looks amazing.
  2. There seems to be a severe lack of Mastodon clients. Increased competition often breeds new ideas and removes single points of failure.
  3. Tusky (by far and away the best Android client) doesn't work for mastodon.cloud, which is the node I'm on.
  4. It sounds like fun!

From a technical point of view the big differences are:

  • Tusky is sticking with a Java codebase in Android Studio, but Mastodome will use Kotlin in JetBrains IntelliJ.
  • Tusky uses its own API/server setup for push notifications. Mastodome will use a background service to poll for changes until I come up with something better.
  • Tusky is focussed on being an Android app. Mastodome will have a common code base you can use to build the client for Android, the browser and the desktop.

I think this project will be different enough to be worthwhile as a seperate effort. If you have any suggestions (particularly around GUIs), then drop me a line!

How can I contribute?

I'll get back to you on that! Once I have some base code my suggestion is you follow the usual workflow of forking this project then raising a pull request to merge your changes back.

Will this project support cross-posting to Twitter/Facebook?

No. This is because:

  1. It's another set of APIs the project has to support
  2. Every developer would have to agree to restrictive developer terms of service to build the code because they'd need a sanctioned API key for Mastodome to work
  3. Neither service plays nice with third party clients, so giving these companies a kill switch for Mastodome's official apps doesn't seem like a good plan
  4. We should be advocating Mastodon as a replacement for services like Twitter. Supporting its main rival by diverting users to it doesn't help our cause

If you disagree, go ahead and fork the project! There's nothing stopping you :) I expect you could work around the API issues described here with pre-populated browser windows. On Android you can also use intents to launch the official apps.

Will Mastodome ever support cross-posting?

Maybe, at some point. If there's enough demand for free software services like Diaspora, Ghost and Wordpress then we'll make it happen. But we're absolutely not supporting closed/proprietary services.

Will this run on the iPhone?

Not natively. It's doubtful you'd be able to distribute an iOS build through the App Store and still be compliant with the GNU GPLv3 (the license I've chosen). Also, running this code on a Jailbroken device violates Apple's terms of service and potentially the law in your country. If you want to build a native iPhone client for Mastodon, this isn't the project for you.

The supported method would be to use the browser-based build. You would either self-host it or use someone else's instance, then connect to it from a bookmark you've saved on your iPhone home screen.

Have you considered coding this in Rust?

Go away.