Skip to main content
iVentureTeam

kanban_activity

The little clock on every kanban card is kanban_activity: a 32-line widget that quietly fetches six extra fields and color-codes your follow-ups.

Siddharth JambukiyaSiddharth JambukiyaOdoo Techno-Functional Consultant
August 11, 2026Updated August 11, 20266 min read
Technical namekanban_activity
Field typesone2many (activity_ids)
Viewskanban
Modulemail, installed with Discuss in every practical database
Used in core23 occurrences across 17 modules, including fleet, account, stock, crm, project, maintenance
VersionsOdoo 20.0, Odoo 19.0, Odoo 18.0, Odoo 17.0, Odoo 16.0
No-code setupNo. Kanban card templates are edited in view XML; the activity system itself is no-code
Alternativeslist_activity, activity_exception, kanban_color_picker

What the activity clock does

Activities are Odoo's follow-up system: schedule a call, a to-do, a document request, against any record on a model that inherits the activity mixin. On kanban boards, the entire system compresses into one small clock icon per card, and that icon is this widget.

The component itself is remarkably small, 32 lines in the Odoo 19 source, because it delegates the real work to the shared ActivityButton from the mail module. What the widget contributes is placement inside the card and, crucially, its fieldDependencies declaration: six activity-related fields that Odoo fetches automatically for every card so the icon can be drawn correctly, without any of them appearing in your view definition.

Clicking the clock opens the activity popover: the list of pending activities with their deadlines, mark-done buttons, and scheduling of new ones, all without leaving the board.

What this means for your team

Follow-up discipline is pipeline hygiene. A CRM where every card shows a green, orange or red clock is a CRM where "who dropped the ball" is answered by looking, not by running a report. The color rules encode exactly that triage: red for overdue, orange for today, green for planned ahead.

The exception layer is the part managers underuse. When an automated process flags a problem, a bounced email on a lead for instance, the exception decoration replaces the clock with a warning icon in warning or danger color, making broken records visible at board level. If your team builds automations, emitting activity exceptions is a cheap way to surface failures where people already look.

Because scheduling happens in the popover without opening the record, boards stay the single working surface: triage a column, schedule the follow-ups, and move on.

Supported options in Odoo 19

Verified against kanban_activity.js in the Odoo 19.0 mail module: the widget declares no options and reads none. What it declares instead is fieldDependencies, listed below because they are the widget's real interface.

OptionTypeWhat it does
(none)n/aThe widget declares no supportedOptions and reads none. Its interface is the six fieldDependencies it fetches automatically: activity_exception_decoration, activity_exception_icon, activity_state, activity_summary, activity_type_icon, activity_type_id.

The six auto-fetched fields: activity_exception_decoration, activity_exception_icon, activity_state, activity_summary, activity_type_icon and activity_type_id. All come free with the activity mixin. A curiosity for source readers: the selection values in that declaration are written as Python-style tuples inside JavaScript, which collapse to plain strings at runtime, harmless, since only the field names matter for fetching, but a reminder that this file was translated from Python conventions.

Working examples

The standard card pattern

<kanban>
  <templates>
    <t t-name="card">
      <!-- card content -->
      <field name="activity_ids" widget="kanban_activity"/>
    </t>
  </templates>
</kanban>

That is the entire integration: one field, one widget, six dependencies fetched automatically.

The model side

class Vehicle(models.Model):
    _name = "fleet.vehicle"
    _inherit = ["mail.activity.mixin", "mail.thread"]

The activity mixin provides activity_ids and every dependency field the widget needs.

Inside ActivityButton: icon priority, colors, and the selection trick

The visible behavior all lives in the shared ActivityButton component, and reading it settles the icon logic precisely.

Color comes from activity_state: overdue is danger red, today is warning orange, planned is success green, and no activities leaves a muted clock. The state itself is computed by the mixin against each activity's deadline, timezone-aware.

The icon has a priority order. If an exception decoration is set, the exception icon wins, colored warning or danger. Otherwise, once any activity exists, the next activity type's configured icon is used, a phone for calls, an envelope for emails, falling back to a generic tasks icon. Only a record with no activities and no exception shows the plain clock.

The tooltip is informative before the click: exception records say Warning, otherwise the next activity's summary, otherwise its type name.

One list-view behavior hides in the click handler. When the same button runs inside a list where multiple records are selected including the current one, the popover targets the whole selection, so marking done or scheduling applies to all selected records at once. On kanban cards there is no selection, so it is always per record, but it is the same component doing both jobs.

Version compatibility

