Dashboard and sign-in
The Chaski Worker serves its dashboard at its own URL, behind Cloudflare Access.
Where it lives
The dashboard and its API are the Chaski Worker’s own URL, such as
https://chaski.<your-subdomain>.workers.dev. It ships built inside the package, so there is
nothing to upload or host: deploying the Worker deploys it.
Who signs in
Cloudflare Access decides who gets in. Access signs people in before their request reaches the Worker, and hands Chaski who they are; Chaski opens the dashboard only to a request that carries that identity, and answers Chaski needs Cloudflare Access to any other. There’s no password or sign-in of Chaski’s own to configure. Install turns Access on.
Everyone Access lets in can do everything: edit templates, replay deliveries, change channel settings and pause channels. Choose who that is in the Access application’s policy, such as your team’s email domain or a group of your identity provider. Each change is recorded under the email Access signed in.
Under wrangler dev, Wrangler signs in the identity under access.dev in wrangler.jsonc, as
Access would; see Local development.
What it shows
- Overview: notifications, sent, success rate and open rate for a period, deliveries per day, delivery latency and the health of each type on each channel.
- Deliveries: every delivery and its status, with each attempt’s error, a replay for the failed and dead ones, and the held ones a paused channel keeps.
- Schedules: pending scheduled sends, which you can cancel. One still pending a minute after its time shows as overdue.
- Templates: the editor, with a live preview and a test send for email.
- Channels: each channel’s settings and state, Off, On, Paused or Failing, a pause for each channel that runs, and the types muted by default.
Pause a channel
Pause on the Channels page is the emergency brake: a provider failing, a bug sending the same push again and again, content that went out wrong. From then on every delivery of that channel waits as held instead of going out, transactional and scheduled ones included, and the header shows the channel as paused. The pause lives in Chaski’s database, so it stays until someone resumes the channel, deploys included.
Resume asks what to do with what the pause held: send it all now, or keep it. Kept deliveries
stay under the Held tab of Deliveries, where you send or discard each one, or every one of
a channel and type. A delivery sends only once its channel runs again, and a discarded one shows as
skipped and never goes out. An inline send on a paused channel throws
channel_paused, and its email waits as held like the rest.
Pausing holds deliveries; removing a channel’s settings turns the channel off, and its sends skip
it without holding anything. ready() lists the paused channels under paused, for a health
check that should notice.
Live updates
With the ChaskiEvents Durable Object bound as CHASKI_EVENTS, open dashboards refresh as
deliveries change, and the header says Live. Without it, the dashboard still works, and
refreshes when you come back to its tab or reload it.
Updated Oct 30, 2026
MIT License · chaski.sh