SSL expiry check
Inspects live TLS certificates over node:tls — no agent on the target host, no DNS gymnastics. Captures issuer, chain, validity window and SANs.
Docker one-liner. 5 alert channels. Zero external dependencies.
SSLert watches your TLS certificates and domain registrations, alerting you 30, 7 and 1 days before they expire — across email, webhook, Telegram, Slack and ntfy.
On June 4, 2025 Let's Encrypt shut down their certificate-expiration notification emails — the same emails tens of thousands of operators relied on as their first line of defense against an outage.
And it's only going to get worse. The CA/Browser Forum has approved a roadmap that shrinks public TLS certificate lifetimes to 47 days by 2029, with intermediate steps at 200, 100 and now 90 days already in motion. Shorter lifetimes mean more frequent renewals, more chance of a mistake, and more chance of a silent expiry.
SSLert is the lightweight, self-hosted replacement. Drop it on any box with Docker and it watches every certificate and domain registration you point it at — quietly, on a cron, with the alerts going wherever you already read messages.
Six core capabilities, all open source, all in one binary.
Inspects live TLS certificates over node:tls — no agent on the target host, no DNS gymnastics. Captures issuer, chain, validity window and SANs.
Tracks domain registration expiry via RDAP bootstrap, with a TCP-WHOIS fallback for TLDs that don't speak RDAP. Same 30/7/1 day alert schedule as SSL.
Email, generic webhook, Telegram, Slack and ntfy. Per-domain channel config — turn off the noisy ones, keep the ones you actually read.
React 19 + TanStack Query give you live status, expiry counts and per-domain history. Add a domain and the first check fires immediately.
Single docker compose up --build. Web on :5173, API on :3000, SQLite in a named volume. Update with git pull && docker compose up -d.
Data lives in a single SQLite file. cp the file to back up. scp it to migrate. No DB server, no cache, no ops burden.
Clone, configure, deploy. No cloud account, no signup, no SaaS lock-in.
git clone https://github.com/einperegrin/sslert.git
cd sslert
cp .env.example .env
# .env — leave blank to log alerts to stdout
RESEND_API_KEY=re_xxx # https://resend.com (free 100/day)
ALERT_EMAIL_TO=alerts@example.com
# Or set TELEGRAM_BOT_TOKEN + TELEGRAM_CHAT_ID
# Or set SLACK_WEBHOOK_URL
# Or set NTFY_TOPIC=my-sslert
docker compose up --build
Dashboard at http://localhost:5173 · API at http://localhost:3000
The only open-core, self-hosted option with five real alert channels.
| SSLert | UptimeRobot | Certimon | TrackSSL | |
|---|---|---|---|---|
| Pricing | Free, self-hosted | Freemium, SaaS | Free, hosted | $17 / mo, SaaS |
| Self-hosted | Yes | No | No | No |
| Open source | AGPL v3 | Closed | Closed | Closed |
| Alert channels | 5 (email, webhook, Telegram, Slack, ntfy) | 12+ (paid only) | 3 (Telegram, Teams, PagerDuty) | 3 (email, Slack, Teams) |
| Domain expiry | RDAP + WHOIS | No | No | No |
| Database | SQLite file | Vendor | Vendor | Vendor |
| Docker one-liner | Yes | No | No | No |
SSLert is licensed under the AGPL v3 — the same license used by Nextcloud, Mastodon and Bitwarden. You can read every line, run it forever, and ship modifications internally without permission. The AGPL only kicks in if you offer SSLert itself as a hosted service to others.
The roadmap is on GitHub. Issues and PRs are public. New alert channels, CT-log monitoring and internal/PKI certificate support are all queued up — and we want your input on which to prioritise next.