The hosted service
deck.kadal.cc hosts published decks and runs their live rooms. You can use the engine without it — this page is for when you want a link to send and a room that holds a hall.
Sign in and workspaces
Section titled “Sign in and workspaces”Sign in with Google or GitHub. You get a personal workspace, named by a handle you pick
(@ada). On the Team plan a workspace is shared: everyone in it can publish to its decks, and billing
is the workspace’s, not a person’s.
A published deck lives at
https://decks.kadal.cc/@<handle>/<slug>/with its presenter view at …/presenter and its audience page at …/join, exactly as in development.
Publish
Section titled “Publish”npx kadal-deck login # once: approve the CLI in your browsernpx kadal-deck publish # build, upload what changed, print the linkWhat publish does:
- finds or creates the deck in your workspace by its slug (the folder name, unless you pass
--slug); - builds it with the right base path for its address;
- hashes every file in
dist/and asks the host which ones it doesn’t already have; - uploads only those — an unchanged image is never sent twice, across versions or decks;
- makes the new version current and prints the URL.
The live room needs no setup: the host tells the deck which room is its own when it serves it, so a deck built anywhere joins the right room wherever it is published.
Visibility and passcodes
Section titled “Visibility and passcodes”| Visibility | Who can open it |
|---|---|
| Public | anyone with the link; search engines may index it |
| Unlisted | anyone with the link; kept out of search engines |
| Passcode | only people who enter the passcode you set |
Unlisted and passcode decks are on the paid plans. Separately, every published deck has a presenter passcode: the presenter view, and everything only a presenter may do in the room, ask for it. Set both in the dashboard.
Versions
Section titled “Versions”Each publish is a new version. The dashboard lists them, and Roll back makes an earlier one current again — the files are still there, so it is instant. How many versions are kept per deck depends on the plan.
Analytics
Section titled “Analytics”For every deck: views; on paid plans, time spent on each slide; on Pro and Team, everything the room records — sessions and their peak audience, questions, reactions, poll and quiz results — with CSV export.
Publishing from CI
Section titled “Publishing from CI”Create an API token in the dashboard (its secret is shown once) and store it as a CI secret.
The CLI reads KADAL_DECK_TOKEN instead of a login:
name: Publish the deckon: push: branches: [main]jobs: publish: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 22 - run: npm ci - run: npx kadal-deck publish env: KADAL_DECK_TOKEN: ${{ secrets.KADAL_DECK_TOKEN }}A token acts as the person who made it, in the workspace it was made in. Revoke it from the dashboard the moment you think it has leaked.
Limits
Section titled “Limits”Storage counts the files of your published decks, each distinct file once. A publish that would take a workspace over its storage is refused before anything is uploaded; nothing already published is affected. The room’s audience cap is checked as each phone connects. What each plan allows is on the pricing page.
The API
Section titled “The API”The dashboard and the CLI use the same JSON API at https://deck.kadal.cc/api/v1/, authenticated by
your session or by Authorization: Bearer kd_…: workspaces, decks, versions, content-addressed blob
uploads, tokens and stats. It is stable within a major version; breaking changes will be announced in
the changelog.