menu
Monitors Tests Errors Servers Pricing Docs GitHub Sign in Start free →
UPTIME · TESTS · ERRORS · CRON · OPEN SOURCE

It will break.
You’ll know first.

Uptime, browser tests, and exception tracking — on one calm dashboard, hosted in the EU.

92,735 checks since yesterday 1-minute interval EU hosted, GDPR by default
Uptime · 24h 99.984% 14 monitors · 187ms avg · 1 incident resolved
Exceptions · 24h 214events 4 issues · 38 users · release v2.4.1-rc3
live
Response time & exceptions · last 24 hours
response time warnings exceptions
200ms baseline EXCEPTIONS 14:02 · 38 exceptions · 4m32s
TypeErrorCannot read 'price' of undefined· checkout/cart.tsx:84 2s ago 142
ReferenceErrorpaymentSession is not defined· api/stripe.ts:212 1m ago 38
TimeoutWarn/v1/inventory > 800ms budget· lib/http.ts:47 4m ago 21
NetworkErrorECONNRESET on retry· webhook-relay 12m ago 13
● OK api.acme.io 142ms ● OK checkout.shop.dev 89ms ● OK docs.platform.io 210ms ● OK auth.uppi.dev 76ms ● FAIL cdn.assets.co timeout ● OK webhook.relay.io 54ms ● OK db-east-1.internal 12ms ● OK status.uptime.org 188ms ● OK media.bucket.s3 301ms ● OK jobs.cron.run 4ms ● OK api.acme.io 142ms ● OK checkout.shop.dev 89ms ● OK docs.platform.io 210ms ● OK auth.uppi.dev 76ms ● FAIL cdn.assets.co timeout ● OK webhook.relay.io 54ms ● OK db-east-1.internal 12ms ● OK status.uptime.org 188ms ● OK media.bucket.s3 301ms ● OK jobs.cron.run 4ms
01 · Coverage

One platform. The whole stack.

From the edge request to the running process to the line that threw — Uppi watches every layer your app actually has.

01 / Endpoint

HTTP / HTTPS

Status codes, response bodies, headers, redirects, TLS expiry.

●  1-min interval · global probes
02 / Network

TCP & ports

Postgres, Redis, mail relays, SSH — anything that holds a socket.

●  any port · reachability + latency
03 / Jobs

Cron heartbeats

A unique URL per job. Notice the silence before the report is missing.

●  grace windows · dead-job alerts
04 / Browser

Synthetic tests

Click together a real user flow. Replay it on schedule, headless.

●  visual step builder · screenshots on fail
05 / Server

Host metrics

A small Go agent streams CPU, memory, disk, network — threshold alerts.

●  one-line install · open source
06 / Runtime

Exception tracking

Stack traces, breadcrumbs, release tags, user context. Group identical errors. Spot regressions the second they ship.

●  SDK in 6 langs · same alerts as the rest
02 · Response

From red to resolved.

One incident model across every check. Routed, acknowledged, broadcast, closed — all on one timeline you can hand to a regulator.

incident #2841 · checkout.shop.dev
500 on POST /cart/checkout
resolved · 4m 32s
14:02:11 DETECT Monitor failed· 3 consecutive 500s · EU-west probe
14:02:11 ROUTE Paged on-call· #ops-alerts · Maya R. (sms + push)
14:02:38 ACK Acknowledged· Maya R. · "looking — db pool exhausted?"
14:03:02 PUBLIC Status page updated· status.shop.dev · "Investigating checkout"
14:04:51 NOTE Linked deploy· release v2.4.1-rc3 · 2 min before first failure
14:06:43 OK Recovered· rolled back · 12 consecutive 200s
14:07:15 CLOSE Post-mortem drafted· auto-attached: graphs · alerts · deploy diff

One incident model

HTTP, cron, browser test, exception — all roll up into the same timeline. One ack, one resolve, one record.

Status page in the loop

Auto-publish to a hosted or self-hosted status page. Customers know before they ask.

Deploy correlation

Every incident lists the last deploy. Rollback is one click and re-checks the failing monitor.

Post-mortems, written for you

On close, Uppi attaches the graphs, the alert chain and the deploy diff. You write the human part.

03 · Alerts

Reach the right person, once.

One incident, one page. Routing rules pick the channel and stop — no fan-out spam, no five Slacks repeating the same thing.

