Skip to main content
iVentureTeam

gauge

The 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.

Siddharth JambukiyaSiddharth JambukiyaOdoo Techno-Functional Consultant
August 25, 2026Updated August 25, 20266 min read
Odoo 19 CRM team member kanban card showing the gauge widget rendering leads assigned this month as a blue half-doughnut chart against the monthly quota.
Technical namegauge
Field typesinteger, float
Viewskanban, form
Moduleweb since Odoo 17; web_kanban_gauge in Odoo 16
Used in core2 occurrences across 2 modules: crm team member kanban and the gamification goal kanban
VersionsOdoo 20.0, Odoo 19.0, Odoo 18.0, Odoo 17.0, Odoo 16.0
No-code setupNo. Studio's widget list for numeric fields offers Percentage Pie and Progress Bar, not Gauge; the widget is set in XML.
Alternativespercentpie, progressbar, skill_match_gauge_field

What the Gauge widget does

The gauge widget renders a numeric field as a speedometer: a doughnut chart cut to 180 degrees, the value arc in blue against a gray remainder, with the value formatted human-readably, one decimal, in the center and a title above. It lazy-loads Odoo's bundled Chart.js on first render and rebuilds the chart on every data change.

The maximum comes from one of two places: a companion field on the same record, via the max_field option, or a static max_value that defaults to 100. Tooltips on the two arc segments show the raw value and the maximum.

What this means for your team

Gauges answer one question at a glance: how full is this against its target? That makes the widget a natural fit for quota-style dashboards, which is exactly how CRM uses it, showing each salesperson's leads assigned this month against their monthly cap on the team member kanban. Anywhere you keep a target column next to an actual column, a gauge on the kanban card communicates progress faster than two numbers.

The self-healing scale cuts both ways. Because the widget silently raises the maximum to the value when exceeded, a rep at 130 percent of quota shows a full-looking gauge rather than an alarming overflow. If overshoot needs to be visible, pair the gauge with a decoration or pick a widget that shows saturation differently, like percentpie.

Supported options in Odoo 19

Verified against gauge_field.js in the Odoo 19.0 web module. The table below lists what the code actually reads, which is not what the options metadata declares; the note underneath is the important part.

OptionTypeWhat it does
max_fieldfield nameThe option that actually works: names an integer or float field on the same record supplying the gauge maximum. The field must be loaded in the view. Beats max_value when set.
max_valuenumberStatic maximum used when no max_field is set. The scale silently grows to the current value whenever the value exceeds it.(default: 100)
titlestringText above the chart. Falls back to the field's label when omitted.
max_value_fieldfield nameDeclared in the options metadata but dead: extractProps never reads this name. Use max_field instead. Mismatch present from Odoo 17 through the development branch.(since Odoo 17.0)

The declared option name is dead. The metadata announces max_value_field, which is what Studio-style tooling displays, but extractProps reads options.max_field. Set max_value_field in XML and it is ignored; set max_field and it works. The mismatch was born in Odoo 17 when the widget moved into web and gained declarations, and it is still present on the development branch. Core's own CRM view uses max_field.

Working examples

The core pattern: value against a quota field

<field name="lead_month_count"
       widget="gauge"
       options="{'max_field': 'assignment_max'}"
       invisible="assignment_max == 0"/>

Straight from the CRM team member kanban. Note the guard: with a zero quota the gauge is hidden rather than rendered empty. The max field must be loaded in the same view, invisibly if necessary.

Fixed scale with a title

<field name="satisfaction_pct"
       widget="gauge"
       options="{'max_value': 100, 'title': 'Satisfaction'}"/>

Without a title option the widget falls back to the field's label. Without max_value the scale is 0 to 100 anyway, since 100 is the default.

Fossil options in core views

The gamification goal kanban, the widget's other core usage, passes options="{'max_field': 'target_goal', 'label_field': 'definition_suffix', 'style': 'width:160px; height: 120px;'}". Only the first key does anything. label_field and style belonged to the pre-Owl gauge implementation and have not been read since at least Odoo 16, yet the view still ships them on the development branch. It is a handy reminder that options in core views are not proof an option exists; the widget source is.

Two smaller behaviors from the same function: the maximum is computed as Math.max(value, max), which is the self-healing scale described above, and a gauge whose value and maximum are both zero is rendered against a scale of 1 with the tooltip still reporting 0, so an empty gauge draws as an empty arc instead of dividing by zero.

Version compatibility

VersionStatusNotes
Odoo 20.0In developmentNot released. A max_tooltip option and a chart-hook rewrite are visible on the development branch; see below.
Odoo 19.0VerifiedVerified against the shipped source; identical to 18.0.
Odoo 18.0VerifiedByte-identical to the 19.0 source.
Odoo 17.0VerifiedWidget moved into the web module; option declarations added, including the dead max_value_field name.
Odoo 16.0VerifiedShips from the auto-installed web_kanban_gauge module with the same working options and no declarations.

