Self-Hosted · Air-Gap Ready · Apache 2.0

A self-hosted ITSM engine that runs on your own metal. Tickets, workflows, SLA enforcement — zero cloud dependency, zero vendor lock-in, zero incident records leaving your perimeter.

dispatch — incident queue
● LIVE
All IncidentsOpenIn ProgressResolved
3 active
CRIT

DB primary failover — replication lag 38s

INC-4821 · K. Oduya

00:07:43

SLA breach

ACTIVE
HIGH

Nginx upstream 502 — pods/web-3 unresponsive

INC-4820 · M. Svensson

00:23:11

SLA remain

TRIAGED
MED

Cert expiry warning — api.internal 14d

INC-4819 · Unassigned

04:00:00

SLA remain

OPEN
dispatch@prod-01 ~uptime 47d 11h · 0 missed SLAs

100%

Data on your metal

<60s

Deploy from zero

0

Vendor dependencies

SOC2

Audit trail ready

Spoke 01 / Tickets

From inbox chaos to
structured incident records.

Every alert, email thread, and Slack ping collapses into a single canonical ticket. One source of truth. Owned by your infrastructure.

Before Dispatch
⚠ Shared Inbox — 47 unread
@

PROBLEM: db-primary is DOWN

alerts@nagios.internal · 02:14

#

anyone else seeing 502s on the API?

#ops-fire · 02:16

@

FWD: FWD: RE: server down???

noc@corp.com · 02:17

Row 847: unresolved - assigned to ???

incident_log_v3_FINAL.xlsx · 02:18

#

@here is the site down for everyone?

#general · 02:19

@

RE: what is happening right now

cto@company.com · 02:21

No owner. No SLA. No audit trail.
With Dispatch
Incident Queue · dispatch@prod-01auto-ingested · 4 open
CRIT

DB primary failover

INC-4821 · K. Oduya

07:43ACTIVE
HIGH

API upstream 502

INC-4820 · M. Svensson

23:11TRIAGED
MED

Cert expiry warning

INC-4819 · Auto-assigned

4:00:00OPEN
LOW

Load balancer health check

INC-4818 · T. Nakamura

8:00:00RESOLVED
✓ Every alert owns an owner, SLA, and audit log.
Auto-ingest email, PagerDuty, webhooks
🔒Immutable audit log per ticket
👤Round-robin or rule-based assignment
📋Custom fields & CMDB linking
Spoke 02 / Workflows

Automate the
3 a.m. runbook
before it pages you.

Build visual automation rules in YAML or the drag-and-drop editor. Trigger on severity, age, SLA proximity, or any custom field. No Zapier. No cloud. Runs inside your perimeter.

1

IF CRIT ticket opens

THEN Page on-call + create war room + auto-assign

2

IF SLA < 10 min remaining

THEN Escalate to manager + Slack broadcast

3

IF Ticket open > 4h

THEN Reassign + notify team lead

workflow.yml — live preview

on:
  ticket.created:
    severity: critical
actions:
  - page_oncall: tier_1
  - create_channel: "#inc-{{ ticket.id }}"
  - assign: round_robin(oncall_team)
Automation Editor — Critical Incident Flow● ACTIVE

Trigger

Severity = CRIT

Condition

SLA < 15min?

Condition

No assignee?

Action

Page on-call

Action

Escalate tier

Action

Auto-assign

Notify

Slack #ops-fire

Notify

Email + SMS

trigger
condition
action
notify
Spoke 03 / SLA Engine

SLAs that enforce themselves.
No manual tracking.

Define policies in YAML. Dispatch watches every clock. Color shifts from violet to amber to red as deadlines approach — and fires automations before you have to think.

99.2%

SLA compliance, last 90d

0

Breaches this month

4.2m

Avg time to acknowledge

Policy definitions

SLA Engine· dispatch@prod-01
LIVE
12:45:26
INCIDENT
SEV
POLICY
ASSIGNEE
REMAINING
PROGRESS
STATUS

DB primary replication lag

INC-4821

CRIT
P1-Critical-1h
K.
00:07:43
⚠ BREACH

API upstream gateway 502

