Skip to main content
Drupal is a registered trademark of Dries Buytaert
Release: ECA: Event - Condition - Action 3.1.7 Minor update available for module eca (3.1.7). Release: ECA: Event - Condition - Action 3.0.15 Minor update available for module eca (3.0.15). Release: ECA: Event - Condition - Action 2.1.24 Minor update available for module eca (2.1.24). Release: Commerce Core 3.3.9 Minor update available for module commerce (3.3.9). Release: Modeler API 1.1.6 Minor update available for module modeler_api (1.1.6). Release: Commerce Shipping 3.0.4 Minor update available for module commerce_shipping (3.0.4). Release: TMGMT DeepL Integration 2.4.1 Minor update available for module tmgmt_deepl (2.4.1). Release: TMGMT DeepL Integration 2.3.0 Minor update available for module tmgmt_deepl (2.3.0). Module Revived: Optional End Date 2.0.0 Module optional_end_date updated after 7 months of inactivity (2.0.0). Usage Milestone: Shortcode Module shortcode crossed 1,000 active installs.

AI Disclosure

No security coverage

Part of the AI ecosystem · 299 projects

View on drupal.org

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.

Read the documentation

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.

Activity

Tracked releases
2
Tracked since
Sep 2026
Latest release
2 hours ago
Releases (12 mo)
2 ▲ from 0
Maintenance
Active

Releases

Version Type Core Release date
1.0.x-dev Dev 10–11 Sep 7, 2026
1.0.0-alpha1 Pre-release 10–11 Sep 7, 2026