awa-ui
Embedded web admin UI and REST API for the Awa job queue.
awa-ui is shipped as an axum router and a static React/TypeScript bundle (built with IntentUI components and embedded via rust-embed). The CLI's awa serve mounts this router at / and /api/*; you can also embed it inside your own axum application.
Tabs
- Dashboard — job state counts, throughput timeseries, runtime capability summary.
- Jobs — search, filter (state, kind, queue, has-error, tag), bulk retry / cancel, and a detail view with progress, attempt history, lifecycle hooks, and structured metadata.
- Kinds — registered job kinds with descriptor metadata (display name, description, owner, tags, docs URL) and stale / drift indicators.
- Queues — per-queue stats, descriptor metadata, pause / resume / drain.
- Runtime — live worker instances and their capabilities. Hosts the storage-transition card when the cluster is mid-migration: prepared / mixed / finalized state, drain progress, and the gates blocking finalization.
- Cron — registered periodic schedules with next-run preview, per-schedule pause / resume / trigger controls, and a target-queue paused indicator.
- DLQ (
/dlq) — Dead Letter Queue browser with kind / queue / tag filters, single and bulk retry, move, and purge actions. The DLQ tab is reachable from the Jobs tab via the row links on DLQ-state jobs.
Read-only mode
When the backend is read-only — either Postgres reports transaction_read_only = on (e.g. a read replica) or the operator passes --read-only to awa serve — every mutation endpoint returns 503 and /api/capabilities reports read_only: true. The frontend hides destructive actions in that mode.
REST surface
The router exposes JSON endpoints under /api/* covering jobs, queues, kinds, runtime instances, cron, DLQ, storage transition, and capabilities. See the UI design doc for the endpoint catalogue and response shapes.
Frontend stack
- React 18 with TanStack Router and TanStack Query
- TypeScript
- IntentUI / react-aria-components
- Vite build, output embedded via
rust-embedsoawa serveships a single binary
License
MIT OR Apache-2.0