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
  • 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   (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)

Source distribution for pulsecheckcli 0.1.0
File Size Uploaded
pulsecheckcli-0.1.0.tar.gz 24.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pulsecheckcli 0.1.0
File Interpreter ABI Platform
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}

Release history Release notifications | RSS feed

0.2.0

2 release files

This release

0.1.0 This release

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