Skip to content

Maintenant

v1.2.0 Breaking

This release includes breaking changes for platform teams planning a safe upgrade.

Published 2mo Monitoring & Metrics
✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →

✓ No known CVEs patched in this version

Topics

alerting container-monitoring devops docker go heartbeat
+12 more
self-hosted kubernetes monitoring network-security observability server-sent-events sqlite ssl-monitoring status-page uptime-kuma-alternative uptime-monitoring vue

Affected surfaces

auth rbac

Summary

AI summary

Updates New Features, Bug Fixes, and replicated/global across a mixed release.

Full changelog

Date: 2026-03-30
Base: v1.1.2 (a9e6893)


New Features

Docker Swarm Monitoring

Maintenant now auto-discovers and monitors Docker Swarm clusters with no configuration required. When deployed on a manager node, it detects Swarm mode automatically and starts tracking services, tasks, and nodes in real time.

Community Edition — the same "observe without config" experience, extended to Swarm:

  • Service discovery — All services enumerated via the Swarm API with mode (replicated/global), image, replica counts (e.g. "3/3 running"), task states, published ports, and attached networks
  • Stack grouping — Services deployed with docker stack deploy are automatically grouped by their stack name (com.docker.stack.namespace); override per-service with maintenant.group
  • Real-time SSE updates — Service create, update, and remove events propagate to the dashboard within seconds
  • Startup reconciliation — Full service and task discovery on startup ensures the dashboard reflects cluster state even after a restart
  • Worker node fallback — If deployed on a worker node, Maintenant degrades gracefully to standard Docker container monitoring with a log message
  • Manager demotion handling — If the node is demoted from manager to worker at runtime, Maintenant degrades automatically and broadcasts a status update

Enterprise Edition — cluster intelligence, alerting, and a dedicated dashboard:

  • Node health overview — All nodes with role, status, availability, engine version, and task count
  • Node alerting — Alerts when nodes go down, are drained, or quorum is degraded
  • Crash-loop detection — Automatic detection of task failure patterns (3+ failures within 5 minutes), with recovery detection
  • Replica health alerting — Alerts when running replicas fall below the desired count
  • Rolling update tracking — Real-time progress, stall detection, and rollback alerts
  • Dedicated Swarm dashboard — Cluster-wide view with node list, service summary, task distribution, and aggregate health

Labels must be placed in the deploy.labels section of the service definition, not the top-level labels section. All standard maintenant.* labels are supported (group, ignore, alert severity, channels).

See the Swarm documentation and Swarm deployment guide for details.


Kubernetes Dashboard

The Kubernetes section of the UI has been completely reworked. Where the previous release shipped the K8s backend, this release adds the dedicated frontend section with full cluster visibility.

  • Workloads view — Deployments, StatefulSets, and DaemonSets grouped by namespace with replica counts, readiness, and rollout status
  • Pod detail — Individual pod states, container list, resource usage, restart counts, and log access
  • Cluster overview — Node list with roles, status, and resource allocation
  • Namespace filtering — The view respects MAINTENANT_K8S_NAMESPACES and MAINTENANT_K8S_EXCLUDE_NAMESPACES — only visible namespaces appear in the UI

Helm Chart for Kubernetes

A production-ready Helm chart is now included at deploy/helm/maintenant/.

helm install maintenant ./deploy/helm/maintenant \
  -n maintenant --create-namespace

The chart ships with Ingress support (including TLS), configurable resource limits, Enterprise license injection (direct or via existing secret), and sensible defaults. See the Kubernetes guide for the full values reference.


Runtime-Aware Navigation

The sidebar now adapts to the detected runtime. Docker, Swarm, and Kubernetes each surface their own dedicated section — only what is relevant to your environment is shown. Runtime detection happens automatically and the UI updates in real time via SSE if the runtime status changes (e.g. Swarm manager demotion).


Update Tag Filter Labels

Two new Docker labels let you precisely control which tags Maintenant considers as update candidates for a container, closing #14.

| Label | Type | Description |
|-------|------|-------------|
| maintenant.update.tag-include | Go regex | Only tags matching this pattern are considered as update candidates |
| maintenant.update.tag-exclude | Go regex | Tags matching this pattern are excluded from candidates |

Priority rules:

  1. tag-include replaces the automatic variant filter (e.g. -alpine, -bookworm detection is bypassed)
  2. tag-exclude alone preserves the variant filter — only matching tags are removed after
  3. Exclude applies after include — exclude always wins when both are set
  4. Invalid regex → warning logged, label ignored, default behavior applies

Common patterns:

# Stay on Node 20 alpine — never jump to Node 21
labels:
  maintenant.update.tag-include: "^20\\.\\d+\\.\\d+-alpine$"

# Exclude pre-release tags
labels:
  maintenant.update.tag-exclude: "(rc|beta|alpha)"

# Pin to Postgres 15.x, no pre-releases
labels:
  maintenant.update.tag-include: "^15\\."
  maintenant.update.tag-exclude: "(rc|beta|alpha)"

These labels have no effect on containers using non-semver channel tags (latest, lts, stable) — those containers use digest-only comparison and bypass the tag list entirely.


Bug Fixes

  • Numeric build ID tags excluded from semver candidates — Tags composed entirely of digits (e.g. CI build IDs like 20240315) are no longer treated as semver candidates and no longer generate spurious update suggestions
  • CrashLoopBackOff alerts fire at startup — Pods already in a crash loop when Maintenant starts now trigger alerts immediately instead of waiting for the next state transition
  • Kubernetes ExternalID route matching — Routes that accept Kubernetes ExternalIDs (which include /) now use wildcard path segments and match correctly
  • Expired license reported when registry is unreachable — License validation now correctly reports an expired license even when the license server cannot be reached, instead of falling back silently to Community Edition

Upgrading from v1.1.2

docker compose pull && docker compose up -d --force-recreate
  • Database migrations run automatically on startup
  • Swarm CE and Kubernetes features require no schema changes (in-memory state)
  • Enterprise Swarm node tracking adds a swarm_nodes table (migration applied automatically)
  • No configuration changes required — runtime detection is fully automatic

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

Share this release

Track Maintenant

Get notified when new releases ship.

Sign up free

About Maintenant

Monitor everything with a single container

All releases →

Beta — feedback welcome: [email protected]