After months of development, the probably most popular open-source uptime monitoring tool, Uptime Kuma, beloved by countless self-hosting enthusiasts (more than 76K GitHub stars), has officially reached version 2.0, marking one of the project’s biggest updates yet.
The headline change is MariaDB support, which gives users greater flexibility in data storage. Until now, Uptime Kuma has relied on SQLite by default. With MariaDB available, larger deployments can finally scale more easily, especially for setups handling hundreds of monitors.
Another big deal in this release is rootless Docker support. This allows Uptime Kuma containers to run without root privileges, reducing security risks in production environments. Needless to say, for anyone running the app in Docker or Kubernetes, that’s a very welcome addition.
Notifications also got some love. The new version brings integration with Nextcloud Talk, Brevo, and other new notification providers. Combined with existing options like Telegram, Discord, and Slack, users now have even more ways to stay on top of downtime alerts.
There’s also a noticeable focus on performance and reliability. Proxy handling has been improved, caching behavior refined, and several bugs that previously caused inconsistent uptime checks have been fixed. The web interface feels snappier, too—especially when loading large monitoring lists.

On the security side, version 2.0 patches the vm2 vulnerability, updates dependencies, and includes general hardening across the stack. On top of that, new notification templates help users standardize their alert messages with custom formatting.
Upgrading from Uptime Kuma 1.x is straightforward in most cases, but there are a few things to watch out for. Before updating, users should back up their database and configuration files—especially if they’re switching from SQLite to MariaDB. Here are the main breaking changes to watch out for:
- Badge endpoints for uptime and ping now only accept duration values of 24, 24h, 30d, or 1y.
- Support for legacy browsers has been removed.
- The old Backup/Restore from JSON feature is gone. The only supported backup method now is to back up the
data
directory directly. - The deprecated DNS cache for HTTP monitors has been removed. Docker users should rely on the bundled nscd service instead.
- Default retry attempts for newly created monitors have been changed from 1 to 0 to prevent confusion.
- Email (SMTP) notifications now use LiquidJS templates instead of a custom regex parser. Variables are case-sensitive, and unsupported ones are ignored. Currently supported variables include:
name
,msg
,status
,heartbeatJSON
,monitorJSON
, andhostnameOrUrl
.
The developer recommends running the migration script provided with the release to ensure compatibility with the new database structure. Docker users can simply pull the latest image, while manual installations can update via Git, followed by an npm run setup
to rebuild dependencies. Either way, make sure to check the official migration guide before moving forward with the update.
Just a heads-up — the migration will take a few minutes, depending on how many monitors you’ve set up. Keep an eye on the log and give it a bit of time to finish.

Finally, the overall user experience has been polished. The UI sees helpful adjustments, internationalization has been extended to more languages, and several migration scripts simplify the upgrade from 1.x.
For more information, see the project’s GitHub changelog.