Persistent watches. Durable alerts.

Know what
happened.
See why.

Watch an API, run a local check, or receive events from your software. Ding keeps the state, records the evidence, and retries the notification.

Watch runtime: v0.15.2. Using the legacy runtime?

Ding ConsoleSAMPLE DATA
Selected event

API health

Incident opened

Three checks.
Three server errors.

The third matching response opened this incident.

01 · Observed503HTTP status
02 · Evaluated3 of 3matching checks
03 · RecordedFiringevent + evidence
04 · DeliveredNot shownfixture sends nothing

Retained observations

Jan 1 · UTC
00:00:00500Matching
00:00:05502Matching
00:00:10503Incident opened

Illustrative evidence view with sample data. Ding includes a local Console, CLI, API, and MCP adapter.

Runs on your infrastructureState survives restartsApache-2.0No model call on each check

01 / The whole story

An alert with a reason
you can inspect.

From the first observation to the last delivery attempt, Ding keeps the pieces connected.

  1. 01

    Observe

    Poll an HTTP endpoint, run an explicit command, or accept authenticated JSON.

    HTTP · command · push
  2. 02

    Evaluate

    Apply a declared condition. Keep incident state and recovery progress across restarts.

    One versioned manifest
  3. 03

    Record

    Commit the event and its evidence to local SQLite storage, with explicit retention limits.

    State + evidence + outbox
  4. 04

    Deliver

    Send notifications with durable retries. Inspect failures and deduplicate stable event IDs.

    Console · webhook · Slack · Discord

02 / Small definitions. Real jobs.

Watch what matters.

Start with a supported source and a condition you can explain.

01

Catch an API failure. Track its recovery.

Open an incident after three actual 5xx responses. Recover after two nonmatching observations.

HTTP
02

Notice when a heartbeat goes quiet.

A persistent deadline can fire even when no new measurement arrives.

Push
03

Know when something changes.

Compare a value to its saved baseline or recognize a new provider event ID.

Events

03 / Your tools. One runtime.

A definition you can
read, test, and keep.

Use the CLI, have an agent help write the manifest, and inspect the same watch through the planned Console. The Go daemon owns evaluation and durable state.

Validate before applying. Replay a fixture without source requests or notifications. Review how an edit affects existing state.

Explore watch definitions
api-health.yaml Excerpt · replace the example endpoint
apiVersion: ding.ing/v1alpha1
kind: Watch
metadata:
  id: api-health
  name: API health
spec:
  source:
    type: http
    url: https://api.example.com/health
    every: 5s
    timeout: 2s
  condition:
    field: http.status
    operator: gte
    value: 500
  policy:
    trigger: transition
    consecutive: 3
    recoverAfter: 2
    onUnknown: hold-incident
  destinations:
    - ref: ops-webhook
      events: [firing, recovered, source_error, source_recovered]
See complete, runnable examples →

04 / Keep it yours

One daemon.
A durable memory.

Run Ding locally or on your own server. Its SQLite store keeps conditions, evidence, and pending notifications together.

A running daemon is required. Delivery is at least once; receivers should deduplicate event IDs. Retention and resource limits are explicit, and unknown input never silently clears an open incident.

Read the operating guide →

Start with one watch

Make the next alert
make sense.

Create your first watch

No external service required for the quickstart.
Watch runtime: v0.15.2.