Pulse is a self-hosted uptime monitor. Add URLs, set check intervals, and get an instant view of what's up and what's down — no accounts, no cloud, runs in a single Docker container.
- Monitor any HTTP/HTTPS URL with HEAD or GET requests
- Configurable check intervals from 1 minute to 24 hours
- Up/down/error status with response time display
- Down event alerts with dismiss support
- Per-monitor history log with status codes and response times
- Auto-fetched favicons for each monitored site
- Search and filter your monitors
- Enable or disable individual monitors
- Manual "check now" trigger per monitor
- Import and export monitors as JSON
- Bulk interval update across all monitors
- Log cleanup to trim old history
- Multiple built-in themes (light and dark)
- SQLite — no external database required
Pick whichever install path matches your setup. All paths land on http://localhost:3040.
Works on Synology, Unraid, TrueNAS, QNAP, Proxmox, or a plain Docker host.
docker run -d \
--name pulse \
-p 3040:3040 \
-v pulse-data:/app/data \
--restart unless-stopped \
larsmikki/pulse:latestOr with Compose:
services:
pulse:
image: larsmikki/pulse:latest
container_name: pulse
ports:
- "3040:3040"
volumes:
- pulse-data:/app/data
restart: unless-stopped
volumes:
pulse-data:Requires Git for Windows and Node.js 20+.
git clone https://github.com/larsmikki/pulse.git
cd pulse
npm install
npm run devFor a production build: npm run build && npm start.
brew install node git
git clone https://github.com/larsmikki/pulse.git
cd pulse
npm install
npm run devFor a production build: npm run build && npm start.
Debian/Ubuntu:
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs git
git clone https://github.com/larsmikki/pulse.git
cd pulse
npm install
npm run devOn Fedora/RHEL use dnf install nodejs git; on Arch use pacman -S nodejs npm git.
For a production build: npm run build && npm start.
| Variable | Default | Description |
|---|---|---|
PORT |
3040 |
Port the server listens on |
DATA_DIR |
/app/data |
Directory for the SQLite database |
LOG_RETENTION_DAYS |
7 |
Days of check history to retain; cleanup runs on startup and every 24 hours |
| Action | How |
|---|---|
| Add a monitor | Click Add Monitor |
| Edit a monitor | Click the monitor card, then the edit icon |
| Pause a monitor | Toggle the enable switch in the edit dialog |
| Check immediately | Hover a card and click the refresh icon |
| Import monitors | Settings → Import |
| Export monitors | Settings → Export |
| Change theme | Settings → Themes |
All data is stored in a single SQLite file inside the Docker volume:
/app/data/
data.db # monitors, check logs, and settings
The database filename (data.db) and localStorage theme key (theme) are brand-neutral, so
renaming the app does not reset application data or preferences when the same data directory is
used.
The Docker volume was renamed from uptime-pulse-data to pulse-data. If you have an existing
deployment, either keep the old volume name in your compose file, or copy the data directory
contents to the new volume before starting Pulse.
If Pulse saves you time, consider buying me a coffee or donating via PayPal. It helps keep the project free and maintained.
