Skip to content

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