Skip to main content
iVentureTeam

kanban_color_picker

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

Siddharth JambukiyaSiddharth JambukiyaOdoo Techno-Functional Consultant
August 11, 2026Updated August 11, 20266 min read
Odoo 19 kanban card dropdown menu showing the kanban_color_picker widget as a grid of twelve round color swatches with the current color highlighted.
Technical namekanban_color_picker
Field typesinteger (color index)
Viewskanban (card dropdown menu)
Moduleweb, present in every Odoo database
Used in core26 occurrences across 17 modules, including project, maintenance, hr_recruitment, mrp, survey, website_slides
VersionsOdoo 20.0, Odoo 19.0, Odoo 18.0, Odoo 17.0, Odoo 16.0
No-code setupNo. The palette is placed inside the kanban card menu in view XML
Alternativescolor_picker, color, many2many_tags

What the Color Picker field does

Open the three-dot menu on a project stage card, a maintenance team, or a survey and you find a small grid of colored dots. That grid is kanban_color_picker. It shows Odoo's standard record palette, twelve entries indexed 0 to 11 where 0 means no color, and writes the index of whatever the user clicks into an integer field on the record.

The widget itself is one of the smallest field components in the Odoo 19 web module: a template that loops over the shared ColorList palette, an active highlight on the current value, and a single click handler. Everything visual about the card, the colored left bar or tinted cover, is done elsewhere by the kanban card's own styling reading the same field. The picker only sets the number.

What this means for your team

Color is the fastest grouping mechanism a kanban board has. Teams color project stages by risk, maintenance queues by criticality, recruitment stages by urgency, and from that point on the board communicates status before anyone reads a word. The picker is what makes this a user-level ability instead of a configuration request to IT.

The catch to plan for is that the palette maps to numbers, not meanings. Odoo will not stop one user meaning danger by red while another means marketing. If colors carry process meaning in your team, write the legend down somewhere visible, or generate the color from rules instead of hand-picking, which is a small customization on the same integer field.

Also worth knowing for training: a color picked here is saved instantly, on its own. Users do not need to save anything afterwards, and closing the menu does not undo the choice.

Supported options in Odoo 19

Verified against kanban_color_picker_field.js in the Odoo 19.0 web module: the widget declares no options at all. Its extractProps reads only the record's readonly state. The rows below exist to make that explicit, because several blog posts claim otherwise.

OptionTypeWhat it does
(none)n/aThe widget declares no supportedOptions and reads none in extractProps. Only the record's readonly state influences rendering. Any option you pass is silently ignored.

No colors option exists. The palette is the shared ColorList.COLORS constant, the same twelve entries every color-index widget in Odoo uses. Changing or extending the palette means patching that shared list or restyling the o_colorlist_item_color_* classes, which affects every widget that uses it, tags included.

Working examples

The core pattern: picker in the kanban card menu

<kanban>
  <templates>
    <t t-name="menu">
      <field name="color" widget="kanban_color_picker"/>
    </t>
  </templates>
</kanban>

The field sits inside the card's menu template, which is what puts it behind the three-dot dropdown.

The model side

color = fields.Integer(string="Color")  # 0 = no color, 1 to 11 = palette

The same integer drives card styling: Odoo's kanban card reads the field configured on the view to tint the card, so picker and card stay in sync by sharing the field.

Instant save, and the readonly disappearing act

Two behaviors read straight from the source separate this widget from its form-view cousin color_picker.

Saving is immediate and standalone. The click handler calls record.update({ [field]: index }, { save: true }). The record is saved right then, independent of anything else the user was doing. By contrast, color_picker, the form variant, only updates the record in memory and leaves saving to the normal form flow. Same palette, opposite persistence models, and the source is explicit about both.

Readonly means invisible, not disabled. The template's root node carries t-if="!props.readonly", so when the record is not editable the widget renders nothing whatsoever. If a menu section looks mysteriously empty for some users, check their write access on the model before debugging the view.

Each swatch is a real button carrying the color's translated name as both title and aria-label, so the picker is screen-reader friendly out of the box, and the current value's swatch gets an active class ring. There is no supportedTypes declaration either: nothing stops you pointing it at any field type, but everything in core points it at an integer, and the card styling expects exactly that.

Version compatibility

