{"id":49538971,"url":"https://github.com/frontendnetwork/uptodon","last_synced_at":"2026-05-02T13:11:54.526Z","repository":{"id":105117709,"uuid":"605474704","full_name":"frontendnetwork/uptodon","owner":"frontendnetwork","description":"A UptimeRobot Mastdon bot that toots if a service is down: Uptodon!","archived":false,"fork":false,"pushed_at":"2024-06-29T11:18:13.000Z","size":429,"stargazers_count":6,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-06T05:04:57.895Z","etag":null,"topics":["bot","fediverse","fediverse-bot","mastobot","mastodon","mastodon-api","mastodon-bot","nodejs","uptimerobot","uptimerobot-api"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/frontendnetwork.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","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,"zenodo":null},"funding":{"github":"philipbrembeck","ko_fi":"vegancheck"}},"created_at":"2023-02-23T08:30:05.000Z","updated_at":"2025-12-19T17:11:29.000Z","dependencies_parsed_at":"2023-09-21T20:03:37.457Z","dependency_job_id":"e0ee690b-5cb3-468f-8805-0e5f4b177234","html_url":"https://github.com/frontendnetwork/uptodon","commit_stats":{"total_commits":33,"total_committers":2,"mean_commits":16.5,"dds":"0.030303030303030276","last_synced_commit":"16000ed29807cc7ae11e036f84fc8d4cb202373a"},"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/frontendnetwork/uptodon","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frontendnetwork%2Fuptodon","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frontendnetwork%2Fuptodon/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frontendnetwork%2Fuptodon/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frontendnetwork%2Fuptodon/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/frontendnetwork","download_url":"https://codeload.github.com/frontendnetwork/uptodon/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frontendnetwork%2Fuptodon/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30416726,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-12T04:41:02.746Z","status":"ssl_error","status_checked_at":"2026-03-12T04:40:12.571Z","response_time":114,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["bot","fediverse","fediverse-bot","mastobot","mastodon","mastodon-api","mastodon-bot","nodejs","uptimerobot","uptimerobot-api"],"created_at":"2026-05-02T13:11:53.796Z","updated_at":"2026-05-02T13:11:54.514Z","avatar_url":"https://github.com/frontendnetwork.png","language":"TypeScript","funding_links":["https://github.com/sponsors/philipbrembeck","https://ko-fi.com/vegancheck"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\u003cimg src=\"https://user-images.githubusercontent.com/4144601/220859980-3977252f-a091-485e-ab16-bea32bc66b58.svg\" alt=\"Uptodon\" width=\"128\"\u003e\n\n# Uptodon\n\nA Node.js bot that posts to Mastodon if a service on UptimeRobot is down.\n\n\u003cbr/\u003e\n\n\u003cpicture\u003e\n\t  \u003csource srcset=\"https://user-images.githubusercontent.com/4144601/220864964-7afcef23-950a-4f06-a15e-2fe4d3c30989.png\" media=\"(prefers-color-scheme: dark)\"\u003e\n\t  \u003cimg src=\"https://user-images.githubusercontent.com/4144601/221250665-bb1c7829-f437-4a50-8210-ec5cdeb8f5de.png\" alt=\"Screenshot of Mastdon Post\"\u003e\n\t\u003c/picture\u003e\n\u003c/div\u003e\n\n## 👋 Introduction \nUptodon is a simple and lightweight bot written in Node.js that automatically toots to any account on any Mastodon instance, if a certain monitor in your UptimeRobot account reports a downtime. \n\nYou can automate your workflow and inform the followers of your account that your service is down and also when it's up again, so you can focus on fixing what causes the downtime of your service. \n\n## 🧑🏽‍💻 Setup \n### Prerequisites\nTo use the bot, you'll need:\n* An account on any Mastodon instance\n\n* An application with read (`read:statuses`) and write (`write:media`, `write:statuses`) rights on that instance and the access token\n  \u003cdetails\u003e\u003csummary\u003eFull explanation\u003c/summary\u003e\n  Go to your Mastodon Instance. Then go to Preferences → Development → New application → Enter your application name and apply the following settings:\u003cbr /\u003e\u003cbr /\u003e\n  \u003cpicture\u003e\n\t  \u003csource srcset=\"https://user-images.githubusercontent.com/4144601/221251026-e6888ef5-7a80-4dc7-aa1d-b7eef666be95.png\" media=\"(prefers-color-scheme: dark)\"\u003e\n\t  \u003cimg src=\"https://user-images.githubusercontent.com/4144601/221242229-0738ad6d-da4b-4500-8171-faa260a02edb.png\" alt=\"Rights of the application\"\u003e\n\t\u003c/picture\u003e\n  \u003c/details\u003e\n* An [UptimeRobot*](https://uptimerobot.com/?rid=b61ec8a31b3087) account (Paid or free)\n* Your [UptimeRobot API Keys*](https://uptimerobot.com/api/?rid=b61ec8a31b3087) (for a specific monitor)\n* [Node.js / npm installed](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm)\n\n### Get started \nCopy [`.env.example`](https://github.com/frontendnetwork/uptodon/blob/main/.env.example) to `.env`:\n````bash\ncp .env.example .env\n````\nand insert your credentials in the now created [`.env`](https://github.com/frontendnetwork/uptodon/blob/main/.env.example):\n````.env\n# Mastodon app\nINSTANCE=\"https://mastodon.social\" # Your mastodon instance\nAPP_NAME=\"Your app name\" # The name you gave your app earlier \nHASHTAG=\"Yourhashtag\" # The hashtag you want to use for posts\nSECRET=\"secret\" # The access token of your mastodon app\n\n# Uptime Robot\nUPTIME_ROBOT_API_KEY=\"uptimerobotsecret\" # Your UptimeRobot Secret for the specific monitor you want to toot about\n\n...\n````\n\n### Configuration\n#### Message\nThe messages of the bot are compeltely customizable. Please note that the defined Hashtag (`HASHTAG` in `.env`) will always be added before your custom message.\n\n````.env\nUP_MSG=\"is up and running again. We apologize for any inconvenience.\" # The hastag will be added before this\nDOWN_MSG=\"seems to be down. We are already investigating it.\" # The hastag will be added before this\n````\n\n#### Images \nYou will notice that the bot is not only sending a status to Mastodon, but also images. \n\nYou can change those images in [`img/up.png`](https://github.com/frontendnetwork/uptodon/blob/main/img/up.png) and [`img/down.png`](https://github.com/frontendnetwork/uptodon/blob/main/img/down.png) or change their paths in the `.env` you created [earlier](#get-started). \n\nIf you choose to not send images, you can also define this in the `.env`:\n````.env\n# If you want to use custom images, set IMAGE to true and set the path to the image in PATH_UP and PATH_DOWN\nIMAGE=\"true\" # Set to false if you do not want to send images\nPATH_UP=\"img/up.png\" # Set path for the image when the service is up again\nPATH_DOWN=\"img/down.png\" # Set path for the image when the service is down\n````\n\n#### Application configuration\nYou can also define the port on which the bot should be running as well as if you want to use Debug-mode.\n\n\u003e [!NOTE]\n\u003e Debug mode is quite straight forward but also a bit dangerous to use. Setting the debug-mode to true will instantly trigger a downtime post if the app is started.\n\n````.env\n# App config\nPORT=\"1035\" # Change the port if you want to do so, e.g. to 3000\nDEBUG=\"true\" # Only set this to true if you know what you are doing: This will instantly trigger a downtime post if the app is started\n````\n\n## 🏃🏽‍♀️ Run the app\nYou should be good to go now. Just run:\n````bash\nnpm run start \n````\nThis also runs a `prestart` script, that runs `npm run install` to install all dependencies.\n\n## 🪝 Set up a Webhook or Cronjob\n### Webhook\nSet up the Webhook in your [UptimeRobot*](https://uptimerobot.com/?rid=b61ec8a31b3087) alert contacts - [Learn more](https://blog.uptimerobot.com/web-hook-alert-contacts-new-feature/).\n\u003cbr /\u003eThis webhook should point to the URL of your [Deployment](#deploy), so it can automatically trigger the bot when a downtime is detected. \n\n\u003cpicture\u003e\n\t  \u003csource srcset=\"https://user-images.githubusercontent.com/4144601/221251596-7f92ea32-cff3-409d-a9db-ed6ae03df5bb.png\" media=\"(prefers-color-scheme: dark)\"\u003e\n\t  \u003cimg src=\"https://user-images.githubusercontent.com/4144601/221245004-8cb14437-71d9-4f55-b70f-9fe09220ca7d.png\" alt=\"Webhook setup in the UptimeRobot settings\"\u003e\n\u003c/picture\u003e\n\nThis is best practice, but you will need a paid account on UptimeRobot for that. \n\n### Cronjob\n\u003e [!WARNING]  \n\u003e It is recomended to set up a webhook, as this is more accurate and you won't run into rate-limiting issues or overload your instance.\n\u003e Please read the [Disclaimer](#disclaimer)!\n\nYou can either set up a cronjob on your server or use a web service like [Easycron](https://www.easycron.com) that points to the URL of your [Deployment](#deploy).\n\nIf you're using the cronjob on your own server, it is recommended to execute it every 2 minutes:\n````crontab\n*/2 * * * * /usr/bin/wget --spider \"https://bot.yourdomain.com\" \u003e/dev/null 2\u003e\u00261\n````\n\n## 🛫 Deploy\nTo deploy the bot to a server, some additional steps might be required, depending on your hosting provider or server provider.\nIt's best to check your provider's documentation and see how you can run Node.js applications. \n\n### Deploy to Vercel\nIf you use the Deploy with Vercel button, you will be prompted to fill in the environment variables, which you can find in the [`.env.example`](https://github.com/frontendnetwork/uptodon/blob/main/.env.example), a description on what to enter can be found in [Get started](#get-started).\nWhen these variables are not filled in, the bot will not build on Vercel.\n\n[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Ffrontendnetwork%2Fuptodon\u0026env=INSTANCE,APP_NAME,HASHTAG,SECRET,UP_MSG,DOWN_MSG,UPTIME_ROBOT_API_KEY,IMAGE,PATH_UP,PATH_DOWN,PORT,DEBUG\u0026envDescription=API%20Keys%20and%20variables%20needed%20to%20deploy%20the%20bot.\u0026envLink=https%3A%2F%2Fgithub.com%2Ffrontendnetwork%2Fuptodon%2FREADME.md%23get-started\u0026redirect-url=https%3A%2F%2Fgithub.com%2Ffrontendnetwork%2Fuptodon)\n\n### Deploy to Netlify\nTo deploy to Netlify, you have to fill in the environment variables yourself on Netlify before building, otherwise the bot will not build. \nYou can find the variables in the [`.env.example`](https://github.com/frontendnetwork/uptodon/blob/main/.env.example), a description on what to enter can be found in [Get started](#get-started).\n\n[![Deploy to Netlify Button](https://www.netlify.com/img/deploy/button.svg)](https://app.netlify.com/start/deploy?repository=https://github.com/frontendnetwork/uptodon)\n\n## 🔗 Miscellaneous\n### Dependencies\nThis repo depends on:\n* [hylyh/node-mastodon](https://github.com/hylyh/node-mastodon) – Thanks to @hylyh \n\n### Further reading\n* [Mastodon API](https://docs.joinmastodon.org/api/)\n* [UptimeRobot API*](https://uptimerobot.com/api/?rid=b61ec8a31b3087)\n\n### ToDo\n* [ ] Get rid of the necessary Hashtag and use endpoint [accounts/statuses](https://docs.joinmastodon.org/methods/accounts/#statuses) instead\n* [x] Make the up/down toots customizable  \n* [ ] Add other Uptime services (e.g. BetterUptime / Open-Source services)\n\n### Disclaimer\nPlease use this bot only on your own instances or talk to the admins of your instance if it's okay to let a bot like this run, especially if you're using [Cronjobs](#cronjob).\n\nAll links marked with * in this repo are affiliate links.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrontendnetwork%2Fuptodon","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffrontendnetwork%2Fuptodon","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrontendnetwork%2Fuptodon/lists"}