Email
detailed alert emails
Slack
channel notifications
Telegram
bot messages
P
Pushover
push notifications
SMS
via Bird
Webhook
custom integrations
PagerDuty
on-call escalation
Discord
server messages
Mobile app
iOS · Android
incident · INC-4821 ● firing
14:02:11FAILcheckout.shop.dev → 503 Service Unavailable
14:02:11SEND→ #ops-alerts (slack)
14:02:11SEND→ on-call · Maya R. (sms)
14:02:42ACKacknowledged · Maya R.
14:06:48OKrecovered · 4m 37s · 200 OK
14:06:48SEND→ resolution to all subscribers
04 · Tests

Write the test once. Run it as a monitor.

Build a real user flow on a visual canvas — no code. Then drop it into a monitor and let headless Chromium replay it on schedule.

test · checkout-flow · used by 3 monitors · ✓ passed 2m ago
01 Visithttps://shop.example.com 128ms
02 Typeemail · [email protected] 85ms
03 PressSign in 372ms
04 Wait for text"Welcome back" 1.2s
05 Clicka[href="/cart"] 94ms
06 Assert2 items in cart
07 Screenshotcart-state.png
used by mon · checkout-eu mon · checkout-us mon · checkout-ap

Visual step builder

Click together a real user flow on an intuitive canvas. Visit, type, click, wait, assert. No code.

Reuse across monitors

One test, many monitors. Run checkout-flow from EU, US and AP — three monitors, one definition. Edit once, all three update.

Screenshots on failure

When a step fails, Uppi captures the page state, HTML snapshot and console log. You see exactly what the user saw.

Same alerts as the rest

Test failures route through the same channels as your HTTP and cron checks. One incident model. One on-call.

05 · Servers

One agent. Full visibility.

A small Go binary. Drops onto any Linux box and streams CPU, memory, disk and network — with the same threshold alerts as everything else.

web-prod-01 · eu-west
nominal
healthy · 47d
CPU
27%
8 cores
MEMORY
6.2 / 8 GB
77.5%
DISK
78%
/ — 312 GB
NETWORK
eth0
12.4 MB/s ↑ 3.1 ↓
$ curl -sSL get.uppi.dev | sh

One-line install

curl-piped Go binary. No Docker, no Python, no agent fleet.

Threshold alerts

Set custom levels per metric. Get notified the moment something crosses your line.

Audit the source

The whole agent is on GitHub. Read it, fork it, ship it. No black box on your servers.

06 · Errors

When something throws, you read the stack.

Drop the SDK in. Catch every uncaught exception with full stack traces, breadcrumbs, release tags and user context.

● unresolved · prod

TypeError: Cannot read properties of undefined (reading ‘price’)

at CartSummary.computeTotal · checkout/cart.tsx:84

214
events · 24h
first seen
2h 14m ago
last seen
just now
users affected
38
release
v2.4.1-rc3
82const computeTotal = (items) => {
83  // sum line items + tax
84  return items.reduce((a, i) => a + i.price * i.qty, 0);
85};
86
87function CartSummary({ cartId }) {
88  const items = useCart(cartId)?.items;
Breadcrumbs · last 6 events before crash
14:02:08navGET /checkout/cart
14:02:09clickbutton[data-id="apply-promo"]
14:02:09httpPOST /api/promo · 200 OK
14:02:10httpGET /api/cart/8821 · 200 OK
14:02:11clicka[href="/checkout/review"]
14:02:11errTypeError · cart.tsx:84

Full stack traces

Sourcemapped to your original code. Click any frame to jump to the line. Local variables and breadcrumbs included.

Smart grouping

Identical exceptions collapse into one issue with a frequency curve. New errors stand out. Resolved ones stay resolved — until they regress.

Release tagging

Every event tagged with the release that produced it. See the spike start at v2.4.1, find the commit, ship the fix.

Web · server · mobile

JavaScript, Node, Python, Ruby, PHP, Go. One SDK per stack, one inbox for everything. Same routing, same on-call.

Privacy aware

Scrub PII before send. Configurable allowlist for headers and request bodies. Hosted in the EU, GDPR by default.

6.8M
CHECKS RUN
143
MONITORS WATCHED
37
ALERTS DELIVERED
60s
MIN INTERVAL
07 · Pricing

Free forever. Or yours forever.

Hosted is free up to a fair limit, no card and no clock. Or self-host the whole thing — same software, your perimeter, no telemetry.

Hosted · free
€0/forever

Run by us. No card. No clock. No surprise migration to a paid tier.

  • Up to 25 monitors
  • 1-minute interval
  • All monitor types
  • All alert channels
  • Public status pages
  • 30-day history
Start free →