MARKETPLACE
PLUGINS
DRAGGABLE POPUP & FLOATING GROUPS
Draggable Popup & Floating Groups logo

Draggable Popup & Floating Groups

Published May 2026
   •    Updated today

Plugin details

Turn any Bubble popup or floating group into a real window. Draggable Popups & Floating Groups enhances your existing native elements with drag, resize, minimize, expand, and multi-window stacking - without changing a single workflow. Keep all your content, conditions, and actions exactly as you built them. Add one ID attribute and the element transforms into a desktop-style window.
Demo URL: https://stein-plugins.bubbleapps.io/version-test/draggable-popups/1779230200889x386855334685372900
Editor URL: https://bubble.io/page?id=stein-plugins&tab=Design&name=draggable-popups&type=page

Built for teams that want their Bubble app to feel less like a website and more like a desktop tool. Perfect for CRM-style workflows, admin panels, internal tools, dashboards, order processing, and any app where users need to keep multiple things open and visible at once.



Works With Popups AND Floating Groups

Most Bubble apps use both popups and floating groups, and this plugin enhances either one. Whether you built a customer detail as a popup or a side panel as a floating group, just add the ID attribute and it gets the same draggable window treatment. One plugin, both element types.



Why Use This Instead of Native Popups?

Bubble's native popups and floating groups work, but they have real limitations:
· Can't be dragged or moved by the user
· Can't be resized
· Can't be minimized to get them out of the way
· Popups lock the page underneath (no multitasking)
· Can't stack multiple with proper focus management

This plugin fixes all of that without forcing you to rebuild anything. Your content stays exactly the same. Your workflows stay exactly the same. Just add an ID attribute and the element gets a header bar, drag handle, resize handles, and window controls automatically.

IMPORTANT: Because this enhances native Bubble elements, you can have one instance of each popup or floating group open at a time. To show several at once (e.g. three customer cards), use several distinct elements - not multiple copies of the same one.



Features

Real Desktop-Window Behavior
Every enhanced element gets a header bar with drag-to-move, resize handles, minimize, expand-to-fullscreen, and close
· Behaves like a real desktop window, not a static modal
· Click any window to bring it to the front when multiple are open

Works With Popups and Floating Groups
Enhance native Bubble popups or floating groups with the same window chrome
· Mix both element types on the same page
· Identify which elements to enhance by setting an ID Attribute prefix - everything else is left untouched

Multi-Window Stacking
Open multiple different windows at once and they cascade-offset so they do not fully overlap
· Click-to-focus brings any window to the top with proper z-index management
· Per-window state for minimized, expanded, and saved geometry
· Works across multiple plugin instances on the same page

IMPORTANT: Because this enhances native Bubble elements, you can have one instance of each popup or floating group open at a time. To show several at once (e.g. three customer cards), use several distinct elements - not multiple copies of the same one.

Nine Position Presets
Control where each window opens via its ID Attribute suffix
· Center for classic modal positioning · Top Left, Top Right, Bottom Left, Bottom Right for corner anchoring
· Drawer Left and Drawer Right for side panels docked to the edge
· Bottom Sheet for mobile-style slide-ups
· Fullscreen for full-viewport takeovers

Smart Docking
Docked presets (drawers, bottom sheet) stay edge-aligned and resize along their docked edge
· Drag a docked window's header to detach it into a free-floating window at your cursor
· Double-click any header to snap the window back to its original preset position

Four Header Styles
Match your app's aesthetic with a built-in header style
· Standard - neutral light bar with right-aligned controls
· macOS - traffic-light buttons on the left with a centered title
· Windows - tall rectangular buttons with a red close-hover
· Terminal - dark background with neon-green monospace text

Non-Modal Mode (Click-Through Backdrop)
Make the dimmed backdrop click-through so users can interact with the page (and open additional windows) while one is already open
· Perfect for multi-document workflows where modal behavior gets in the way
· Toggle off to keep Bubble's native modal greyout

Close All Management
When two or more windows are open, a Close All button appears in every header
· Closes every open window in one click, across all plugin instances on the page
· Disappears automatically when only one window is left

Full Design Control
Customize header background, text color, corner radius, default width and height, drawer width, and bottom sheet height
· Force a fixed header title or let it derive automatically from the element's ID
· Position-specific styling adjusts automatically for docked windows

Clean Lifecycle Integration
Your existing Show and Hide workflows continue to work
· The chrome close button publishes the closing window's ID and fires a close-requested event, so you can wire it to Bubble's native Hide and keep internal state perfectly in sync
· Windows hidden externally by your own workflows are detected and torn down automatically

UX Details
Title auto-derives from the ID Attribute suffix in Title Case (e.g. draggable-popup-edit-customer shows as "Edit Customer")
· Touch support for mobile drag and resize
· Cannot be dragged fully off-screen
· Resize handles adapt to the position preset

States Exposed
· enhanced_popup_count - how many windows are currently open for this instance
· focused_popup_id - the ID of the topmost focused window
· last_opened_id - the ID of the most recently opened window
· last_closed_id - the ID of the most recently closed window
· closing_popup_id - the ID whose close was just requested, for wiring native Hide workflows

