Selectify replaces Drupal's plain select, radio and checkbox markup with five accessible widgets, across field widgets, Views exposed filters, Form API selects and Webforms. It is the highest-scoring technical review of any module on this site, and its Drupal 12 migration is a genuine example of doing that upgrade correctly rather than just claiming compatibility.
Requirements
| Requirement | Value |
|---|---|
| Drupal core | ^10 || ^11 || ^12 |
| PHP | >=8.1 |
| Dependencies | Core Views and Field modules only — no contributed dependencies |
| Configuration route | /admin/config/selectify/settings |
| Permission | administer selectify settings |
Built for Drupal 12, not just claiming it
Drupal 12 removed annotation-only plugin discovery: a field widget now needs a PHP Attribute, and a manager that still relies on the old @FieldWidget(...) docblock alone fatals. Selectify's five field widget classes carry both — the #[FieldWidget(...)] attribute that Drupal 11 and 12 read, and the original @FieldWidget(...) annotation that Drupal 10 still needs. That is not an accident; it is the correct way to support all three core versions from one codebase, and it is why the module installs cleanly across ^10 || ^11 || ^12 instead of merely declaring it.
Where Selectify applies — four integration types
Each integration is configured and can be disabled independently:
- Field Widgets — configured per field through Manage Form Display, for
list_string,list_integer,list_floatand entity reference fields. - Views Exposed Filters — disable completely, apply one widget site-wide, or configure per-View through an accordion of every display with exposed filters.
- Form API Select Elements — plain Form API selects, found automatically as pages are visited, with a built-in blocklist that always excludes Field UI, Views UI, Layout Builder and other AJAX-dependent admin forms.
- Webform Elements — requires the optional
selectify_webformsubmodule, and covers composite elements such as Select Other, Entity Select and Table Select.
Five select widgets
- Regular Dropdown
- An enhanced standard select with modern styling — the drop-in replacement for a plain
<select>. - Taggable Dropdown
- Each selection becomes a removable tag, for clearer multi-select feedback.
- Searchable Dropdown
- Tagging plus real-time filtering, intended for lists of 100 or more options.
- Checkbox Dropdown
- A dropdown with an explicit checkbox beside every option.
- Dual-List Selector
- Available options on the left, selected on the right — the familiar pattern for permission and bulk-assignment forms.
Radio and checkbox styling
Radio buttons and checkboxes are styled independently of the select widgets, with the same three controls for each: a style (Toggle Switch, or a traditional shape with a checkmark/X indicator), a shape (Circle or Square), and a size (Small, Medium or Large). Radios are deselectable by clicking the selected option again, which the native HTML control does not allow.
Color themes
Seven accent colors — Blue, Coral, Gold, Indigo, Neutral, Slate and Teal — each available in Light or Dark mode, or None to strip Selectify's colors and inherit the theme's own. Front-end and admin color settings are independent, so an admin theme running Gin in dark mode does not have to match the public site.
Theme integration
Selectify ships dedicated stylesheets for Claro, Olivero and Gin (with separate light and dark variants for Gin), so its widgets pick up each admin or front-end theme's own look rather than arriving as a visibly bolted-on component. Everything else is exposed as CSS custom properties, so overriding a color or a spacing value is a variable change rather than a specificity fight with the generated markup.
Accessibility
Selectify targets WCAG 2.1 Level AA: ARIA roles for combobox, listbox and option; keyboard navigation with a roving tabindex; and a hidden native <select> that keeps form submission working exactly as it would without the widget, so server-side validation and Views filtering see the same values either way.
Installation
composer require drupal/selectify
drush en selectify -y
drush cr
For Webform support, install the optional submodule separately:
composer require drupal/selectify_webform
drush en selectify_webform -y
drush cr
Configuration
Everything lives at /admin/config/selectify/settings: page control (admin-route exclusion, plus path patterns to disable Selectify on specific pages), radio and checkbox styling, front-end and admin color themes, Views exposed filters, Form API selects, and Webform elements.
Common questions
Does Selectify require the Solo theme?
No. The idea started as a feature inside my Solo theme, but Selectify has been a standalone module for some time and works with any theme.
Does it depend on any contributed modules?
No. selectify.info.yml declares only Drupal core's Views and Field modules. The Webform integration is the one exception, and it lives in an optional submodule you install separately.
Will it work on Drupal 12?
Yes. It declares ^10 || ^11 || ^12, and its field widgets carry the Attribute class Drupal 12 requires alongside the annotation Drupal 10 still reads.
Can I disable Selectify on specific pages?
Yes, for both selects and radio/checkbox styling. The settings form takes one path pattern per line, with wildcard support.
Is it accessible enough for a public-sector site?
It is built to WCAG 2.1 AA, which is a reasonable starting point for most public-sector requirements — though, as with any component, the final accessibility of your forms still depends on your labels, contrast choices and content.
Need help with your Drupal forms?
Selectify is free and GPL-licensed, like the rest of my contributed work. If you want a form or Views filter set built around it, or a Drupal 10 site moved to 11 or 12 so widgets like this one install cleanly, that is my day job. I also maintain Module Matrix and Utilikit, built the same way.
Read about my Drupal services, see what a Drupal developer brings to a project, or get in touch.