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
- 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 (once the first release is on PyPI)
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 (from GitHub until the first release) 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.
Use Use this template to get your own copy with the GitHub Actions workflow ready. Keep your copy private: your 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.1.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.1.0.tar.gz | 24.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pulsecheckcli-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 54.1 kB
Release files / pulsecheckcli-0.1.0.tar.gz
| Download URL | pulsecheckcli-0.1.0.tar.gz |
|---|---|
| Size | 24.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
944f72eb5b3530b4415075d278a5f651206e4edf4b1530ec7607553b379928e5
|
|
BLAKE2b-256 checksum How to use checksums |
66dcb6be828a9ea986186cf85c1b2165d91f79c85bff8792e0d0f35eb78c5e4d
|
| 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.1.0-py3-none-any.whl
| Download URL | pulsecheckcli-0.1.0-py3-none-any.whl |
|---|---|
| Size | 29.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ef32db3d483888f59a5a9c8d5028a70443f4cf1ec7a7319a34aea1945813a32b
|
|
BLAKE2b-256 checksum How to use checksums |
ba4a03ba0e053a24ec3f55b5575c227894943b67e4274c476ec4409527fe6323
|
| 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}
|