Events Triggered
· popup_enhanced - fires when a matching element is detected and enhanced
· popup_close_requested - fires when the user clicks close or Close All, so you can sync Bubble's native Hide
· popup_closed - fires whenever a window is torn down
· all_closed - fires when the last window closes
· popup_focused - fires when a window is brought to front

Element Actions
· Close All - close every open window across all plugin instances

$29

One time  •  Or  $4/mo

stars   •   0 ratings
0 installs  
This plugin does not collect or track your personal data.

Platform

Web

Contributor details

Stein & Company logo
Stein & Company
Joined 2020   •   9 Plugins
View contributor profile

Instructions

Step 1 - Add the Plugin Element Drop one Draggable Popups & Floating Groups element on your page, or place it once inside a reusable header for app-wide availability. The element is invisible at runtime - the window chrome is injected directly onto your popups and floating groups, so where you place the element does not matter.

Step 2 - Mark Elements to Enhance
Open any native popup or floating group you want to enhance. In its element inspector, set the ID Attribute to a value starting with draggable-popup. Examples: draggable-popup-customer, draggable-popup-shipping, draggable-popup-notes. Any element with this prefix is automatically detected and enhanced when it opens. Elements without the prefix stay untouched.

Step 3 - Choose a Position Preset (Optional)
Add a position suffix to the ID Attribute to control where the window opens. For example, draggable-popup-drawer-right for a right-side drawer, draggable-popup-bottom-sheet for a mobile-style bottom sheet, draggable-popup-fullscreen for a full-viewport takeover. Available suffixes: center, top-left, top-right, bottom-left, bottom-right, drawer-left, drawer-right, bottom-sheet, fullscreen. If you skip the suffix or use an unrecognized one (like draggable-popup-edit-customer), the window opens in your configured Default Position and the suffix becomes the header title.

Step 4 - Pick a Header Style and Styling
Choose a Header Style - Standard, macOS, Windows, or Terminal - to match your app's look. Configure Header Background, Header Text Color, and Panel Corner Radius. Set Default Width and Default Height for centered and corner positions, Drawer Width for side drawers, and Bottom Sheet Height (in vh) for bottom sheets. Optionally set a fixed Header Title, or leave it blank to derive titles from each element's ID.

Step 5 - Configure Modal Behavior
The Non-Modal toggle controls whether the backdrop blocks clicks. Leave it on (default) for multi-window workflows where users need to keep working on the page while windows are open. Turn it off to restore Bubble's native modal greyout.

Step 6 - Wire the Close Workflow (Recommended)
The chrome close button and Close All publish the closing window's ID to the closing_popup_id state and fire the popup_close_requested event, then hide the element. To keep Bubble's internal open/closed state perfectly in sync, create a workflow on the popup_close_requested event with a Hide popup (or hide floating group) action for each of your elements, conditional on closing_popup_id contains the matching ID. Without this, the window still hides visually but Bubble may think it is still open.

Step 7 - Open and Manage Windows
Use your existing Show workflow actions exactly as before. The plugin detects the element opening, injects the header, and applies the position preset. Open multiple windows and they cascade-offset automatically with click-to-focus. Drag a docked window's header to detach it into a free-floating window; double-click any header to snap it back to its preset.

Step 8 - Read States and Drive Actions
Reference the exposed states in conditions and workflows. Call Close All for a bulk close.

Tips & Best Practices

Always wire the close workflow - The close button and Close All do not call Bubble's native Hide directly. They fire popup_close_requested with the ID in closing_popup_id. Wire that event to a Hide popup workflow so Bubble's internal state never drifts and windows reopen cleanly. This is the single most important setup step.

Multiple plugin instances are supported - Drop one element per element type or per ID prefix if you need separate header styles, default positions, or event wiring. Instances coordinate z-index via a shared counter, and Close All sees every window across all instances. Use distinct ID prefixes per instance when you need per-window workflows.

Existing workflows stay intact - Your Show and Hide workflows all continue to work. The plugin only adds window chrome on top of Bubble's native lifecycle. A window hidden by your own Hide workflow is detected and torn down automatically.

ID Attribute matching is prefix-based - Any suffix is allowed. Use the suffix as a human label like draggable-popup-edit-customer and it shows up in the header as "Edit Customer." You are not limited to a fixed list - name your windows whatever makes sense.

Reusable header placement - The plugin watches the entire document, so it works regardless of where the element sits. Drop it in a reusable header once and every page that includes the header gets enhancement automatically.

Snap-back and detach - Docked windows (drawers, bottom sheet) stay edge-aligned until the user drags the header, which detaches them into free-floating windows. Double-clicking the header snaps any window back to its original preset. Great for users who want to temporarily pull a drawer into the center.

Mobile considerations - Drag and resize work via touch, but resizing on a small phone screen is rough UX. Consider using Bottom Sheet or Fullscreen presets on mobile breakpoints for a more native feel.

Performance - 5 to 10 windows perform well. 20+ simultaneously is supported but may slow the page since each window retains its full Bubble content and workflows. Use Close All to clean up.

Types

This plugin can be found under the following types:
Element   •   Event   •   Action

Categories

This plugin can be found under the following categories:
Technical   •   Productivity   •   Containers   •   Visual Elements

Resources

Support contact
Documentation
Tutorial

Rating and reviews

No reviews yet

This plugin has not received any reviews.
Bubble