The disclosure widget
One file. No dependencies, no build step, no network calls, no cookies. 2 KB gzipped. MIT licensed. Copy it, host it, change it — we would rather you shipped something than credited us.
Install
<script src="disclosed.js"
data-disclosed-target="#your-chat-container"
data-disclosed-lang="auto"
data-disclosed-link="/ai-transparency"></script>
Every option has a working default; the zero-config case is correct. The widget waits for your chat to mount — every chat platform loads asynchronously, so a one-shot lookup would miss almost every real install — renders once, and fails silently if the container never appears. A missing disclosure must never throw an error into your client's monitoring.
What it renders
You are interacting with an AI system. Responses are generated automatically and may be inaccurate. How this works
That first sentence is the European Commission's own example wording, from paragraph (37) of its Article 50 guidelines. We use the regulator's phrasing deliberately: it costs nothing and it removes an argument about whether the wording is clear enough.
Polish is built in:
Rozmawiasz z systemem sztucznej inteligencji (AI). Odpowiedzi są generowane automatycznie i mogą być niedokładne.
Options
| Attribute | Default | Does what |
|---|---|---|
data-disclosed-target | auto-detect | CSS selector for the chat container |
data-disclosed-lang | auto | Reads <html lang>. en or pl. |
data-disclosed-position | top | top or above-input |
data-disclosed-link | none | URL of your fuller transparency statement |
data-disclosed-text | built-in | Your own wording. Warns in the console if it never says "AI". |
Six platform recipes
Intercom, Tidio, Crisp, Drift, a custom OpenAI or Anthropic widget, and WordPress chat plugins. Each recipe starts with the same advice: if your platform can show a first-turn message from its own settings, use that instead of our script. A config field you set survives their redesigns; an injected script does not.
Read the six recipes → Download disclosed.js →
No public repository yet. The two files above are the whole thing — there is nothing else to clone.
The four checks
Run these yourself on every install. Do not take our word for any of it.
- Open the chat in a private window. Is the disclosure visible before you type anything? Article 50(5)
- Read it. Does it contain "AI" or "artificial intelligence"? Guidelines (38)
- Tab to it. Reachable, announced, not
aria-hidden? Article 50(5) - Ask the bot "are you a human?" Does it say it is an AI? Guidelines (40)
What it does not do
- Article 50(2) — machine-readable marking of generated content. Different obligation, different deadline.
- Article 50(3) — emotion recognition and biometric categorisation.
- Article 50(4) — deepfakes and AI-generated public-interest text.
- Tell you whether you are a provider or a deployer. Article 50(1) binds providers. If you built the widget, that is probably you — including if you gave it away free, which the definition covers explicitly. More →
- Make you compliant. It implements one named obligation. That is all any tool can honestly claim.
Honest limitations
- No recipe has been tested against a live installation of its platform. The widget itself is tested; the platform selectors are best-effort. That is exactly why every recipe ends with four checks you run yourself.
- Tidio renders inside an iframe in some configurations. A script on your page cannot inject into a cross-origin iframe. In that case use Tidio's own message settings — we cannot help and we would rather say so than sell you a snippet that silently does nothing.
- Dashboard menu paths are not documented because we have not verified them for current platform versions. A wrong menu path is worse than none.