Track & Thumb Control
The track and the circle are styled separately, so the switch can be subtle or high contrast without any CSS.
NWD Toggle Switch (Customizable) was built to give Bubble a proper switch and replace the Ionic Toggle in the Ionic Elements plugin maintained by Bubble, offering far more styling flexibility and control. It brings flexible sizing, customizable colors, and click animations together in one polished component. Fully customizable through 20+ properties, giving you complete control over every visual and behavioral detail.
Built for what Bubble does not cover.
Bubble has no native toggle. There is an official Bubble plugin, Ionic Elements, but that element is limited to a few preset styles, with no animation and no control over size.
The track and the circle are styled separately, so the switch can be subtle or high contrast without any CSS.
Track background, track border, thumb and font colors set independently for the unchecked, hovered and checked states.
Small, medium and large presets keep the track, the circle and the travel distance in proportion at any scale.
Six animation styles on click, from a subtle bounce to an elastic pop.
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.
Adjust the settings to match your use case, including the label, the toggle size, the track and thumb colors of each state, and the click animation.
Use the value changed event to react when the switch changes, and read the exposed state to use the value anywhere in your app.
The label uses Bubble's native font properties. The properties in this section control the track, the circle and the label colors for each state.
Text shown next to the toggle.
Side of the label relative to the toggle.
The label fills the rest of the line, pushing it to the edge opposite the control, and the native font alignment then positions the text inside it. If disabled, the label hugs the control and the native font alignment moves the whole component instead.
Bubble's native font alignment moves the whole element, the control and its label together, not just the text. Turn on 'Stretch label to fill the line' and the label takes the rest of the line instead, pushing the control to the opposite edge, with the same native alignment positioning the text inside it. For anything beyond that, wrap the element in a group and align the group.
Size of the track and thumb.
The size preset scales the track, the circle and the travel distance together, so the switch keeps its proportions.
Animation played on the thumb when the toggle is clicked.
Animations are skipped automatically when the visitor's system asks for reduced motion.
Track background color when unchecked.
Track border color when unchecked.
Thumb color when unchecked.
Track background color on hover, when the input is enabled and unchecked.
Track border color on hover, when the input is enabled.
Thumb color on hover, when the input is enabled and unchecked.
Input font color on hover, when the input is enabled. Empty keeps the native font color.
Track background color when checked.
Track border color when checked.
Thumb color when checked.
Input font color when checked. Empty keeps the native font color.
Value applied on load and on reset. Yes means checked, no means unchecked.
Disables the component, preventing any interaction.
While disabled, the toggle ignores clicks and keyboard input, the Focus and Set value actions do nothing, and is clickable publishes no.
Opacity applied to the toggle when disabled, from 0 to 1. The toggle keeps the colors of its current state, so a checked one still reads as checked. The label is not affected and uses Input font color (disabled).
The opacity applies only to the track and the circle. The label keeps its own disabled font color.
Input font color when disabled.
Marks the field as required and enables input validation.
The invalid styling only appears after the user interacts with the toggle and leaves it off. Read is valid to block a submit.
Track background color when invalid.
Track border color when invalid.
Input font color when invalid. Empty keeps the native font color.
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.
True when checked. Keeps the value while the element is hidden.
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 off. It updates on every change, so a workflow can rely on it; the invalid style only shows after the person changes it, or when a workflow sets the value.
True while the element has keyboard focus. Tab in sets it, and Tab out or a click outside clears it.
Where a workflow can start.
Triggered when the toggle is checked or unchecked, including by 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).
Restores the default value.
Focuses the toggle.
Checks or unchecks the toggle from a workflow.
Yes applies the value even while the element is disabled. No makes the action do nothing in that state.
New value (yes turns it on, no turns it off). Empty counts as no.
No. Place the element on the page, configure the properties in the editor, and connect it to your workflows. All properties have descriptions and sensible defaults, so you can get started quickly without deep technical knowledge.
Yes. The plugin exposes a Focus action and a Reset action, and it also responds to Bubble's native reset actions (Reset a group/popup). Both are ignored while the input is disabled.
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.