AI Disclosure records how AI was involved in producing a piece of content, works out whether Article 50 of the EU AI Act requires a visible label, and shows the disclosure to the reader with the official European Commission icons.
Not legal advice
This module is a tool to help a site comply with Article 50 of the EU AI Act. It is not legal advice. It records the disclosure decision the site makes and shows it to the reader. It does not make that decision and does not certify compliance. In the spirit of open source, the maintainers take no legal liability for how it is used.
What Article 50 asks of a site
Since 2 August 2026, a site that publishes AI generated or AI manipulated text on matters of public interest, or deep fake media, has to disclose it. Content that went through human review is exempt where a person holds editorial responsibility. The module records that decision and shows it.
Read Article 50 in the Official Journal
Features
Nine grades, from human only to deep fake
A grade names one degree of AI involvement and carries what the rest of the module reads: the sentence the reader sees, the EU icon to show, whether Article 50(4) requires a label, and whether human review lifts that requirement. Grades are configuration, so a site can edit the wording and the icons.
Write the disclosure once, reference it everywhere
A disclosure profile holds the grade, the human review flag, who holds editorial responsibility, and the shared "How AI was used" text. Content references the profile instead of repeating the text, so editing the profile updates everything that inherits it.
What the reader sees
The formatter renders the EU icon, the grade's sentence, the Article 50(4) line when a label is legally required, and an expandable section with the description. A legally required label always appears, whatever the display settings say.
The editor decides on the content, with the consequence in front of them
The widget sits in the entity form sidebar. It offers the bundle default, a profile, a custom disclosure, or an explicit decision not to label. Under the fields it states, while the editor works, whether the chosen grade needs a label and which icon the reader will get.
A report to check the site against
The compliance report lists the effective disclosure of every node: grade, whether a label is required, where the value came from, the human review flag and pending suggestions. It filters by content type, language, grade family and label requirement, and exports to CSV.
Costs nothing to label a bundle
Content left in inherit mode takes its disclosure from the field's default profile and stores no row at all.
Machines read it too
A schema.org JSON-LD block and a meta tag carry the IPTC digital source type on the canonical page.
One per translation
A disclosure belongs to an entity and a language, so a machine translated version can say so on its own.
For AI modules
AI tools record their own involvement through the recorder service. suggest() leaves a suggestion the editor accepts or dismisses on the entity form, apply() and applyProfile() write the disclosure directly for headless pipelines and cron. Neither ever downgrades a disclosure that is already there, and an unknown grade or a bundle without the field never breaks the caller's save.
The dependency direction is inverted: AI modules call AI Disclosure, and AI Disclosure knows nothing about any AI tool.
Documentation
Installation, configuration, theming, the machine readable output and the integrator guide.
Installation
Install with Composer, then enable the module.
composer require drupal/ai_disclosure
drush en ai_disclosure
Installing creates the nine grades and the module settings. Start at /admin/config/content/ai-disclosure: set the site policy, create the profiles the site needs, then add the disclosure field to the bundles that need it.
Requirements
Drupal 10.4 or later, or Drupal 11. league/commonmark ^2.8, which Composer installs with the module, renders the markdown description shown to readers. The compliance report ships as an optional view and installs when the core rest and serialization modules are enabled.
The shipped grade configuration states when Article 50(4) requires a label. Editing it changes that statement, not only its wording. Read the Article 50 page in the documentation before you do.
Depends on
Dependencies of the latest stable release
No dependencies recorded for this project.
Required by
Tracked projects that depend on this one
No tracked projects depend on this one yet.
More in the AI ecosystem
Most installed first
Activity
Releases
| Version | Type | Core | Notes | Release date | |
|---|---|---|---|---|---|
| 1.0.x-dev | Dev | 10–11 | Sep 7, 2026 | ||
| 1.0.0-alpha1 | Pre-release | 10–11 | First alpha, for testing and review. | Sep 7, 2026 |