Skip to main content
iVentureTeam

Odoo Core / Web widgets

Core web-client widgets are the ones every Odoo form, list and kanban view is built from: char and text inputs, badges, buttons, avatars, handles and the rendering primitives the other categories specialize.

They ship in every edition, so anything you learn here applies from Community to Enterprise, and most of them can be set from Studio or a one-line XML attribute.

67 widgets documented2,198 uses in Odoo coreVersions 16.0 → 20.0 verified per widget

Every core / web widget, by use in Odoo core

Odoo Core / Web widgets: name, purpose, field types and uses in Odoo core
WidgetWhat it doesField typesUses in core
many2many_tagsThe Odoo Tags field: what it does, how to set it up in Studio without code, and every option it supports.many2many, one2many391
statinfoThe number inside an Odoo smart button, such as 3 Invoices, is rendered by the statinfo widget. Here is how it works, what it can show, and how to control its label and decimals.float, integer, monetary, char, one2many, many2one197
monetaryThe Monetary widget renders an amount with the record's currency symbol and precision. Most of its behavior comes from the currency, not the field, and that is where teams get surprised.monetary, float, integer182
handleThe drag dots on the left of Odoo list rows are the handle widget. It has no options at all; everything that matters happens in the sequence field underneath it.integer155
radioThe radio widget lays every choice of a selection or many2one field out as radio buttons, so users see all options before picking one.selection, many2one151
float_timeThe float_time widget displays a float of hours as clock-style time: 8.5 renders as 08:30. Storage stays a plain float, so sums and reports keep working.float146
badgeThe badge widget renders a field's value as a colored pill, and its color comes from decoration expressions you write in the view or an integer color field on the record.selection, many2one, char99
imageThe image widget displays and uploads pictures on binary fields, with more options than any other display widget, including a WebP pipeline that quietly generates five sizes per upload.binary, many2one92
statusbarThe stage strip at the top of Odoo forms is the statusbar widget. It shows where the record stands, lets users click to move it, and hides two keyboard shortcuts almost nobody uses.many2one, selection67
boolean_toggleThe boolean_toggle widget renders a boolean as a switch, and by default a flip saves the record immediately. That one behavior is most of what you need to know about it.boolean66
color_pickerThe color_picker widget edits the integer 0 to 11 behind Odoo's standard palette, the same twelve colors tags, badges and kanban cards read.integer54
upgrade_booleanThe settings checkboxes that open an upgrade popup on Community are one widget: upgrade_boolean. On Enterprise it is an ordinary checkbox; on Community it can never stay checked.boolean45
priorityThe stars on tasks and leads are the priority widget over a plain selection field. Clicking a star saves immediately, and clicking the current one clears it, both verified in the source.selection40
percentageThe percentage widget shows a stored fraction as percent: 0.15 displays as 15%, and typing 15 stores 0.15. One convention, consistently applied on both directions.float, integer38
many2one_avatarThe generic avatar dropdown: a standard many2one with the linked record's picture in front of its name. Same options as many2one, plus one opening rule of its own.many2one32
kanban_color_pickerThe color palette inside a kanban card's dropdown menu is one widget: kanban_color_picker. Zero options, one strong opinion: picking a color saves immediately.integer26
remaining_daysThe widget behind every Today, In 3 days and 2 days ago in Odoo. One undocumented option controls the colors, and Odoo 20 renames the whole widget.date, datetime26
colorThe color widget turns a plain char field into a native color swatch storing #RRGGBB. Its one option, autosave, is already on in list and kanban views, and Odoo 20 removes it.char25
textOdoo's Multiline Text widget: the auto-growing textarea behind every notes box. Two documented options, two undocumented ones, and a quiet type change in Odoo 19.text, char, html25
progressbarOdoo's Progress Bar widget: five options in 19, an undocumented numeric trick, and a development branch that quietly deletes most of them for Odoo 20.integer, float23
phonePhone numbers in Odoo are plain char fields until the phone widget makes them callable: a tel: link in lists, a Call button on forms, and, courtesy of the sms module, an SMS button you can switch off.char21
urlThe url widget turns a char field into a link that opens in a new tab, quietly prefixes http:// when the scheme is missing, and hides one of Odoo's least known tricks: a text attribute that replaces the visible URL with friendly link text.char18
emailThe email widget makes addresses actionable: a mailto: link in lists, an envelope button on forms. What it deliberately does not do, validate addresses beyond the browser's loose check, is just as important to know.char17
selection_badgeWhen every option should be visible and one click away, selection_badge replaces the dropdown with a row of pills. It also hides three behaviors nobody expects: a self-clearing click, a text-only readonly mode, and a full reload of many2one options.selection, many2one17
label_selectionPaid in green, Cancelled in red: label_selection paints a selection value as a colored label using one option, classes, a plain mapping from value to color. It displays; it never edits.selection16
CopyClipboardCharOne of the only CamelCase widget names in Odoo core: CopyClipboardChar puts a one-click copy button next to a text value. Small widget, several sharp edges.char15
binaryThe default upload and download control for every binary field in Odoo. Its behavior is simple; the filename wiring around it is where implementations go wrong.binary15
domainThe point-and-click filter builder behind automation rules, mailing lists and reordering rules. The domain widget turns a char field into Odoo's condition editor, live record count included.char, text15
selectionThe default dropdown behind every Selection field in Odoo, and the widget that turns a many2one into a closed list. How it works, what it hides, and where it trips teams up.many2one, selection15
boolean_favoriteThe clickable star on products, journals and applicants. The boolean_favorite widget looks like a toggle and behaves like a save button, which is exactly what teams need to know before adopting it.boolean14
many2many_binarySeveral files on one record, uploaded in one go: the many2many_binary widget turns a many2many to ir.attachment into Odoo's multi file upload zone.many2many13
one2manyOrder lines, BoM components, task checklists: the one2many widget is the embedded table Odoo runs on, and its options can do more than the documentation admits.one2many, many2many12
many2many_tags_avatarThe avatar tags field renders people-type relations as pills with faces: each tag carries the record's avatar, and kanban cards get a quick-assign popover.many2many, one2many10
field_selectorThe field selector puts Odoo's field-path picker on a char field: users browse a model's fields, drill through relations like partner_id.country_id.code, and the dotted path is what gets stored.char9
htmlThe HTML field is Odoo's rich text editor: checklists, tables, images, slash commands. Under the hood it is two widgets wearing one name, and its options live nowhere in the documentation.html9
propertiesThe Properties field lets end users bolt their own fields onto records, per project, per team, per parent, without Studio, without a developer, and without touching the database schema.properties9
many2many_checkboxesThe Checkboxes field lists every record of a relation as a tickbox: no search, no create, the whole choice space visible at once. Ideal for short fixed sets like product routes.many2many8
floatEvery decimal number in Odoo passes through the float widget. Its option panel hides a naming trap, and since 19.0 the input quietly evaluates math. Here is the full, source-verified picture.float, monetary7
CopyClipboardURLShare links, webhook endpoints, portal URLs: CopyClipboardURL renders a char field as a clickable link with a one-click copy button, and its name is one of the few in Odoo where capitalization matters.char6
many2oneThe autocomplete dropdown on Customer, Product and every other record link in Odoo is the many2one widget. It is the default for its field type, which is why you rarely type its name, and why its options are worth knowing by heart.many2one6
filterable_selectionOne selection field, different choices per view: filterable_selection filters a selection's dropdown with a whitelist, a blacklist, or a list read live from another field on the record, without touching the model.selection, many2one5
percentpieThe little circles on a mailing's statistics, Opened 54%, Clicked 12%, are percentpie: a display-only widget that draws a number as a filled circle using nothing but a CSS conic-gradient.float, integer5
state_selectionThe small gray, red or green bullet on kanban cards and list rows is the state_selection widget. It turns a three value selection field into a one click status dropdown, and its label behavior is stranger than the docs admit.selection5
booleanThe default Checkbox for every boolean field in Odoo: what the bare boolean widget does, why it never hides, and when to trade it for a toggle, star, or favorite variant.boolean4
image_urlimage_url renders a plain char field as an image, fetched by the browser straight from the URL it contains. Nothing is downloaded or stored server side, which is exactly its power and its caveat.char4
many2manyThe default face of a many2many field is an embedded table of linked records with an Add line that opens a selection dialog. Less known: writing widget="many2many" on a one2many field flips it into link and unlink mode, a trick Odoo core itself uses.many2many, one2many4
many2one_barcodemany2one_barcode is the smallest widget on this site with a real job: it is the standard many2one with the mobile barcode scanner permanently switched on, so warehouse and accounting users fill product fields by pointing a camera at a label.many2one4
section_one2manyWorking schedules in Odoo show Morning and Afternoon as bold rows spanning the whole table. That layout is section_one2many, a resource module one2many whose section rows are ordinary records with display_type = 'line_section' and a hardcoded title field.one2many4
CopyClipboardButtonOf Odoo's three clipboard widgets, CopyClipboardButton is the only one that hides the value: just a button that puts the field's content on the clipboard, and nothing at all when the field is empty.char, text3
attachment_imageThe picture on a project task's kanban card is not a binary field. It is attachment_image: a tiny display-only widget that turns a many2one to ir.attachment into a 300x300 image.many2one3
codeOne widget, two names: code and ace are the same registered descriptor that swaps a plain textarea for a real Ace editor with syntax highlighting, dark mode, and careful save semantics.text, html3
contact_imageNew in Odoo 19: the photo frame on contact and user forms is its own widget. contact_image extends the image field with one trick, when the photo is empty it shows the record's generated avatar and a centered Add Photo button.binary, many2one3
account_json_checkboxesThe checkbox rows on Odoo's invoice Send wizard are not boolean fields: account_json_checkboxes renders a whole JSON dict as a group of checkboxes, each with its own label, lock and help icon.json2
gaugeThe gauge widget turns an integer or float into a half-doughnut Chart.js gauge, mostly on kanban dashboards. Its most important fact is a naming bug: the declared max_value_field option is dead, and max_field is the one that works.integer, float2
integerThe Integer field widget is the default editor for whole numbers in Odoo. Behind the plain input sit formatting toggles, two undocumented options, relative typed math, and a placeholder that quietly stopped working in 19.integer2
tour_start_widgetThe Onboarding and Testing buttons on Odoo's Tours screen are one widget: tour_start_widget, a char field that never shows its value and instead launches the tour in manual or automated mode.char, text2
base_automation_actions_one2manyA rule's actions shown as one horizontal strip that measures itself against the available width and hides what does not fit behind an and 3 more counter.one2many1
base_automation_trigger_selectionThe trigger dropdown on an automation rule, grouped into six headings and filtered against the model you picked. Choose a model with no stage field and the stage triggers are simply not offered.selection1
binary_spreadsheetThe binary field widget with the download deliberately removed, twice over: once in the template and once in the handler. The value it holds is not a file anyone can usefully open.binary1
boolean_iconA boolean drawn as a single icon rather than a checkbox or a switch. One option changes the glyph, and the label comes from the field's own string.boolean1
charThe default renderer for every text field in Odoo, and the base a dozen other widgets extend. It declares one option and quietly accepts three more.char, text1
dashboard_graphThe little line and bar charts on Odoo's accounting dashboard are a text field and a Chart.js canvas. One attribute decides which chart you get, and there is no third option.text1
google_slide_viewerPaste a Google Docs link into a text field and get the deck embedded on the form. The URL is rewritten by a regular expression, and the starting page comes from a companion field named by convention.char, text1
iframe_wrapperFor HTML that is a whole document rather than a fragment: styles, head metadata, the lot. It writes the value straight into an iframe, and the source explains at length why.text, html1
pdf_viewerA stored PDF rendered inline instead of offered as a download. It hides the viewer's own download and print buttons, and it declares an option the code never actually reads.binary1
referenceOne field, two questions: which model, then which record. reference is the widget behind that pair of inputs, and it accepts far more options than it admits to.reference, char1
timezone_mismatchA timezone dropdown that checks itself against your browser and, when they disagree, prints the actual current time in the selected zone next to its name.selection1

Each widget page has the usage XML, Studio steps, every developer option, and a per-version compatibility table verified against the shipped Odoo source.

We use cookies to improve your experience

Essential cookies make the site work; with your permission we also use analytics to improve it. See our cookie policy.