Skip to main content
iVentureTeam

checkbox

Odoo 19's own views write widget="checkbox", yet no such widget exists in the registry. This page explains the Missing widget console warning, the fallback that renders anyway, and what to use instead.

Siddharth JambukiyaSiddharth JambukiyaOdoo Techno-Functional Consultant
August 25, 2026Updated August 25, 20265 min read
Technical namecheckbox
Field typesboolean
Viewsform (core usage; the name is not registered)
Modulenone; the name is not registered by any module
Used in core2 occurrences in hr_holidays, both on the leave type form
VersionsOdoo 19.0
No-code setupNot applicable: booleans render as a checkbox by default, no widget needed
Alternativesboolean, boolean_toggle, boolean_favorite

What the checkbox widget name does

This page documents a widget that does not exist, because Odoo's own views use it anyway. In Odoo 19, the Time Off leave type form sets widget="checkbox" on two boolean fields, requires_allocation and employee_requests. Search the entire 19.0 source for a registration of that name and you find nothing: the boolean field widget is registered as boolean, the web CheckBox is a UI primitive outside the fields registry, and no module adds a field widget called checkbox.

What saves the view is the fallback in getFieldFromRegistry. When a requested widget name is missing, the engine logs Missing widget: checkbox for field of type boolean to the console and resolves the field by its type instead. The default widget for a boolean is the standard checkbox, so the form renders precisely what the view author intended, and end users never notice.

The two core usages are themselves 19-new: in Odoo 18 requires_allocation was still a yes/no selection, and the boolean conversion arrived together with the redundant widget attribute.

What this means for your team

Why give a non-widget a page? Because that console line is one of the most searched Odoo warnings, and the standard advice, install a missing module, is wrong here. The warning is harmless when the fallback matches intent, as it does for booleans, and knowing that saves an afternoon of dependency archaeology. OCA's quality tooling even whitelists known-harmless cases of exactly this warning.

There is also a review lesson in it. Customizations copied from core views inherit the phantom name, and every copy multiplies the console noise that then obscures real warnings. A five-minute sweep of your custom views for unregistered widget names, checkbox is the most common offender, keeps the console meaningful for the warnings that do matter.

Working examples

What core writes (and you should not copy)

<field name="requires_allocation" widget="checkbox"/>
<field name="employee_requests" widget="checkbox"
       invisible="not requires_allocation"/>

Verbatim from the 19.0 leave type form. It works through the fallback and logs one warning per field per render.

The clean equivalents

<!-- rely on the type default -->
<field name="requires_allocation"/>
<!-- or name the real widget -->
<field name="requires_allocation" widget="boolean"/>

Identical rendering, no warning.

How Odoo resolves a widget name, step by step

The resolution order in getFieldFromRegistry is worth memorizing, because it explains every Missing widget situation, not just this one. Given a widget name, the engine tries the view-prefixed key first, list.checkbox in a list view, then the bare name. Found entries are returned even when their declared types do not include the field's type, that mismatch only logs its own warning. If the name is missing entirely, the engine logs the Missing widget line and repeats the same lookup with the field's type as the key, boolean here, which resolves the standard checkbox. Only if even the type has no entry does a bare default component render the raw value.

Two practical corollaries. First, the fallback means a typo in a widget name never breaks a view, it silently degrades to the type default, so a missing custom widget after an upgrade shows up as changed behavior plus a console line, not a traceback. Second, the warning fires on every render of the view, which is why one phantom name can flood a console during QA sessions.

Version compatibility

VersionStatusNotes
Odoo 20.0In developmentNot released. Core usages removed on the development branch; a separate boolean_checkbox widget appears. See below.
Odoo 19.0Partial / changedName used in core views but unregistered; renders via the boolean fallback with a console warning.
Odoo 18.0Not availableName neither registered nor used in core views.
Odoo 17.0Not availableName neither registered nor used.
Odoo 16.0Not availableName neither registered nor used.