INC-4820

HIGH
P2-High-4h
M.
01:23:11
⚡ WARN

Disk usage > 90% — /var/log

INC-4817

HIGH
P2-High-4h
T.
00:20:00
⚠ BREACH

SSL cert renewal failure

INC-4815

MED
P3-Medium-24h
Auto-rule
12:00:00
✓ OK

Backup job timeout

INC-4812

LOW
P4-Low-48h
B.
38:53:20
✓ OK
Clocks tick in real time. Automations fire at threshold.5 active · 0 breached
Spoke 04 / Self-Host

Your metal.
One command.

No SaaS. No phone-home. No incident record ever leaves your network. Deploy on bare metal, VMs, Kubernetes, or an air-gapped SCIF. Apache 2.0 — audit every line.

Quick Start
$docker pull ghcr.io/dispatch-itsm/dispatch:latest
docker run -d \
  --name dispatch \
  -p 8080:8080 \
  -v /opt/dispatch/data:/var/dispatch/data \
  -e DISPATCH_SECRET_KEY=<secret> \
  -e DISPATCH_DB_URL=<postgres-url> \
  --restart unless-stopped \
  ghcr.io/dispatch-itsm/dispatch:latest

Compliance Posture

🛡SOC 2 Type II
🏥HIPAA Ready
🏛FedRAMP Aligned
🔒Air-Gap Support
FIPS 140-2
📋ISO 27001
🔐

Zero phone-home

No telemetry. No license server. No outbound connections required.

📦

Single binary option

Dispatch ships as a statically linked binary for fully air-gapped deployments.

🗄

Bring your own Postgres

Plugs into your existing database cluster. No proprietary storage layer.

🔑

LDAP / SAML / OIDC

Plug into your existing identity provider. AD, Okta, Keycloak all supported.

Spoke 05 / Integrations

Plugs into your stack.
Stays on your network.

Every integration runs as a local connector — no data leaves your perimeter. Configure in minutes via YAML. No OAuth dance with a third-party relay.

🔔PagerDutyAlerting
📊PrometheusMonitoring
📈GrafanaObservability
💬SlackComms
🎯JiraTracking
🐙GitHubSCM
🐕DatadogAPM
📟OpsgenieOn-Call
AnsibleAutomation
🔍SplunkSIEM
🔑LDAP / ADIdentity
🔗WebhookGeneric
🔔PagerDutyAlerting
📊PrometheusMonitoring
📈GrafanaObservability
💬SlackComms
🎯JiraTracking
🐙GitHubSCM
🐕DatadogAPM
📟OpsgenieOn-Call
AnsibleAutomation
🔍SplunkSIEM
🔑LDAP / ADIdentity
🔗WebhookGeneric
🔔

PagerDuty

Alerting

Bi-directional sync — incidents flow in, resolves flow back

📊

Prometheus

Monitoring

AlertManager webhook → auto-ticket on firing rules

📈

Grafana

Observability

Embed live panels directly into incident timelines

💬

Slack

Comms

Auto-create war rooms, notify on SLA breach, slash commands

🎯

Jira

Tracking

Sync incidents to Jira issues, maintain bidirectional state

🐙

GitHub

SCM

Link commits and PRs to incidents for root cause tracing

integrations.yaml — PagerDuty configAll connectors run in-process. Zero relay.
integrations:
  pagerduty:
    enabled: true
    api_key: ${PAGERDUTY_API_KEY}   # stays in your env
    service_ids: [PXXXXXXX, PYYYYYY]
    sync_direction: bidirectional
    auto_resolve: true

  slack:
    enabled: true
    bot_token: ${SLACK_BOT_TOKEN}
    default_channel: "#ops-incidents"
    create_war_room_on: [critical, high]
Ungated. No email. No form. Self-served.

Your incidents.
Your infrastructure.
Starting now.

Pull the image. Own your help desk in under 60 seconds. No trial. No credit card. No data leaving your network — ever.

$docker pull ghcr.io/dispatch-itsm/dispatch:latest

Apache 2.0 · Self-hosted · No vendor lock-in · Upgrade path inside the app