Use one public app origin for the website and the panel API:
- the frontend Worker
workers.devURL - or a custom domain such as
https://rocklist.live
Set the same app URL in:
.env.deployAPP_URL- GitHub Actions
APP_URLsecret VITE_TWITCH_EXTENSION_API_BASE_URLwhen you build the standalone panel artifact
npm run deployConfirm the site loads on the final app origin before you update the Twitch extension settings.
Make sure the frontend Worker has:
TWITCH_CLIENT_IDTWITCH_CLIENT_SECRETTWITCH_EVENTSUB_SECRETTWITCH_EXTENSION_SECRETSESSION_SECRETADMIN_TWITCH_USER_IDSSENTRY_DSNwhen Sentry is enabled
Make sure the backend Worker has:
TWITCH_CLIENT_IDTWITCH_CLIENT_SECRETTWITCH_EVENTSUB_SECRETTWITCH_EXTENSION_CLIENT_IDTWITCH_EXTENSION_SECRETSENTRY_DSNwhen Sentry is enabled
Website app redirect URIs:
https://your-app-host/auth/twitch/callbackhttps://your-app-host/auth/twitch/bot/callback
Twitch extension settings:
Request Identity Link: enabledAllowlist for URL Fetching Domains:https://your-app-host
VITE_TWITCH_EXTENSION_API_BASE_URL=https://your-app-host npm run build:extension:packageUpload the newest zip from:
output/twitch-extension/request-bot-panel-YYYYMMDD-HHmmss.zip
The zip contains index.html, assets, and backgrounds at the archive root.
Hosted Test asset paths:
Panel Viewer Path:index.htmlConfig Path:index.html
Add the intended beta accounts to the Twitch extension Testing Account Allowlist.
- unlinked viewer: playlist and search load, write actions require identity share
- linked viewer: add, VIP add, edit, and remove work
- owner: queue moderation controls appear and work
- moderator: controls follow the channel’s moderator permission settings
If a production panel request fails, check the frontend Worker logs for panel bootstrap and state traces.