Skip to main content
iVentureTeam

status_with_color

The green On Track and red Off Track bubbles on Odoo project cards come from status_with_color, a project module widget that maps five health values to five fixed bubble colors. Its two knobs are attributes, not options, and Odoo 20 replaces both.

Siddharth JambukiyaSiddharth JambukiyaOdoo Techno-Functional Consultant
August 20, 2026Updated August 20, 20265 min read
Technical namestatus_with_color
Field typesselection
Viewsform, kanban
Moduleproject
Used in core5 occurrences across 1 module: project (project form, kanban and top bar views)
VersionsOdoo 20.0, Odoo 19.0, Odoo 18.0, Odoo 17.0, Odoo 16.0
No-code setupNo. Studio does not surface this project internal widget; apply it in XML.
Alternativesstate_selection, selection_badge, selection

What the Status with Color widget does

status_with_color renders a selection field as a colored bubble followed by the value's label. It ships in the project module and exists for one field: last_update_status, the project health status fed by project updates (On Track, At Risk, Off Track, On Hold, Done).

The bubble colors are not configurable. The widget imports a fixed map from project_utils.js that assigns Odoo color indexes to the five value keys: on_track gets 20, on_hold 21, at_risk 22, off_track 23 and done 24, rendered through the CSS class chain o_status_bubble o_color_bubble_<n>. A selection with any other keys renders bubbles with no color class at all.

Two more source facts: when the field is empty the widget shows the first selection value rather than a blank, and the bubble layout only applies in readonly. In edit mode the inherited template falls back to the standard selection dropdown.

What this means for your team

This widget is why a project manager can scan thirty project cards and spot the two in trouble in seconds. Color plus text beats text alone, and because the palette matches the project update dialog, the kanban, the form and the update history all speak the same visual language.

If you customize project dashboards, the practical value is reusing it: any selection field whose keys mirror the five standard health values can borrow the widget and inherit the exact same green to red scale, keeping custom KPI views consistent with core Odoo.

Supported options in Odoo 19

The widget declares no supportedOptions. Its two knobs are read by extractProps from XML attributes on the field tag, which is why you will not find them in any Studio dropdown. Both are listed here with attribute semantics.

OptionTypeWhat it does
status_label (attribute)stringXML attribute, not an option. Renders a small caption above the status line in readonly mode, using the same stat text style as smart buttons. Odoo core sets it to Dashboard on the project top bar. Removed in the Odoo 20 development branch.(since Odoo 17.0)
hideStatusName (attribute)booleanXML attribute with camelCase spelling, parsed through Boolean(). When true, the readonly template swaps the status name for the record's update_count followed by the word Status, so update_count must be loaded in the view. Removed in the Odoo 20 development branch.(default: false)(since Odoo 17.0)

Both knobs are attributes, so write them directly on the field tag (status_label="Dashboard"), not inside options="{...}". Note the inconsistent casing in the source: status_label is snake_case but hideStatusName is camelCase, and the camelCase spelling is the only one that works.

Working examples

The standard project form usage, plain status with a colored bubble:

<field name="last_update_status" string="Status" widget="status_with_color"
       invisible="last_update_status == 'to_define'"/>

The dashboard variant Odoo ships in project_project_views.xml, with a caption and the update count instead of the status name. Note the invisible update_count field, which the widget reads directly:

<field name="update_count" invisible="1"/>
<field name="last_update_status" readonly="1" widget="status_with_color"
       status_label="Dashboard" hideStatusName="True"/>

What the two attributes actually render

The readonly template (project.ProjectStatusWithColorSelectionField) explains both attributes better than any description:

status_label renders as a small o_stat_text caption above the main line, the same typography as smart button labels. Odoo uses it on the project top bar where the caption reads Dashboard.

hideStatusName does not simply hide text. When true, the template replaces the status name with record.data['update_count'] followed by the word Status, turning the widget into a mini stat block (bubble, caption, 4 Status). Because it reads update_count straight from record data, that field must be present in the view arch or the number silently renders empty. This hardcoded field name also means the mode only makes sense on project.project.

The empty value fallback is worth knowing too: currentValue returns the first selection entry when the field is unset, so a project that never had an update still shows an On Track bubble rather than nothing. Filter with invisible="last_update_status == 'to_define'" as core does if that reads too optimistic.

Version compatibility

