Troubleshooting
The widget is small (under 40kb gzipped) and has very few moving parts. When it doesn't render, it's almost always one of these five things.
The bell isn't rendering
- Check the workspace slug. Open DevTools → Network → filter for
widget/v1. A 404 on/widget/v1/<slug>/entriesmeans the slug indata-workspacedoesn't match any workspace. - Check your Content-Security-Policy. The widget needs
script-srcto allowhttps://showkit.dev, andconnect-srcfor the same origin. See CSP setup below. - Check for ad-blockers. uBlock Origin with aggressive lists sometimes flags any third-party script tagged "widget." Confirm by disabling and reloading.
- Check the script is in the rendered HTML. View source (not the inspected DOM) and confirm the
<script>tag is actually there. SSR frameworks sometimes strip unknown tags. - Check the console. The widget logs a single warning if it can't initialize. The message will tell you exactly what's missing.
CSP setup
If your site uses a strict Content-Security-Policy, allow these origins:
script-src 'self' https://showkit.dev;
connect-src 'self' https://showkit.dev;
style-src 'self' 'unsafe-inline';The widget renders into a Shadow DOM with its own <style> block, which is why style-src needs 'unsafe-inline' (Shadow-scoped, not page-scoped — it can't leak).
My styles are leaking into the widget
They shouldn't — everything renders inside a Shadow DOM with an isolated stylesheet. If you see your global CSS bleeding in, you're likely on a very old browser without Shadow DOM support (pre-2018). File an issue and tell us the browser.
Dark mode looks wrong
With data-theme="auto" (the default), the widget follows the browser's prefers-color-scheme. If your site has a manual theme toggle that diverges from that, force the widget to match by setting data-theme to light or dark explicitly — and update the attribute when the user toggles.
Still stuck?
Email hello@showkit.dev with your workspace slug and the URL where the embed should be loading. We'll dig in.