Mastodon <-> Twitter cross-poster.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Mastodon ⬄ Twitter real-time cross-poster, using streaming APIs.

Requirements: Python 3.6 minimum, with two packages, python-twitter version 3.2 upwards and version 1.0.2 upwards:

# Python 3
pip3 install -r requirements.txt

You can also use a virtual environment, if you don't use a container, but take care to adapt the paths to the Python binary in the SystemD service.

For basic usage, execute from the project directory

python -m mtt

and follow the on-screen prompts.

The script stores your credentials in a bunch of files ending on .secret. The contents of these files let people access your twitter and Mastodon accounts, so do not share them around.

There is also a mtt_status_associations.json file created. It stores which tweet corresponds to which toot, and is used to synchronize threads. You can delete it at any moment, but if you do, old threads will no longer be synced. More importantly, replies to old theads on the Twitter side will not be posted on Mastodon at all.

To customize options, you can either modify directly the mtt/ file (best option if you want to tweak a few things and forget this), or create a mtt/ file and copy the configuration variables you want to change there (best option if you want to be able to update this using git pull and don't want to alter the core files).


To setup MastodonToTwitter first run the following command and follow instructions:

docker-compose run --rm mtt

Once setup you just need to run the following command in future.

docker-compose up -d


The MastodonToTwitter.service.sample file is a systemd service. You can copy it to MastodonToTwitter.service, edit it to change the install path, symlink it to /etc/systemd/system/, and then use systemctl start|stop|restart|status MastodonToTwitter and journalctl -u MastodonToTwitter.service to run this as a simple service.

The MastodonToTwitter.service file is in the gitignore file, so you will not have a problem when updating.


You can run this on a free heroku dynamo

Add heroku as a remote repository with heroku git:remote -a your-app-here

Create a runtime.txt file which contains:


Create a Procfile which contains

worker: python3 -m mtt

Commit and push your changes to heroku master.

Open a bash shell on heroku with heroku run bash and follow the basic usage instructions to generate your tokens.

Exit bash and scale your heroku instance heroku ps:scale worker=1 to get things going.