Skip to main content
iVentureTeam

progressbar

Odoo'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.

Siddharth JambukiyaSiddharth JambukiyaOdoo Techno-Functional Consultant
August 11, 2026Updated August 11, 20267 min read
Odoo 19 kanban card showing an integer field rendered by the progressbar widget as a partially filled horizontal progress bar with its value.
Studio nameProgress Bar
Technical nameprogressbar
Field typesinteger, float
Viewsform, list, kanban
Also registered askanban.progressbar
Moduleweb, present in every Odoo database
Used in core23 occurrences across 11 modules, including product_margin, hr_recruitment_skills, project, hr_skills, website_slides, mass_mailing
VersionsOdoo 20.0, Odoo 19.0, Odoo 18.0, Odoo 17.0, Odoo 16.0
No-code setupYes, via Odoo Studio (Enterprise): the Progress Bar widget on Integer or Decimal fields
Alternativespercentage, gauge, percentpie, project_task_progressbar

What the Progress Bar field does

Numbers that represent completion deserve to look like completion. The progressbar widget renders an integer or float field as a horizontal filled bar with the number beside it: course completion on eLearning slides, recruitment skill levels, margin percentages.

Two display modes, decided by one option. Without max_value, the value is treated as a percentage of 100. With it, the widget shows current / max, both numbers formatted per their field types, with the bar filled proportionally. The value formatting is human-readable when idle, 1.2k style, and switches to the raw number the moment an input is focused, a detail read from the state handling in the source.

A separately registered kanban.progressbar variant exists for one reason: kanban records render readonly, and the variant drops the readonly veto so editable can still work on cards.

What this means for your team

Progress bars earn their place on screens where a team manages many part-done things at once: campaign sends, hiring funnels, skill matrices, project completion. The bar converts a column of numbers into an instantly comparable shape, and the overflow color flags over-target rows without a filter.

The design decision that matters is editability. A read-only bar reports; an editable bar becomes a control, click, type, done, which is excellent for quick percentage updates on kanban cards and dangerous for computed values that should never be hand-set. Odoo 19 gives you that choice per view with editable. Note the direction of travel though: on the Odoo 20 development branch the option disappears and bars become editable wherever the field itself is editable, so decide by field readonly, not widget option, if you want a future-proof setup.

Setting it up in Odoo Studio (no code)

Studio exposes this widget on numeric fields. Odoo Studio is available on Enterprise plans.

  1. Open the form or list and click Studio in the top menu.

  2. Add or select an Integer or Decimal field.

  3. In the Properties tab, set Widget to Progress Bar. The official Studio docs describe it for values that are usually computed, displayed against a percentage bar.

  4. Set Readonly if the value is computed; the bar then purely reports.

Tip: Studio's docs note the field "cannot be edited manually" with this widget, which is true for what Studio configures; inline editing exists only through the editable option in view XML, below.

What Studio cannot do here

Studio sets the widget and stops there. Everything characteristic of this widget lives in options it does not expose: max_value for X / Y display, editable and edit_max_value for inline editing, overflow_class for over-target styling. All are one-line view XML changes, the bread-and-butter of Odoo view customization, and all except max_value disappear on the Odoo 20 development branch, so implement with that horizon in mind.

Supported options in Odoo 19

Verified against progress_bar_field.js in the Odoo 19.0 web module: five declared options, plus one undocumented veto read from extractProps. This is one of the widgets Odoo 20 reshapes hardest, so the table below is explicitly a 19.x table.

OptionTypeWhat it does
max_valuefield name or numberField holding the maximum, shown as value / max. Undocumented: a numeric constant also works, the prop is typed String or Number. Without it the value reads as a percentage of 100. The only option that survives into Odoo 20.(default: 100)
editablebooleanAllows inline editing of the current value. On regular views the record must also not be readonly; the kanban variant waives that check. Removed on the Odoo 20 development branch.
edit_max_valuebooleanWith editable, redirects inline editing to the max field instead of the current value. Never both at once. Removed on the Odoo 20 development branch.
current_valuefield nameDisplays a different field as the bar's value, for example showing the raw count while the bar tracks a computed percentage. Removed on the Odoo 20 development branch.
overflow_classstringBootstrap background class applied when the value exceeds the max. Removed on the Odoo 20 development branch in favor of standard decorations.(default: bg-secondary)
readonlybooleanUndocumented veto read in extractProps: forces the bar inert even when editable is set. Distinct from the field's readonly state. Also gone in the Odoo 20 redesign.

