lerko cfbf01274d
CI / test (push) Successful in 2m40s
CI / lint (push) Successful in 1m2s
CI / vulncheck (push) Successful in 51s
Release / docker (push) Has been cancelled
Release / release (push) Has been cancelled
chore(tui): visual polish — detail sections, column headers, alert detail (#37)
## Summary

Bundled remaining UX polish items from the screenshot review.

### Changes

**Detail panel sections (#5)**
- Fields grouped into ENDPOINT, TIMING, HTTP, CONFIG sections with subtle headers
- Matches existing PROBE RESULTS and STATE CHANGES section pattern
- Cleaner visual hierarchy without box-drawing clutter

**Omit unconfigured fields (#6)**
- Timeout hidden when 0 (unconfigured)
- Method hidden when default GET
- AcceptedCodes shows "200-299" explicitly when empty

**Column header (#7)**
- `LATENCY` → `LAT` (design short, never truncate — htop/btop pattern)

**Alert detail view (#8)**
- `i` key on Alerts tab opens full detail panel
- Shows: type, health status, last sent time, send/fail counts, last error
- Full config key:value pairs (untruncated)
- Keybinding: `[i/Esc] Back  [e] Edit  [t] Test  [q] Quit`

### Files (3)
- `internal/tui/tab_sites.go` — section headers, field omission, LAT header
- `internal/tui/tab_alerts.go` — viewAlertDetailPanel()
- `internal/tui/tui.go` — stateAlertDetail, key handler, render routing

Reviewed-on: lerko/uptop#37
2026-05-28 20:40:29 +00:00

uptop

Self-hosted uptime monitor with a TUI you can access over SSH. No browser, no install on the client — just ssh -p 23234 your-server.

Built on the foundation of RDGames/go-upkeep.

What it does

  • 6 check types: HTTP, Push (heartbeat), Ping, Port, DNS, Groups
  • 9 alert providers: Discord, Slack, Email, Ntfy, Webhook, Telegram, PagerDuty, Pushover, Gotify
  • Config as code: define monitors in YAML, apply declaratively, version control your setup
  • HA clustering: leader/follower with automatic failover
  • Prometheus metrics: /metrics endpoint for Grafana dashboards
  • Public status page: HTML + JSON, toggle with an env var
  • SQLite or Postgres: SQLite for single-node, Postgres for production
  • Uptime Kuma import: migrate from Kuma with one command

Quick start

go run cmd/uptop/main.go
ssh -p 23234 localhost

Seed some demo data to see it in action:

go run cmd/uptop/main.go -demo

Install

From source

go install gitea.lerkolabs.com/lerko/uptop/cmd/uptop@latest

Docker

docker pull lerko/uptop:latest
docker run -p 23234:23234 -p 8080:8080 -v ./data:/data lerko/uptop

Binary

Download from Releases.

Config as code

Export your current monitors:

uptop export -o monitors.yaml

Apply a config file:

uptop apply -f monitors.yaml
uptop apply -f monitors.yaml --dry-run   # see what would change
uptop apply -f monitors.yaml --prune     # delete anything not in the YAML

See docs/config-as-code.md for the full reference.

Docker

services:
  monitor:
    build: .
    restart: unless-stopped
    stdin_open: true
    tty: true
    ports:
      - "23234:23234"
      - "8080:8080"
    volumes:
      - ./data:/data
      - ./ssh_keys:/app/.ssh
    environment:
      - UPTOP_DB_TYPE=sqlite
      - UPTOP_DB_DSN=/data/uptop.db
      - UPTOP_STATUS_ENABLED=true
      - UPTOP_CLUSTER_SECRET=change-me

First run: attach to the container (docker attach uptop), go to the Users tab, add your SSH public key. Then detach with Ctrl+P, Ctrl+Q and connect normally over SSH.

Environment variables

Variable Default What it does
UPTOP_PORT 23234 SSH server port
UPTOP_HTTP_PORT 8080 HTTP server port (status page, push, metrics)
UPTOP_DB_TYPE sqlite sqlite or postgres
UPTOP_DB_DSN uptop.db Database path or connection string
UPTOP_STATUS_ENABLED false Enable public status page
UPTOP_STATUS_TITLE System Status Status page title
UPTOP_CLUSTER_MODE leader leader or follower
UPTOP_PEER_URL Leader URL for follower nodes
UPTOP_CLUSTER_SECRET Shared key for cluster + API auth
UPTOP_INSECURE_SKIP_VERIFY false Skip TLS verification for checks

Migrating from Uptime Kuma

Export your Kuma backup JSON, then:

curl -X POST http://localhost:8080/api/import/kuma \
  -H "X-Upkeep-Secret: your-secret" \
  -H "Content-Type: application/json" \
  -d @kuma-backup.json

License

MIT — see LICENSE.

S
Description
Live uptime monitoring dashboard for your terminal. SSH-accessible. HTTP, ping, TCP, DNS, push checks with alerts, clustering, and Prometheus metrics.
Readme MIT 2.2 MiB
2026.05.6 Latest
2026-05-30 23:34:56 +00:00
Languages
Go 99.7%
Dockerfile 0.3%