Modal
Modal allows you to create and display dialogs, notifications, or custom content on your Drupal site. You can configure placement, content, display conditions, and even trigger them dynamically or through specific actions.
Use Modal to add dialogs to your site for lightboxes, user notifications, or completely custom content.
Just go at: Administration » Structure » Modal
Have fun :)
Modal 6 is ready 🍻
Highlights:
- ✅ Drupal 11
- ✅ Drupal Dialog API
- ✅ Bootstrap 5
Enjoy! 😀
With Modal you're able to
- Flexible Placement: Position modals anywhere through the CMS;
- Content Creation: Utilize CKEditor for modal content;
- Display Configuration: Specify pages to show your modal;
- Configuration Management: Export and import modals easily;
- Wildcard Usage: Use wildcards in the URL path for flexibility;
- Page Load Display: Set the modal to appear on page load;
- Custom Triggering: Open modal by clicking a custom class or ID;
- Dynamic Modification: Customize modals dynamically with hooks;
- Custom Actions: Create actions with
hook_modal_submit(); - Visual: Personalize modal's header, footer, and buttons;
- Sizes: Support for different modal sizes;
- Access Control: Select roles that can view the modal;
- API: Create modals programmatically via the Entity Manager.
Liked? Give us a star ⭐️ at top-right of this page to encourage me
Matrix
Modal D9 D10 D11 Bootstrap Dialog API Toast Status 6.0.x ❌ ✅ ✅ ✅ ✅ ✅ New Features 5.1.x ❌ ✅ ✅ ✅ ❌ ❌ Stable 5.0.x ✅ ✅ ❌ ✅ ❌ ❌ Bugfixes onlyHooks
hook_modal_alter
You're able to update your Modal before display with this code
/**
* Implements hook_modal_alter().
*/
function HOOK_modal_alter(&$modal, $modal_id) {
$modal->setLabel('Title Updated');
$modal->setBody('Body Updated');
}
hook_modal_ID_alter
You're able to update Modal by ID (machine_name) with this example
/**
* Implements hook_modal_ID_alter().
*/
function HOOK_modal_ID_alter(&$modal, $modal_id) {
$modal->setLabel('New Title');
$modal->setBody('New Body');
}
hook_modal_submit
You're able to use Hook Modal Submit and work with Ajax with this example
/**
* Implements hook_modal_submit().
*/
function HOOK_modal_submit($modal, $modal_state, $modal_id) {
// Your AJAX logic here.
\Drupal::logger('modal_page')->notice('Modal Submit was triggered');
}
Insert Modal programmatically
$modal = \Drupal::entityTypeManager()->getStorage('modal')->create();
$modal->setId('modal_id');
$modal->setLabel('Modal Title');
$modal->setBody('Modal Content');
$modal->setPages('/hello');
$modal->save();
Suggestions and Helpers
Modal are completely free. Everyone is welcome to help.
Feel free to submit your suggestion at issue queue or buy us a coffee
Meet the Modal Maintainers
Renato G. H. (RenatoG)Author|Maintainer
Paulo H. Starling (paulocs)Maintainer
Thalles Ferreira (thalles)Maintainer
Graphic designer
Nico Grienauer (grienauer)Logo author
Modal Documentation
See our documentation here
Credits
Depends on
Dependencies of the latest stable release
- JS Cookie
- datetime Drupal core
- filter Drupal core
Required by
Tracked projects that depend on this one
No tracked projects depend on this one yet.
Activity
Release Timeline
Releases
| Version | Type | Core | Notes | Release date | |
|---|---|---|---|---|---|
| 5.1.12 | Stable | 10–11 | Ready for D11 🍻 | Apr 25, 2026 | |
| 5.1.11 | Stable | 10–11 | Ready for D11 🍻 | Apr 5, 2026 | |
| 5.1.10 | Stable | 10–11 | Ready for D11 🍻 | Mar 29, 2026 | |
| 5.1.9 | Stable | 10–11 | Ready for D11 🍻 | Mar 22, 2026 | |
| 6.0.0-beta13 | Pre-release | 10–11 | Dialog API + Toast 🥳 | Mar 15, 2026 | |
| 6.0.0-beta12 | Pre-release | 10–11 | Dialog API + Toast 🥳 | Feb 22, 2026 | |
| 5.1.8 | Stable | 10–11 | Ready for D11 🍻 | Feb 17, 2026 | |
| 6.0.0-beta11 | Pre-release | 10–11 | Drupal Dialog API 🥳 | Jan 25, 2026 | |
| 5.0.16 | Stable | 9–10 | Bootstrap 5 🥂 | Dec 14, 2025 | |
| 5.1.7 | Stable | 10–11 | Ready for D11 🍻 | Dec 14, 2025 | |
| 6.0.0-beta10 | Pre-release | 10–11 | Drupal Dialog API 🥳 | Dec 14, 2025 | |
| 6.0.0-beta9 | Pre-release | 10–11 | Drupal Dialog API 🥳 | Nov 29, 2025 | |
| 5.1.6 | Stable | 10–11 | Ready for D11 🍻 | Nov 29, 2025 | |
| 5.0.15 | Stable | 9–10 | Bootstrap 5 🥂 | Nov 29, 2025 | |
| 6.0.0-beta8 | Pre-release | 10–11 | Drupal Dialog API 🥳 | Nov 22, 2025 | |
| 6.0.0-beta7 | Pre-release | 10–11 | Drupal Dialog API 🥳 | Nov 19, 2025 | |
| 5.1.5 | Stable | 10–11 | Ready for D11 🍻 | Nov 19, 2025 | |
| 5.0.14 | Stable | 9–10 | Bootstrap 5 🥂 | Nov 16, 2025 | |
| 5.1.4 | Stable | 10–11 | Ready for D11 🍻 | Nov 16, 2025 | |
| 6.0.0-beta6 | Pre-release | 10–11 | Drupal Dialog API 🥳 | Nov 8, 2025 | |
| 6.0.0-beta5 | Pre-release | 10–11 | Drupal Dialog API 🥳 | Nov 1, 2025 | |
| 5.1.3 | Stable | 10–11 | Ready for D11 🍻 | Nov 1, 2025 | |
| 5.0.13 | Stable | 9–11 | Bootstrap 5 🥂 | Nov 1, 2025 | |
| 6.0.0-beta4 | Pre-release | 10–11 | Drupal Dialog API 🥳 | Oct 19, 2025 | |
| 5.1.2 | Stable | 10–11 | Ready for D11 🍻 | Oct 19, 2025 | |
| 5.0.12 | Stable | 9–11 | Bootstrap 5 🥂 | Oct 19, 2025 | |
| 6.0.0-beta3 | Pre-release | 10–11 | Drupal Dialog API 🥳 | Aug 12, 2025 | |
| 5.1.1 | Stable | 10–11 | Ready for D11 🍻 | Aug 12, 2025 | |
| 5.1.x-dev | Dev | 10–11 | Oct 29, 2024 | ||
| 6.0.0-beta2 | Pre-release | 10–11 | Drupal Dialog API 🥳 | Oct 29, 2024 | |
| 5.1.0 | Stable | 10–11 | Ready for D11 🍻 | Oct 29, 2024 | |
| 6.0.0-beta1 | Pre-release | 10–11 | Ready for D11 and Drupal Dialog API 🍻 | Oct 27, 2024 | |
| 6.0.x-dev | Dev | 10–11 | Ready for D11 and Drupal Dialog API 🍻 | Oct 27, 2024 |