editable and edit_max_value compose, they do not add. extractProps derives two flags: the current value is editable when editable is set and edit_max_value is not; the max becomes editable when both are set. So edit_max_value redirects the single editing slot to the denominator, and there is no configuration in which users edit both numbers inline.

Working examples

Percentage bar

<field name="completion" widget="progressbar"/>

No max configured, so the value reads as a percentage of 100.

X of Y against another field

<field name="sent_count"
       widget="progressbar"
       options="{'max_value': 'total_count'}"/>

Displays sent / total with the bar filled proportionally. The max field must be loaded in the view.

Undocumented: a constant maximum

<field name="score"
       widget="progressbar"
       options="{'max_value': 10}"/>

The prop accepts a number as well as a field name, so a fixed scale needs no dummy field. Verified from the prop typing and the isPercentage check in the source.

Inline-editable with overflow styling

<field name="progress"
       widget="progressbar"
       options="{'editable': True, 'overflow_class': 'bg-danger'}"/>

Users type the current value directly, and anything past the max turns the bar red instead of the default gray.

The readonly veto, the kanban variant, and other source details

Details from the source that decide real-world behavior.

The readonly veto option. extractProps computes editability as !options.readonly && options.editable: an option named readonly, not the field state, not the attribute, can force a bar inert even with editable set. It appears in no documentation.

Why the kanban variant exists. The base component refuses editing when the record renders readonly, which kanban records always do. kanban.progressbar overrides exactly that check, trusting editable alone, and its inputs save immediately on commit, the mechanics behind editable progress on cards.

Integer parsing floors. Typed values run through float parsing and are floored for integer fields, so 7.9 stores as 7.

Overflow is a class swap, not a clamp. When current exceeds max, the fill class changes to the overflow class, gray by default, red if you say so. The bar does not cap the number.

The sale module ships a derivative. sales_team_progressbar extends the kanban variant to show either an invoicing target bar or a define-target link, a nice template for building your own derived bars.

Version compatibility

VersionStatusNotes
Odoo 20.0In developmentNot released. The development branch keeps only max_value and moves colors to decorations; see below.
Odoo 19.0VerifiedAll six option rows verified against the shipped source.
Odoo 18.0VerifiedOption-identical to 19, verified in the 18.0 source.
Odoo 17.0VerifiedWidget present with the same registry name. Not re-verified line by line for this page.
Odoo 16.0VerifiedWidget present with the same registry name. Not re-verified line by line for this page.

Upgrade note. 16 through 19 views carry over unchanged; 18 and 19 sources are option-identical, verified. The planning item is Odoo 20: four of five options disappear, so any view leaning on editable, edit_max_value, current_value or overflow_class belongs on your migration review list now.

What is changing in Odoo 20

Odoo 20 is expected at Odoo Experience in Brussels, 24 to 26 September 2026. The following reads the widget on the public development branch, which is unstable until feature freeze; we re-verify against the shipped release.

This is a redesign, not a tweak. Only max_value remains in supportedOptions. editable, edit_max_value, current_value, overflow_class and the undocumented readonly veto are all gone. Editability becomes simply "not readonly": clicking the bar focuses the value input. The max value is no longer editable inline at all, and the separate kanban variant file disappears with the base handling all views. Colors change model entirely: the bar reads standard view decorations, so decoration-danger expressions on the field now drive bar color, replacing overflow_class with the same mechanism lists already use.

Net effect: simpler, more consistent, and breaking for any view that used the deleted options. The XML keeps loading, the options just stop doing anything.

Common problems and fixes

