{"id":15942346,"url":"https://github.com/bclindner/mastodril","last_synced_at":"2026-06-13T00:32:20.319Z","repository":{"id":100502549,"uuid":"158647421","full_name":"bclindner/mastodril","owner":"bclindner","description":"Bot to mirror Twitter posts on a Mastodon account.","archived":false,"fork":false,"pushed_at":"2019-12-23T13:53:34.000Z","size":14,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-26T17:47:33.197Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bclindner.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-11-22T05:38:04.000Z","updated_at":"2019-12-23T13:53:36.000Z","dependencies_parsed_at":"2023-05-15T11:15:25.538Z","dependency_job_id":null,"html_url":"https://github.com/bclindner/mastodril","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/bclindner/mastodril","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bclindner%2Fmastodril","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bclindner%2Fmastodril/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bclindner%2Fmastodril/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bclindner%2Fmastodril/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bclindner","download_url":"https://codeload.github.com/bclindner/mastodril/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bclindner%2Fmastodril/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34268187,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-12T02:00:06.859Z","response_time":109,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-07T07:41:07.520Z","updated_at":"2026-06-13T00:32:20.280Z","avatar_url":"https://github.com/bclindner.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# mastodril\n\nA hacky Go script that syncs a Twitter user's Tweets to a Mastodon account.\nThis is primarily used to mirror [@dril](https://twitter.com/dril)'s tweets \nto a [Mastodon account](https://botsin.space/@mastodril), hence the name.\n\n## Configuration\n\nA valid config file is stored in `mastodril.json` in the same folder as the\nexecutable, and looks like this. You'll need app credentials for Twitter and\nMastodon.\n```json\n{\n\t\"handle\": \"\u003chandle_of_user_to_sync\u003e\",\n\t\"twitter\": {\n\t\t\"consumerKey\": \"\u003cyour_twitter_consumer_key\u003e\",\n\t\t\"consumerSecret\": \"\u003cyour_twitter_consumer_secret\u003e\",\n\t\t\"accessToken\": \"\u003cyour_twitter_access_token\u003e\",\n\t\t\"accessSecret\": \"\u003cyour_twitter_access_secret\u003e\"\n\t},\n\t\"mastodon\": {\n\t\t\"server\": \"\u003curl_to_your_mastodon_instance\u003e\",\n\t\t\"clientID\": \"\u003cyour_mastodon_client_id\u003e\",\n\t\t\"clientSecret\": \"\u003cyour_mastodon_client_secret\u003e\",\n\t\t\"accessToken\": \"\u003cyour_mastodon_access_token\u003e\"\n\t}\n}\n```\n\n## Author's Note\n\nThe bot does not run as a daemon - it's a oneshot process that syncs the\nlast 5 tweets, then takes the last tweet in that list and stores its ID\nto a file. It then pulls up that file on the next run and tries to find at\nmost 5 tweets starting from that saved point. It's intended to be run as\na cron/systemd.timer job every 5-30 minutes or so.\n\nAs such, if the user you're trying to mirror posts a lot, this may not be \na feasible script to use. Theoretically Twitter's streaming API would work\nwell there, but that comes with its own set of pitfalls (ratelimiting,\nfiltering problems, etc). This is a simple enough solution for syncing \nslower timelines.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbclindner%2Fmastodril","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbclindner%2Fmastodril","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbclindner%2Fmastodril/lists"}