VersionStatusNotes
Odoo 20.0In developmentNot released. Both attributes are replaced by hide_icon, hide_value and initial_padding in the development branch; see below.
Odoo 19.0VerifiedVerified against the shipped source and tested on a clean database.
Odoo 18.0VerifiedByte identical to 19.0 apart from a module pragma.
Odoo 17.0VerifiedBoth attributes present, verified in the 17.0 source.
Odoo 16.0Partial / changedWidget and color bubble exist, but status_label and hideStatusName are not read yet.

Both attributes exist since Odoo 17. On Odoo 16 the widget renders the bubble but ignores status_label and hideStatusName; drop them from 16 XML.

What is changing in Odoo 20

Odoo 20 is expected at Odoo Experience in Brussels, 24 to 26 September 2026. The changes below are read from the public development branch and are not final until release.

Both attributes are replaced. On master, statusLabel and hideStatusName disappear from the widget entirely. Three new attributes take over: hide_icon (hide the bubble), hide_value (hide the text) and initial_padding (spacing, default 2). Existing XML using status_label or hideStatusName will keep rendering but the attributes become dead settings after an upgrade.

The five color map in project_utils.js is unchanged on master. We will re verify this page against the released branch after the launch.

Common problems and fixes

SymptomCause and fix
The bubble has no color on a custom selection fieldThe color map only knows the five project health keys (on_track, at_risk, off_track, on_hold, done). Name your selection keys after the standard health values or accept an uncolored bubble.
hideStatusName shows Status with no numberThe template reads record.data['update_count'] and the field is not loaded in the view. Add <field name="update_count" invisible="1"/> next to the status field.
hide_status_name or hidestatusname does nothingThe attribute is camelCase in the source and only hideStatusName is read. Write hideStatusName="True" exactly.
A project with no updates shows On Track anywayThe widget falls back to the first selection value when the field is empty. Hide the field until a status exists, e.g. invisible="last_update_status == 'to_define'" as Odoo core does.

Status with Color widget vs the alternatives

WidgetBest forKey difference
status_with_colorProject health status with the standard green to red bubble scaleFixed five color map tied to project update status keys, configured via attributes
state_selectionGeneric three state kanban flags on any modelClickable dropdown bullet, colors bound to blocked and done keys
selection_badgePicking one value from a short list as badgesEditable side by side badges, no color semantics baked in
selectionPlain dropdowns without status semanticsNo bubble, no color, standard select control

status_with_color is the right pick exactly once: project health on project.project. For generic status flags on your own models, the core widgets below do the same job without the hardcoded project assumptions.

Frequently asked questions

What is the status_with_color widget in Odoo?+
A project module widget that renders a selection field as a colored bubble plus label. It powers the On Track, At Risk and Off Track health display on projects, with a fixed five color map defined in project_utils.js.
Can I change the colors of status_with_color?+
Not through XML or Studio. The value to color mapping (on_track 20, on_hold 21, at_risk 22, off_track 23, done 24) is a constant in the project module source; changing it means overriding STATUS_COLORS in a custom module.
Why are status_label and hideStatusName not inside options?+
Because the widget reads them from the field tag's attributes in extractProps, not from the options dictionary. Write them directly on the tag: status_label="Dashboard" hideStatusName="True".
Can I use status_with_color on my own model?+
Yes for the bubble and label, as long as your selection keys match the five project health keys. Avoid hideStatusName though: it hardcodes the update_count field name, which only exists on project.project.
Does anything change in Odoo 20?+
In the current development branch both attributes are removed and replaced by hide_icon, hide_value and initial_padding. Re check custom XML after the release before upgrading.

Project dashboards that show trouble before it costs you

We build project cockpits on Odoo: health bubbles, update cadences and KPI views your PMO actually opens. If your custom status fields render gray bubbles or your dashboards lag reality, we will fix both.

Talk to a project Odoo expert

How this page was produced

This page was verified by reading the Odoo 19.0 project module source: project_status_with_color_selection_field.js, its XML template and the color constants in project_utils.js. The attribute behavior was cross checked against Odoo's own usage in project_project_views.xml and confirmed on a clean Odoo 19 database. Version rows come from diffing the 16.0, 17.0 and 18.0 branches; the Odoo 20 section from the public development branch on the day of writing. Corrections are welcome via our contact page.