SymptomCause and fix
Bar always shows a percentageNo max_value option, so 100 is assumed. Set max_value to a field name or a number.
Editable option does nothing on the formThe record or field is readonly, or an options-level readonly veto is set. Clear the readonly state; on kanban the variant ignores record readonly by design.
Users edit the max instead of the valueedit_max_value redirects the single editing slot to the denominator. Remove edit_max_value to edit the current value again.
Bar past 100 percent went grayOverflow swaps to overflow_class, default bg-secondary. Set overflow_class: 'bg-danger' or clamp the computed value.
Typed 7.9 into an integer bar, got 7Integer fields floor the parsed input. Use a float field if decimals matter.
Value shows 1.2k instead of the exact numberIdle display is human-readable; focus switches to the raw value. Click into the input, or accept the compact display.
Editing options stopped working on the Odoo 20 branchThe redesign removed editable, edit_max_value, current_value and overflow_class. Rely on field readonly and decorations; re-check after release.

Progress Bar field vs the alternatives

WidgetBest forKey difference
progressbarCompletion and target tracking in lists and kanban cardsValue against a max with optional inline editing; percentage of 100 by default
percentageA stored fraction shown as a percentFormats the number only, no bar
gaugeA single KPI with a target on dashboardsRadial dial, heavier visual weight
percentpieShare-of-whole at a glanceCircular fill instead of a linear bar
project_task_progressbarTask progress in ProjectProject-specific derivative of this widget

The test: progress toward a goal is a bar. A standalone ratio with no goal is a percentage. A gauge draws attention to one KPI; a pie reads as share-of-whole at a glance.

Frequently asked questions

What does the progressbar widget do in Odoo?+
It renders an integer or float field as a horizontal filled bar with its value. Without options the value reads as a percentage of 100; with max_value it displays value / max, both formatted per their field types. It works in form, list and kanban views, with a dedicated kanban variant for inline editing on cards.
How do I make an Odoo progress bar editable?+
Set options="{'editable': True}". In Odoo 19 the current value becomes an inline input; add edit_max_value: True to edit the maximum instead, never both at once. Note that the Odoo 20 development branch removes these options and makes bars editable whenever the field is not readonly.
Can max_value be a fixed number instead of a field?+
Yes, and it is undocumented: the source types the prop as string or number and the percentage check handles numeric values, so options="{'max_value': 10}" gives a fixed 0 to 10 scale with no helper field. Verified against the 19.0 source.
What happens when the value exceeds the maximum?+
The number keeps counting and the fill swaps to the overflow_class, bg-secondary gray by default. Set it to something like bg-danger to make over-target rows shout. The bar never clamps the stored value.
How do I show a progress bar in Odoo Studio?+
Select or add an Integer or Decimal field and set its Widget to Progress Bar in the Properties tab. Studio treats it as a display widget for computed values; the inline-editing options exist only in view XML.
Why can users edit the bar on kanban cards but not in the list?+
Kanban records render readonly, so Odoo registers a kanban.progressbar variant that skips the readonly check and trusts the editable option alone, saving on commit. List and form views use the base component, which requires the record to be editable too.
How is the progressbar changing in Odoo 20?+
Substantially, per the development branch: only max_value survives as an option, bars are editable whenever not readonly, the max is no longer editable inline, the kanban variant file disappears, and bar colors move to standard decoration-* expressions. Odoo 20 ships around late September 2026; we re-verify this page against the release.

Dashboards where progress is visible before anyone asks?

Editable bars on the right views, targets from real fields, overflow rules that flag trouble: this widget rewards precise configuration, and punishes guesswork after Odoo 20. We build measurement-grade Odoo views on 16 through 19 and track the 20 redesign so you do not have to.

Book a free consultation

How this page was produced

Every option and behavior here was read from progress_bar_field.js and kanban_progress_bar_field.js in the Odoo 19.0 web module, including extractProps, the prop typing that allows numeric max values, and the overflow class logic. The 18.0 source was compared for the version table, and the Odoo 20 section reflects a full diff against the public development branch, where the option removals and the decorations mechanism are visible. Spotted an error? Tell us and we will correct the page.