Notifications
Envoryx usually runs on a machine you don’t look at all day. Notifications make sure you still hear about it when a project falls over or a backup fails. You set them up under Settings → Notifications: pick a channel, choose which events you care about, and send a test to see that it arrives.


Channels
Section titled “Channels”Envoryx can reach you over ntfy, a Discord webhook, a Slack webhook, a Telegram bot, e-mail via SMTP, or a generic webhook with a JSON body if you want to wire it into something of your own. For e-mail with authentication the server has to speak STARTTLS or TLS - Envoryx won’t send your password in the clear.
The generic webhook gets a POST with Content-Type: application/json and User-Agent: Envoryx.
The body is flat, so a small script can pick it apart without guessing:
{ "kind": "backup.failed", "level": "error", "title": "…", "message": "…", "project": "Shop", "time": "2026-10-07T13:40:12Z"}kind is a stable key such as backup.failed or branch.changed, level is info, warning or error,
and project stays empty for events that aren’t about one project. A failed offsite upload of a
project backup does name its project, even when the project has been deleted since.
The secrets for all of these live in /config/notify.json (mode 0600), encrypted with the
secret key, and never go back to the browser.
Events
Section titled “Events”| Event | When |
|---|---|
| Project stopped or broken | a project that should be running is not - and again when it recovers |
| Application down | the health check fails three times in a row - and when it answers again |
| Out of memory | a container reached its memory limit and a process was killed |
| Project creation failed | |
| Backup failed | a manual, scheduled or offsite backup failed |
| Cron job failed | a cron run failed or timed out |
| Branch environment failed | a branch environment could not be created or its deploy failed |
| Branch environment changed | a branch environment was created, deleted along with its branch, or stopped for being idle |
| Low disk space | /config, /projects or /backups below 2 GiB or 5 % free - and when it recovers |
| Orphans removed | Envoryx removed leftover containers or networks on its own |
| Projects resumed | Envoryx started projects again after its own restart |
| Let’s Encrypt renewal | failed or succeeded |
| Envoryx started / failed | a start, or a refused start (corrupt database, network filesystem, failed migration) and crashed background tasks |
Everything is on by default except Let’s Encrypt renewed, Envoryx started and Branch environment changed - those are good news or routine, and that gets old quickly.
So your phone doesn’t buzz every minute, repeats are throttled: an unhealthy project reports
once every 6 hours, a failed renewal once a day. The message about a failed start is special: it
doesn’t need Envoryx’s database, only the channel in /config/notify.json. That way it reaches
you precisely when Envoryx can’t open its database. There’s one gap: notify.json is sealed with
the secret key, so a start refused because the key is wrong or missing can’t send anything. The
container then restarts in a loop without a word, so if you rely on alerts, have your container
monitoring watch for restart loops too. The log says which key ID Envoryx expects.
When an update brings a new kind of event, it follows its default until you save your event selection again. A new alarm is never quietly switched off just because it didn’t exist when you last saved.