Open source · self-hosted · Apache-2.0
Lapse finds what expires — TLS certificates, domains, Entra ID secrets, SAML certificates — gives each one an owner, warns in time and only closes the alert once it sees the renewal.
$ lapse scan Scanning 8 items… STATUS ITEM DAYS OWNER EXPIRED intranet.acme.local:443 -2 it CRITICAL api.acme.com:443 6 platform CRITICAL ERP Sync · secret prod 6 ana WARNING acme.pe 27 finance RENEWED acme.com:443 174 it was: 2026-10-02 Alerts sent: 3 · already sent before: 1
Why now
Public TLS certificates are limited to 200 days since March 2026, 100 days from 2027 and 47 days by 2029. Every renewal is a chance for something to break — and the reminder often lands in the inbox of someone who left the company.
How it works
Scans hosts, domains, files and cloud tenants, and searches Certificate Transparency for certificates nobody registered.
Every item has an owner and a backup. Entra ID credentials go to the application's owner automatically.
At 30, 14, 7 and 1 days by email, webhook, Slack, Discord, Teams or Telegram. Never twice for the same thing.
An alert only closes when a scan sees the new expiry date — not when someone says "done".
What it watches
Any host:port speaking TLS, plus STARTTLS for SMTP, IMAP, POP3 and PostgreSQL.
Expiration dates straight from the registry through RDAP.
Client secrets and certificates of every app registration, with a read-only permission.
Signing and encryption certificates from any identity provider's metadata.
.cer, .crt and .pem files, such as the certificate used for electronic invoicing.
Licenses, contracts and policies, with the same owners and alerts.
Security
Lapse runs on your machine and keeps a local SQLite file with names, dates and fingerprints. There is no Lapse server, account or telemetry.
${env:…} or ${file:…} references and never appear in the output.Application.Read.All; Graph returns expiry dates, never secret values.Get started
# Download the executable for your system from Releases, then: $ lapse init $ lapse scan $ lapse discover your-domain.com $ lapse report
# Or with Docker $ docker run --rm --read-only -v "$PWD:/data" \ ghcr.io/henrycarrascomedina-maco/lapse scan # Fail a pipeline if anything expires within 14 days $ lapse check --min-days 14