Upgrade note for 16 to 17. In Odoo 16 the widget ships in the auto-installed web_kanban_gauge module and loads Chart.js directly; 17 moved the file into web and switched to the bundled chart library. The widget name and the working option names, max_field, max_value, title, are identical across the move, so views migrate untouched. Only JavaScript patches against the old module path break.

What is changing in Odoo 20

Odoo 20 is expected at Odoo Experience in Brussels, 24 to 26 September 2026. The development branch is unstable and the notes below are provisional until release, when this page is re-verified.

One real addition is visible: a max_tooltip option, declared and extracted, that replaces the maximum shown in the tooltip with a custom string. The rendering moves to a shared useChart hook and the new props API, internals only. And the two quirks documented above survive: extractProps still reads max_field while the metadata still declares max_value_field, and the gamification view still ships its dead options.

Common problems and fixes

SymptomCause and fix
max_value_field is ignoredThe declared option name is dead; the code reads max_field. Rename the key to max_field in your options dict.
Gauge always looks full when over targetThe maximum is raised to the value on overshoot by design. Show overshoot elsewhere, with a decoration or percentpie, or accept the stretched scale.
Gauge renders against 100 instead of my max fieldThe max field is not loaded in the view, so its value reads as undefined and the 100 default wins. Add the max field to the view, invisible if needed.
Nothing renders at allChart.js bundle failed to load, or the widget sits on a non-numeric field, which the descriptor does not prevent. Check the browser console for the asset error and confirm the field is integer or float.
label_field or style options do nothingFossil options from the pre-Owl implementation; core's own gamification view still passes them. Remove them; use title for the caption and CSS classes for sizing.

Gauge widget vs the alternatives

WidgetBest forKey difference
gaugeQuota and capacity dashboards on kanban cardsHalf-doughnut chart with a record-driven maximum
percentpiePercentages of a fixed wholeCSS conic-gradient circle, no Chart.js, saturates at 100
progressbarCompact progress in lists and kanbansLinear bar with color thresholds instead of a chart
skill_match_gauge_fieldRecruitment skill matching onlyGauge subclass hardwired to job-matching context and colors

Choose by what the number means: a gauge for progress toward a capacity, a percent pie for a share of a whole, a progress bar for compact list rows. All three ignore overshoot differently, so check the saturation behavior before committing.

Frequently asked questions

How do I set the maximum of the Odoo gauge widget?+
Either point it at a field with options="{'max_field': 'your_max_field'}", loading that field in the same view, or set a static max_value. Without both, the scale is 0 to 100. The max_value_field name shown in the option declarations does not work.
Why is max_value_field not working?+
Because it was never wired up: since Odoo 17 the metadata declares max_value_field while the code reads options.max_field. Core's own CRM view uses max_field. The mismatch is still present on the development branch.
What happens when the value exceeds the gauge maximum?+
The widget computes the scale as the larger of value and maximum, so the gauge stretches and appears full rather than overflowing. If you need overshoot to stand out visually, add a decoration or use a different widget.
Which field types work with the gauge widget?+
The descriptor declares no supported types, so Odoo will mount it on any field, but it only makes sense on integer and float fields. Both core usages are integers. Non-numeric values produce a broken chart rather than an error.
Can I add a gauge from Odoo Studio?+
No. Studio's widget choices for numeric fields are Percentage Pie and Progress Bar; Gauge is not offered. A developer sets widget="gauge" in the view XML, typically on a kanban card.
Is the gauge widget available in Odoo 16?+
Yes, from the auto-installed web_kanban_gauge module rather than web. The widget name and working options are the same, so view XML is portable; only JavaScript patches against the old module path need updating on upgrade.
What changes for the gauge in Odoo 20?+
The development branch adds a max_tooltip option for customizing the tooltip's maximum label and rewrites rendering onto a shared chart hook. The max_field naming quirk survives. Nothing is final until the September 2026 release, which we re-verify against.

Dashboards your team actually reads

A gauge is one widget on one card; a useful dashboard is quotas, targets, and the computed fields behind them. We design and build custom Odoo dashboards and KPI views, dead options avoided, for companies on Odoo 16 through 19.

Book a free consultation

How this page was produced

This page was verified by reading gauge_field.js on the Odoo 19.0 branch, the 16.0 web_kanban_gauge original, and the 17.0, 18.0, and development-branch versions, and by checking both core usages in the CRM and gamification kanban views, where the dead options were found. The screenshot was captured on a clean Odoo 19 database. Found something off? Tell us.