VersionStatusNotes
Odoo 20.0In developmentNot released. The development branch shows no functional changes to this widget; see below.
Odoo 19.0VerifiedVerified against the shipped source, component and template.
Odoo 18.0VerifiedSame zero-option surface and registration, 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. Nothing to migrate between 16 and 19: no options existed at any point, so views carry nothing that can break. If you patched the component itself, note that Odoo 20 migrates it to the new Owl props syntax.

What is changing in Odoo 20

Odoo 20 is expected at Odoo Experience in Brussels, 24 to 26 September 2026. We read this widget's file on the public development branch at the time of writing; the branch is unstable and moves until feature freeze, so we re-verify after release.

No functional changes: the palette, the instant save and the readonly behavior are identical. The only movement is the internal migration to the new Owl props declaration, which matters to JavaScript patches and not to any XML view.

Common problems and fixes

SymptomCause and fix
The color grid does not appear in the card menuThe record is readonly for this user; the template renders nothing when readonly. Check write access on the model, then re-check the menu.
Picking a color does nothing visible on the cardThe kanban card styling is not wired to the same field the picker writes. Point the view's color configuration at the same integer field.
Color choice survives even though the user never savedExpected: the picker saves the record immediately on click. No fix; train users that color picks are instant.
Need more or different colorsThe palette is the shared 12-entry ColorList constant, not a widget option. Restyle the o_colorlist_item_color_* classes or patch the shared list; both affect all color widgets.
Widget on a char field behaves oddlyNo supportedTypes are declared, so nothing warned you, but core styling expects an integer index. Store the index in an integer field named color.

Color Picker field vs the alternatives

WidgetBest forKey difference
kanban_color_pickerLetting users color kanban cards from the card menuWrites a palette index and saves instantly; renders nothing when readonly
color_pickerThe same palette on form and list viewsExpanded or toggled palette by view type, and the pick is not saved until the record is
colorStoring an actual hex color as dataNative browser color input writing #RRGGBB to a char field, not a palette index
many2many_tagsCategorizing with labeled, colored tagsColors belong to tag records, with meaning attached to a name rather than a bare swatch

The split to remember: kanban_color_picker and color_picker write a palette index for Odoo-styled surfaces, while the color widget stores a real hex value for when the color itself is data.

Frequently asked questions

What is the kanban_color_picker widget in Odoo?+
It is the color palette inside a kanban card's dropdown menu. It renders Odoo's standard twelve-color palette as round swatches and writes the picked index, 0 to 11, into an integer field on the record, conventionally called color.
Does picking a color save the record?+
Yes, immediately. The source calls record.update with save: true, so the record is saved the moment the swatch is clicked, with no separate save step. This differs from the form-view color_picker widget, which leaves saving to the normal form flow.
Why do some users not see the color palette at all?+
The template renders nothing when the record is readonly for the current user. It does not show a disabled version. If the palette is missing, check the user's write access on the model before suspecting the view.
Can I add my own colors to the picker?+
Not through the widget: it has no options and uses the shared ColorList palette of twelve entries. Extending it means patching that shared constant and the o_colorlist_item_color_* styles, which changes every color-index widget in the database, tags included, so treat it as a deliberate design decision.
Which field type should the picker be used on?+
An integer field, almost always named color. The widget declares no supported types, so Odoo will not stop you using something else, but the palette classes and the kanban card styling that reads the value both assume the 0 to 11 integer convention.
Is kanban_color_picker changing in Odoo 20?+
The development branch shows no functional change: same palette, same instant save, same readonly behavior. Only the internal component syntax moves to the new Owl style, which affects JavaScript patches only. Odoo 20 is expected in September 2026, and we re-verify this page after release.

Want kanban boards that signal status by themselves?

Rule-driven card colors, custom palettes, and boards where color means the same thing to everyone: all small, high-leverage changes on the same integer field this picker writes. We build them for Odoo 16 through 19.

Book a free consultation

How this page was produced

The behavior on this page was read from the Odoo 19.0 web module source, both kanban_color_picker_field.js and its template file, which is where the instant save call and the readonly t-if are visible. The Odoo 18 source of the same files was compared for the version table, and the Odoo 20 statement comes from the public development branch, clearly marked as unreleased. Spotted an error? Tell us and we will correct the page.