LiveView-first web console for the Durable workflow engine.
The dashboard renders server-side via Phoenix LiveView, with a single ReactFlow island for the workflow-graph view. No SPA, no separate API — just one router macro.
- Overview — live status counts and recent executions
- Workflows — searchable, filterable list with pagination
- Workflow detail — summary, flow graph, topology, logs, I/O, and child-execution history
- Pending inputs — surface and resolve human-in-the-loop steps
- Schedules — toggle, trigger, and inspect cron-driven workflows
- Settings — inspect Durable's runtime configuration
- ⌘K command palette — keyboard-driven navigation
Add durable_dashboard alongside durable:
def deps do
[
{:durable, "~> 0.0.0-alpha"},
{:durable_dashboard, "~> 0.0.0-alpha"}
]
endMount the dashboard at any path in your host router:
defmodule MyAppWeb.Router do
use MyAppWeb, :router
# ...your existing pipelines and scopes...
use DurableDashboard.Router, mount: "/dashboard", durable: MyApp.Durable
endThe macro emits the dashboard's pipelines, asset routes, and live routes
inline in your router. It must live at the top level — not inside a
scope or pipe_through block, since it defines its own pipelines.
:mount— URL prefix the dashboard mounts at (required):durable— Durable instance name (default:Durable):live_socket_path— path your endpoint uses forPhoenix.LiveView.Socket(default:"/live"):on_mount— list ofon_mounthooks the host wants to inject for auth or other concerns (default:[])
The macro emits these routes under your :mount prefix:
GET /— OverviewGET /workflows— listGET /workflows/:id[/:tab]— detailGET /inputsGET /schedulesGET /settingsGET /__assets__/*— CSS/JS/font assets
Inject your host app's auth via :on_mount hooks — the dashboard does
not ship its own auth layer:
use DurableDashboard.Router,
mount: "/dashboard",
durable: MyApp.Durable,
on_mount: [{MyAppWeb.UserAuth, :ensure_authenticated}]DESIGN.md codifies the design language: tokens, typography, spacing,
motion, status semantics, component primitives, and composition
patterns. New visual decisions are made there first, then applied in
code.
MIT