What's Changed
Docker alerts, Capture-backed Docker monitors and an egress self-check lead this release. This release requires Node 24 and enables anonymous telemetry by default.
Features
- Docker container alerts for stopped and unhealthy containers
- Docker monitors can read container data from a Capture agent
- Egress self-check, off by default. Checks that fail while a worker has no outbound connectivity are marked degraded and not reported as outages
- Incident history on public status pages, opened by clicking a day
- Custom monitor intervals, with a 10 second minimum
- Monitor URLs can be edited after creation
- Monitor list sorting is remembered
- 12 hour or 24 hour time setting, and dates follow the app language
- Timezone defaults to the browser timezone
- Expandable log entries with details and stack traces
- Clearer SMTP error messages
- Anonymous daily telemetry heartbeat. Set TELEMETRY_ENABLED=false to opt out
Fixes
- View Incident links in Slack, Matrix, ntfy, webhook and Teams notifications open the correct page
- Hardware monitors recovering from down send an up notification instead of threshold resolved
- Temperature exactly at the threshold no longer counts as a breach
- HTTP checks keep cookies across redirects and accept text/json and +json content types
- Certificate checks use the URL port and no longer error when no certificate is found
- Domain expiry works for .tr domains
- Ping monitors handle IPv6 addresses
- gRPC health.proto is included in the build
- 12 hour times no longer show as "17:16 PM"
- Checks page summary follows the selected monitor
- Docker ports without a public mapping no longer show undefined
- Monitors leaving a maintenance window reset to initializing
- Evaluate jobs track exact check IDs so no check is skipped or evaluated twice
- One failing channel no longer fails the whole test notification batch
- Validation errors return 400 instead of 500
Upgrade notes
- Node 24 and npm 11 are required for source installs. The Docker image already uses Node 24
- Logs are JSON on stdout and app.log is no longer written
- Default LOG_LEVEL is now info
- When jsonPath is empty, HTTP content matching runs against the raw response body
- No new required environment variables and no migrations
Maintenance
- Express 5 migration
- Logging moved from winston to pino with request IDs
- Routes and OpenAPI spec generated from one route table
- Worker services refactored into a single pipeline
- got 16 and multer 2. axios, jsdom and cacheable-lookup removed
- Lighter MongoDB healthcheck in the Docker compose files
- pt-BR translation update and new keys in all locales
New Contributors
- @fabiangigler made their first contribution in #3881
- @Ahson-Shaikh made their first contribution in #3961
- @Asgabani made their first contribution in #3957
- @nikhilsaxena04 made their first contribution in #3974
- @zaeel made their first contribution in #4001
- @oguzyilmaz79 made their first contribution in #4013
- @Nirbhayjakhar3196 made their first contribution in #4008
- @GraceyDugar made their first contribution in #4020
- @sadfun made their first contribution in #4029
Full Changelog: v3.12.0...v3.13.0