Flexible Selection
Pick one option or many in the same element, shown as removable chips or as text with a live counter, with a select all control and an optional limit for long lists.
NWD Dropdown+Search (Single/Multi) was built to replace both of Bubble’s dropdowns, the native element and the Multiselect Dropdown plugin maintained by Bubble, and offers far more styling flexibility and control. It brings single and multi selection with chips, static and dynamic data, built in search, bulk selection and smart positioning together in one polished component. Fully customizable through 90+ properties, giving you complete control over every visual and behavioral detail.
Built for what Bubble does not cover.
Bubble's native dropdown only does single selection, with no multiple or bulk choice, and its look is limited and dated. It is built on the traditional select element, where some properties cannot be styled and others are overridden by each browser.
For multiple selection there is an official Bubble plugin, Multiselect Dropdown, but it costs you a second element that does not match the look of the native single dropdown, and it is just as limited in behaviour and styling.
Pick one option or many in the same element, shown as removable chips or as text with a live counter, with a select all control and an optional limit for long lists.
Type to filter the list as you go, in a search field that takes the focus as soon as the panel opens.
Works with data types, option sets and static lists, and gives your workflows back the same type you put in.
The input, the panel and every option state are yours to style, custom scrollbars included.
Fully operable from the keyboard and announced to screen readers, with motion preferences respected.
Everything the input knows is available to your workflows, and every change is an event you can react to.
In detail
Place the plugin element wherever you need it.
Point the data source at your list, choose single or multi selection, and decide whether the searchbox and the bulk selection appear. The floating panel and the option list have their own styling sections.
Use the value changed event to capture confirmed selections, and read the exposed states according to the selection mode you chose.
For basic styling of the dropdown input, use Bubble's native properties such as font, background, border, border radius, padding, and box shadow. Additional properties for the dropdown input field are configured in this section.
Text displayed in the input while it has no value.
Color of the placeholder text.
Keeps the placeholder visible after a value is selected.
Defines whether the user can select one or multiple options.
Controls whether the input icon is displayed.
Icon displayed in the input.
Icon size in pixels. When empty, it is calculated from the input font size.
This property is not dynamic to facilitate control through native styles, since native styles in Bubble only support static properties.
Color of the input icon.
Whether the icon appears to the left or right of the input text.
How the selected options appear in the input when the selection mode is multiple: the labels as text with the counter tag, or one chip per option, each with a button to remove it.
Order of the selected options in the chips, in the input text and in the published value (multiple): the order of the list, or the order in which they were selected.
Sets the maximum number of options that can be selected in multi selection mode. Leave it empty for no limit.
Message displayed inside the panel when the selection limit is reached.
Font color of the limit reached message.
Sets when the counter tag is shown.
Sets the background color of the counter tag.
Sets the border color of the counter tag.
Sets the text color of the counter tag.
Sets the border radius (in pixels) of the counter tag.
This property is not dynamic to facilitate control through native styles, since native styles in Bubble only support static properties.
Wrap breaks the chips into new lines and the input grows with them, so turn on Fit height to content. Single line keeps one line and shows the chips that do not fit as +N, styled as the counter tag.
Keeps the selected options in the list, marked as selected. Unchecked, they leave the list while they are chips and come back when removed. Keyboard users deselect through the list, so keep it checked when that matters.
Sets the background color of the chips.
Sets the border color of the chips.
Sets the text color of the chips. Empty uses the input font color.
Sets the color of the remove button on each chip. Empty uses the chip font color.
Background color of the circle behind the remove button on each chip, on hover. Empty uses the remove icon color at 10% opacity.
Sets the border radius (in pixels) of the chips.
Sets how the dropdown options are sourced, either from a static list or a dynamic data source.
Define the data source and default value(s) (if applicable) based on the Selection mode set for the input. For a dynamic source, also specify the field to be used as the caption.
Sets the type of the options. Static choices are converted to this type, and dynamic choices and default values must match it.
Sets the list of static choices. Enter one option per line and press Enter between each option. With Type of choices set to number, write one number per line, with a dot for decimals and no thousands separator (3.5, 1000); lines that are not numbers are left out.
Sets the default static value(s) selected for single or multiple selection (static choices). It should be of the same type as the type of content defined in Type of choices.
Sets the list of dynamic choices.
Sets which field to display as the option label for dynamic choices.
Sets the default dynamic value selected for single selection (dynamic choices).
Sets the default dynamic values selected for multi selection (dynamic choices).
Sets the maximum number of visible options before scrolling. Accepts values between 1 and 30.
This property is not dynamic to facilitate control through native styles, since native styles in Bubble only support static properties.
Preferred or forced opening direction of the floating panel relative to the input.
Opening animation of the floating panel.
Background color of the floating panel.
Sets the border color of the floating panel.
Intensity of the glassmorphism effect on the floating panel.
Look of the scrollbar in the panel lists: hidden (the list still scrolls), minimal (a handle only) or arrows (a handle with an arrow at each end), each in thin or regular width. Firefox shows its own scrollbar for arrows.
Fades the top and bottom edges of the panel lists while there are more items to scroll to on that side.
Message displayed inside the panel when there are no options to show.
Font color of the empty state message.
Enables the built-in search input.
Height of the search field, in pixels. Leave it empty to follow the element's height.
Sets the placeholder for the search input.
Text read by screen readers after each search. {count} is replaced with the number of options found.
Sets the font color of the search input placeholder.
Sets the background color of the search input.
Sets the border color of the search input.
Sets the border color of the search input when focused.
Sets the color of the text typed in the search input. It is optional, if not set falls back to the native font color set in the main input.
Enables automatic clearing of the search text when the panel closes.
Displays the search icon inside the search input.
Sets the icon displayed next to the search input.
Sets the color of the search icon.
Sets the icon used to clear the search input.
Sets the color of the clear icon.
Enables the bulk selection action inside the panel. Only available in multiple selection mode.
Sets the bulk selection action behavior.
Sets the custom list of options to be selected when using select custom mode.
Sets the label for the bulk selection action.
Sets the font and icon color of the bulk selection action in its default state.
Sets the font and icon color of the bulk selection action when all items in the given mode are selected.
Color of the divider line below the bulk selection action.
Sets the background color of options in their default state. Empty leaves them transparent.
Sets the border color of options in their default state. Empty leaves them without a visible border.
Sets the font color of options in their default state. Empty follows the element font color.
Sets the background color of options when hovered.
Sets the border color of options when hovered.
Sets the font color of options when hovered.
Sets the background color of options when selected.
Sets the border color of options when selected.
Sets the font color of options when selected.
Displays the selection icon next to each option.
Sets the icon displayed next to each option. Check keeps the space of the icon on unselected options, so the text stays still; check ghost does not.
Sets the size (in pixels) of the selection icon. When empty, it is calculated from the font size.
This property is not dynamic to facilitate control through native styles, since native styles in Bubble only support static properties.
Sets the color of the selection icon in its default state.
Sets the color of the selection icon when the option is selected.
Sets the position of the selection icon.
Disables the component, preventing any interaction.
Disabling an input (native input or plugin input) makes it read-only in the UI, but it's not a secure way to prevent edits. Because it's handled client-side, users can still tamper with it. Use server-side protections like privacy rules, workflow conditions, or backend workflows to enforce security.
For styling, you can use the exposed is clickable state to apply conditionals at the element level, or use the properties below to define global styles for the disabled state.
Input background color when disabled.
Input border color when disabled.
Input font color when disabled.
Marks the field as required and enables input validation.
Unlike native Bubble inputs, this does not prevent workflows from running automatically. You should use the is valid state in your workflows to handle validation logic.
For styling, you can use the exposed is valid state to apply conditionals at the element level, or use the properties below to define global styles for the invalid state.
Input background color when invalid.
Input border color when invalid.
Input background color when focused.
For styling, you can use the exposed is focused state to apply conditionals at the element level, or use the properties below to define global styles for the focused state.
Input border color when focused.
Name read by screen readers. When empty, uses the placeholder or the visible label.
Hint read by screen readers after the name. Empty for none.
Values the element exposes for the rest of the page to read.
Exposes the currently selected item in single selection mode. Returns empty when no option is selected.
Exposes the list of selected items in multi selection mode. Returns empty when no options are selected.
True when the component is not disabled.
True when the input is marked as required.
True when the value is accepted. False when it is required and has no confirmed selection. It updates on every change, so a workflow can rely on it; the invalid style only shows after the person leaves the field or closes the panel, or when a workflow sets the value.
True when the panel is open.
Where a workflow can start.
Triggered whenever the selection changes: when an option is selected, deselected, or the selection is reset.
What a workflow can tell the element to do.
The actions can be triggered from any workflow event. The plugin also responds to Bubble's native reset actions (Reset a group/popup).
Resets the component to its initial state, reapplying default values if configured, or returning to an empty state, and updates the exposed states accordingly.
Focuses the dropdown and opens its panel programmatically. Ignored if the component is disabled.
Sets the selection from a workflow, using the field that matches the current selection mode.
Yes applies the value even while the element is disabled. No makes the action do nothing in that state.
Option to select when the element is in single selection mode. It must be one of the current choices; empty clears the selection.
Options to select when the element is in multiple selection mode. Only options that exist in the current choices are applied; empty clears the selection.
No. The plugin is designed to be easy to use. Just place the element on the page, configure the properties in the editor, and connect your preferred data source or static values.
Yes. The plugin supports Datatypes, Option Sets, static choices, and other dynamic values, allowing it to adapt to many different Bubble use cases without requiring complex workarounds.
Yes. The same element supports both single and multi selection modes, making it easy to reuse across different forms, filters, and selection flows. In multi selection, the choices can appear as removable chips, wrapping into new lines or kept on one line with a +N, or as text with a counter.
Yes. Set Max selections in the Multiple Selection section. When the limit is reached, a message appears at the bottom of the panel, and its text and color are yours to set. You can also choose whether the selection follows the order of the list or the order in which it was made.
Yes. The plugin includes built in instant search and supports smart default values, making it easier to guide users and speed up selection.
Make sure that:
Yes. The visual properties support Bubble's predefined styles, so a look can be saved once and applied to every input in the app. A few sizing fields are deliberately not dynamic, and that is what lets them travel inside the style instead of being set one input at a time.
This plugin is maintained by GCS Studios and is part of the NWD UI - Input family, form controls built from scratch for Bubble, inspired by a personal component library originally built for React. Each one is carefully designed and tested in real applications before release, for the level of control, polish and reliability that native Bubble inputs often do not provide. See more plugins on the GCS Studios contributor page.
Each control here is drawn by the plugin instead of being restyled from a native one, so they match each other across the library and keep the same shape in every browser.