Upgrade note. Databases upgraded to 19 inherit the two core usages automatically; they are harmless. Custom views written against 18's selection field requires_allocation need the boolean conversion far more than they need any widget attribute.

What is changing in Odoo 20

Odoo 20 is expected at Odoo Experience in Brussels, 24 to 26 September 2026. We checked the development branch at the time of writing, unstable as it is, on exactly this question.

Both core usages disappear: the leave type views are restructured and no widget="checkbox" remains in hr_holidays. Separately, a widget named boolean_checkbox appears in web, a one-getter subclass of the boolean field that opts out of the new mobile toggle rendering by forcing displayAsToggle to false. Note the name: it is boolean_checkbox, not checkbox, so the phantom name stays unregistered. We re-verify after release.

Common problems and fixes

SymptomCause and fix
Console shows Missing widget: checkbox for field of type booleanA view requests the unregistered name; the engine warns and falls back to the boolean widget. Harmless. Silence it by removing the widget attribute or writing widget="boolean".
Options set next to widget="checkbox" do nothingThe fallback resolves the plain boolean widget, which has no options. Use boolean_toggle, boolean_favorite or boolean_icon for configurable behavior.
Same warning but for a custom widget nameThe module registering that widget is not installed or its assets failed to load. That case is real: check the module and the asset bundle before trusting the fallback.
Field renders as raw text instead of a checkboxThe field type itself has no registered default, which never happens for boolean. Check the field type; only exotic custom types reach the bare default component.
Warning floods the console during testingIt fires on every render of the view containing the phantom name. Sweep custom views for unregistered widget names and drop them.

Checkbox widget name vs the alternatives

WidgetBest forKey difference
checkboxNothing: an unregistered name kept working by the fallbackRenders the default boolean checkbox plus a console warning; zero configurable behavior
booleanThe standard checkbox, explicitly namedThe registered widget the fallback resolves anyway, minus the warning
boolean_toggleA switch that saves the record immediately on flipReal widget with autosave behavior, the usual intent behind wanting a fancier checkbox
boolean_favoriteStar-style flag on recordsRegistered widget with its own rendering and autosave option

Every row above is a registered widget with real behavior. The phantom name gives you none of them, only the default checkbox with a warning attached, so pick the row that matches the interaction you want.

Frequently asked questions

Is widget="checkbox" an error in my view?+
No. Unregistered widget names degrade gracefully: Odoo logs Missing widget and renders the field type's default, which for a boolean is the checkbox you wanted. It is noise, not breakage.
Why does Odoo's own code use a widget that does not exist?+
The 19 rework turned requires_allocation from a selection into a boolean, and the new view spelled the intended rendering literally. Since the fallback renders a checkbox anyway, the redundant attribute was never caught; the development branch removes it.
Will Odoo 20 finally register a checkbox widget?+
Under another name. The development branch adds boolean_checkbox, which exists to force classic checkbox rendering where the new mobile default would show a toggle switch. The bare name checkbox remains unregistered.
How do I find phantom widget names in my customizations?+
Watch the browser console for Missing widget lines while clicking through your main forms, each line names the widget and field type. Grepping your module's views for widget= and checking each name against the registry catches the rest.
When is the Missing widget warning serious?+
When the name should exist: a custom or OCA widget whose module is not installed, or whose assets failed to build. Then the fallback silently changes behavior, plain many2one instead of your custom picker, and the warning is your only clue.

Console full of warnings nobody on the team can explain?

Phantom widgets, deprecated attributes and silent fallbacks accumulate in every long-lived Odoo database. Our developers audit custom views and modules, separate the noise from the real defects, and leave you a clean, upgrade-ready codebase.

Book a free consultation

How this page was produced

Verified by searching the complete Odoo 19.0 source tree for a checkbox entry in the fields registry (none exists, checked against boolean_field.js and every module's registrations), reading the fallback in web/static/src/views/fields/field.js, and locating both core usages in hr_holidays. The Odoo 20 statements come from the development branch, where the usages are gone and boolean_checkbox is new. Spotted an error? Tell us and we will correct the page.