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_afterto 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) andreport(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-notifyto 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)
| File | Size | Uploaded | |
|---|---|---|---|
| pulsecheckcli-0.2.0.tar.gz | 25.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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}
|