VersionStatusNotes
Odoo 20.0In developmentNot released. The development branch shows no functional changes; internals only. See below.
Odoo 19.0VerifiedVerified against the shipped source, widget and shared ActivityButton.
Odoo 18.0VerifiedIdentical dependencies 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: no options in any version, and the 18 and 19 declarations are identical, verified. Custom kanban templates written for 16 or 17 keep working; only deep JavaScript patches against the mail components need re-testing per release, standard practice during an Odoo migration.

What is changing in Odoo 20

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

No functional changes. The six fieldDependencies, the registration and the delegation to ActivityButton are unchanged. The only movement is internal, the migration to the new Owl props typing, which affects JavaScript patches and nothing in your views. The board-level activity workflow your team knows carries into 20 as-is, pending the final release.

Common problems and fixes

SymptomCause and fix
No clock icon on the cardsThe widget is missing from the card template, or the model lacks the activity mixin. Add the field with the widget to the kanban template and confirm the model inherits mail.activity.mixin.
Clock stays gray despite scheduled activitiesActivities exist but belong to other records, or the state fields were shadowed by a custom view fetching them differently. Check the record's own activities; the six dependency fields are fetched automatically.
A warning triangle replaced the clockAn activity exception is set on the record; the exception icon and color override everything. Open the record and resolve the flagged problem; the clock returns when the exception clears.
Icon is a phone or envelope instead of a clockExpected: with activities present, the next activity type's configured icon is shown. No fix needed; edit the activity type's icon if you want something else.
Scheduling from the popover affected several recordsIn list views the button applies to the whole selection when the current record is part of it. Expected power feature; clear the selection for single-record scheduling.
Overdue shows for an activity due todayState is computed timezone-aware per user; the user's timezone shifts the boundary. Check the user's timezone setting on their profile.

Activity clock vs the alternatives

WidgetBest forKey difference
kanban_activityThe full activity workflow on kanban cardsClock icon plus scheduling popover, fed by six auto-fetched fields
list_activityActivities in list viewsAdds the next activity's summary text beside the icon
activity_exceptionShowing only failure flagsRenders just the exception marker, no popover or scheduling
kanban_color_pickerManual visual triage of cardsUser-picked colors rather than deadline-driven state

The split: this widget is the kanban card treatment. Lists get list_activity, which adds the summary text next to the icon, and activity_exception renders only the warning marker where the full popover is unwanted.

Frequently asked questions

What is the kanban_activity widget in Odoo?+
It is the clock icon on kanban cards that opens the activity popover for scheduling, editing and completing activities without leaving the board. It is placed on the activity_ids field and delegates its behavior to the mail module's shared ActivityButton component.
What do the activity clock colors mean?+
Read from the source: red means at least one activity is overdue, orange means one is due today, green means everything is planned for later. No color, a muted clock, means no activities. The state is computed per user timezone by the activity mixin.
Why do I not need to add the activity fields to my view?+
The widget declares six fieldDependencies, verified in the source: the exception decoration and icon, state, summary, type icon and type. Odoo fetches them automatically for every card, which is exactly what fieldDependencies exist for.
What replaces the clock when something goes wrong?+
Activity exceptions. When activity_exception_decoration is set on the record, the widget shows the exception's icon in warning or danger color instead of the clock, and the tooltip reads Warning. Clearing the exception restores normal display.
Can I use kanban_activity on any model?+
On any model that inherits mail.activity.mixin, which provides activity_ids and all dependency fields. Without the mixin there is nothing for the widget to render. Adding the mixin to a custom model is a two-line change.
Does the widget have any options?+
None. The source declares no options and reads none; behavior is entirely determined by the record's activity data. The only configuration is where in the card template you place the field.
Will kanban_activity change in Odoo 20?+
The development branch shows no functional change, only the internal migration to new component syntax. Odoo 20 is expected in late September 2026, and we re-verify this page against the shipped release.

Boards where nothing falls through?

Activity plans per team, exception flags from your automations, and kanban cards that surface trouble by themselves: the activity system rewards proper setup. We design follow-up workflows in Odoo CRM, projects and operations for 16 through 19.

Book a free consultation

How this page was produced

This page was verified by reading two files in the Odoo 19.0 mail module source: kanban_activity.js for the registration and fieldDependencies, and the shared activity_button.js for the color rules, icon priority and popover behavior, including the multi-select handling. The 18.0 source was compared for the version table, and the Odoo 20 statement reflects a diff against the public development branch, clearly marked as unreleased. Spotted an error? Tell us and we will correct the page.