Skip to main content
Drupal is a registered trademark of Dries Buytaert
Release: Cms 2.1.4 Update released for Drupal core (2.1.4)! Release: Drupal 12.0.0-alpha1 First alpha version released for Drupal core (12.0.0-alpha1). Release: PhotoSwipe - Responsive JavaScript Modal Image Gallery 5.0.9 Minor update available for module photoswipe (5.0.9). Release: AI (Artificial Intelligence) 1.4.8 Minor update available for module ai (1.4.8). Release: AI (Artificial Intelligence) 1.3.13 Minor update available for module ai (1.3.13). Release: Moderated Content Bulk Publish 2.0.53 Minor update available for module moderated_content_bulk_publish (2.0.53). Release: Mailchimp 2.2.9 Minor update available for module mailchimp (2.2.9). Release: Mailchimp 3.1.4 Minor update available for module mailchimp (3.1.4). Usage Milestone: Simplify Module simplify crossed 10,000 active installs. Module Revived: Block Token 8.x-1.3 Module block_token updated after 18 months of inactivity (8.x-1.3).

Drop-Up

No security coverage
View on drupal.org

Drop-Up is a corner popup builder for marketers. It gives a site's marketing team a visual editor for lead-gen, newsletter and review widgets — the small panel that slides up from the bottom corner of a page — without a developer touching a template, a form, or a line of JavaScript.

A widget is built by clicking components into an ordered stack. The panel shown inside the editor is not a mock-up: it is the real visitor runtime, loaded in an iframe, so what a marketer approves is what a visitor gets.

Building a widget

  • 15 components. Heading, body text, supporting copy, button, text field, email, phone (47 country dial codes), textarea, dropdown, radio, checkbox, star rating, image, avatar and icon.
  • Multi-step flows. Steps are a flat, ordered list with linear navigation. Back / Continue / Submit / Close are drawn by the runtime from where the step sits, so it is not possible to build a step with no way forward.
  • A completion step, with an auto-close delay and a per-visitor memory of who has already finished (never, this session, N days, or forever).
  • Undo/redo, duplicate, reorder, rename, autosave, and a desktop/mobile preview toggle.
  • Media-backed images, avatars and launcher icons, chosen through Drupal's own Media Library — not a parallel upload system. Plus a curated set of 41 bundled icons, inlined rather than fetched from a CDN.

Styling and placement

Colour, background, button style, corner radius, text size, width and corner are widget settings, not code. Every one of them is published as a CSS custom property (--du-primary, --du-bg, --du-radius, --du-font-size, --du-width), so a site stylesheet can override any of them:

dropup-widget {
  --du-primary: var(--brand-accent);
  --du-radius: 4px;
}

The widget renders inside a shadow root, so a popup stays legible on any theme and the popup's CSS can never leak into the page around it. Opening animation (fade, slide-up, scale) and an optional attention nudge on the launcher are settings too.

Publishing

Widgets are revisionable content entities. Editing produces a draft revision; the public site keeps serving the last published one until someone presses Publish. Before publishing, a set of plugin-based checks runs over the tree and blocks obvious mistakes — an empty step, a button that does nothing, a required field with no label, a multi-step flow with no confirmation screen. Widgets can be paused, reactivated and duplicated, and the order of live widgets is the priority order.

Leads, and the personal data in them

  • Submissions are stored as their own entity and listed per widget, with filters and a CSV export.
  • Anonymous endpoints are guarded by a honeypot field, a time trap, an origin check and Drupal's flood service — no session token, because the pages a popup appears on have to stay cacheable.
  • Retention is a setting: cron deletes submissions older than the configured window. The default is 0, which means "keep indefinitely" — a deliberate choice a site has to make rather than one it inherits.
  • Reading and deleting submitted data are separate, restricted permissions.

Performance

Public pages get one small script and one cacheable JSON endpoint (/dropup/config.json). No decision about which visitor sees what is made on the server, so the page cache, dynamic page cache and BigPipe are untouched — a popup does not make a site's pages uncacheable. The builder (Preact, bundled with Vite into a scoped IIFE) never ships to the public site, and the visitor runtime is dependency-free vanilla JS — so neither can collide with another module's copy of React.

Requirements

  • Drupal 11
  • PHP 8.3+
  • Core modules: Options, User, Media, Media Library

Installation

composer require drupal/dropup
drush en dropup

Then visit Content → Drop-Up widgets to build one, and Configuration → Content authoring → Drop-Up settings for the retention window.

Permissions

administer dropup widgets, create dropup widgets, edit any dropup widget, publish dropup widgets, view dropup submissions, delete dropup submissions. Publishing and reading personal data are deliberately separate from editing, so a marketer can build without being able to push live or read a lead list.

How this differs from the alternatives

  • Webform is a far more capable form builder, but it builds forms on pages. Drop-Up builds the popup — the corner panel, the launcher, the steps, the completion state and the styling — and is meant to be used by a marketer, not a site builder.
  • Block layout plus a custom modal gets a box on a page, but every change is a developer task and the preview is "save and reload".

Roadmap

Shipped today: a live widget shows its launcher and opens when a visitor clicks it. The next milestone adds client-side triggers (scroll depth, time on page, URL matching, exit intent), frequency capping and conflict resolution between several live widgets. Trigger conditions evaluate in the browser by design, so that pages stay cacheable.

Feature requests and patches are welcome in the issue queue.

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
1
Tracked since
Sep 2026
Latest release
8 hours ago
Releases (12 mo)
1 ▲ from 0
Maintenance
Active

Releases

Version Type Core Release date
1.0.x-dev Dev 11 Sep 2, 2026