Skip to content

Docs

Install the widget

Add the JavaScript widget to any website, WordPress or site builder, with CSP guidance.

Standard installation

Paste this before the closing </body> tag on every page where the widget should appear. Replace the key with the one shown in Settings → Widget.

<script
  async
  src="https://ext0.com/sdk/v1/feedback-widget.min.js"
  data-workspace="pub_YOUR_PUBLIC_WORKSPACE_KEY"
></script>

The data-workspace key is public. It identifies your workspace but cannot read private boards or perform staff actions, so it is safe in page source.

Allowed domains

In Settings → Widget → Allowed domains, add every origin that embeds the widget, such as https://example.com and https://app.example.com. The widget refuses to initialize on other origins. http://localhost origins are only allowed when development mode is turned on for the workspace.

WordPress

  1. In WordPress admin, open your theme's footer-scripts option or a "header and footer code" plugin of your choice.
  2. Paste the snippet into the footer (before </body>) area and save.
  3. Clear any page cache, then reload your site and look for the launcher.

Block themes: add a Custom HTML block to the footer template part and paste the snippet there.

Site builders and tag managers

Most site builders have a "custom code" or "code injection" setting — paste the snippet into the footer or end of body field. With a tag manager, create a custom HTML tag that fires on all pages; the async script is safe to inject after page load.

Single-page applications

Include the snippet once in your HTML shell. The widget persists across client-side route changes. To open it from your own UI use window.FeedbackWidget.open('feedback') — see the SDK reference.

Content Security Policy

If your site sends a CSP header, allow the widget origin for scripts, frames and connections:

Content-Security-Policy:
  script-src 'self' https://ext0.com;
  frame-src https://ext0.com;
  connect-src 'self' https://ext0.com;

On our side, the widget iframe sends a frame-ancestors policy built from your workspace's allowed domains, so the panel can only be framed by sites you approve.

Troubleshooting

  • No launcher appears: check the browser console, confirm the key, and confirm your origin is in Allowed domains.
  • Panel is blank: a CSP frame-src rule is usually blocking the iframe.
  • Launcher hidden behind other elements: raise the z-index in Settings → Widget.