Skip to main content

pulsecheck

English · فارسی

Self-hosted uptime monitor. It checks HTTP(S) endpoints, TCP ports and hosts (ping) on a schedule, tracks up / down / slow state, and sends alerts through shoutrrr (Slack, Telegram, Discord, email, ntfy and 20+ more). One YAML file, one state file, no dashboard, no git history.

Features

  • HTTP checks: method, headers, body, expected status, redirect limit, max response time, "slow" (degraded) threshold
  • TLS certificate expiry warnings (ssl_warn_days) and expired-certificate failures
  • TCP and ping checks, each optionally forced over IPv4 or IPv6 (ip_version)
  • Alerts only on change, down_after to ignore blips, optional repeat reminders (remind_every)
  • Per-site tags, intervals and alert routing; UTC maintenance windows
  • Editable alert texts by key (messages:)
  • status (text, JSON, markdown) and report (uptime %, response times) without a dashboard
  • OpenTelemetry push (OTLP/HTTP JSON metrics and logs) to any collector or webhook
  • Guided setup: init (config, .env, shoutrrr, cron), env, validate, test-notify to every channel, update
  • ${ENV} substitution, so secrets stay out of the config
  • Runs from GitHub Actions, GitLab CI, cron, or serverless on Vercel and Cloudflare Workers (see the limits)
  • Python 3.12–3.15 (3.15 preferred), managed with uv

Install

uv tool install pulsecheckcli     # or: pipx install pulsecheckcli
pulsecheck init                   # config + .env + shoutrrr + cron job (Linux)
pulsecheck env                    # add your tokens
pulsecheck validate && pulsecheck test-notify

The package is pulsecheckcli; the command is pulsecheck, and pck is a short alias for it. All commands: Commands.

Or: one line from GitHub (Linux)

curl -fsSL https://raw.githubusercontent.com/arian24b/pulsecheck/main/install.sh | bash

It installs the PyPI package pulsecheckcli with uv tool and runs pulsecheck init. Then run pulsecheck env, pulsecheck validate and pulsecheck test-notify.

Quick start (from a clone)

uv sync
cp pulsecheck.example.yml pulsecheck.yml     # edit it
uv run pulsecheck validate
uv run pulsecheck test-notify
uv run pulsecheck run [--force] [--fail-on-down] [--tag prod]
uv run pulsecheck status [--json|--md]
uv run pulsecheck report [--json]

shoutrrr runs from its docker image when Docker works, otherwise from the shoutrrr binary on PATH. ping is needed for type: ping.

Want it running on GitHub Actions with the fewest files? Click Use this template on pulsecheck-template: you get just pulsecheck.yml, one workflow and a short README. Keep your copy private: pulsecheck.yml lists your hostnames.

Documentation (wiki)

English فارسی
Overview Home خانه
Every command Commands دستورها
Install and first run Getting started شروع سریع
Every YAML key (types, defaults) YAML reference مرجع YAML
Every setting, explained Configuration تنظیمات
Alert services Notifications اعلان‌ها
GitHub / GitLab / cron Scheduling زمان‌بندی
Vercel / Cloudflare Serverless سرورلس
How it works, what is tested Design notes یادداشت‌های طراحی
Problems Troubleshooting عیب‌یابی

Questions: Discussions. Contributing: CONTRIBUTING. Security: SECURITY.

Development

uv run pytest -q && uv run ruff check . && uv run ruff format --check .

Commit messages follow Conventional Commits (feat:, fix:, ...): the version, CHANGELOG.md, the GitHub release and the PyPI upload are generated from them by python-semantic-release.

License

MIT

Metadata

Release files for pulsecheckcli 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pulsecheckcli 0.2.0
File Size Uploaded
pulsecheckcli-0.2.0.tar.gz 25.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pulsecheckcli 0.2.0
File Interpreter ABI Platform
pulsecheckcli-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 55.5 kB

Release files / pulsecheckcli-0.2.0.tar.gz

Download URL pulsecheckcli-0.2.0.tar.gz
Size 25.6 kB
Tags Source
SHA-256 checksum
How to use checksums
84afa90c45cbc19d549087516a11dc7d53edc0f2c28cd7f85ac9182a942423b0
BLAKE2b-256 checksum
How to use checksums
990344f17ced8000831b9b819eedf85d44155eb2c79fff56f76e7f27194d591d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / pulsecheckcli-0.2.0-py3-none-any.whl

Download URL pulsecheckcli-0.2.0-py3-none-any.whl
Size 29.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6ed7e21dbccd446db8369398cd9a416f42c973ab4751cd6894e7705069b8813f
BLAKE2b-256 checksum
How to use checksums
b184d3920369c5b4aeace48d3405a5654503f0094478ebf2445f0c2243b50b12
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page