Skip to content

Odoo 18 Breaking Changes: What Developers Need to Know

DeployMonkey Team · March 23, 2026 9 min read

Overview

Odoo 18 continued the modernization trajectory with significant changes to the frontend framework, Python API refinements, and removal of previously deprecated features. This document catalogs the breaking changes that affect custom module developers upgrading to v18.

OWL 3 Frontend Framework

Odoo 18 upgraded to OWL 3, bringing several breaking changes to frontend components:

Component Lifecycle

  • willStart and willUpdateProps hooks were refactored
  • onWillStart and onWillUpdateProps in the setup() method are the canonical approach
  • Legacy component mounting patterns deprecated in v17 were removed
  • The component rendering pipeline was optimized, affecting manually managed DOM

Template Changes

  • QWeb template compilation was updated for OWL 3 compatibility
  • t-on- event handlers syntax was standardized
  • Slot handling changed — named slots use new syntax
  • Sub-template inclusion patterns were refined

Service System

  • The service injection pattern was updated — useService returns different types for some services
  • RPC service response handling changed for error cases
  • Notification service API was simplified

Python API Changes

Model Definitions

  • _auto attribute behavior was tightened — abstract models now strictly enforce _auto = False
  • Computed field dependency tracking was improved, catching previously silent circular dependencies
  • _sql_constraints validation is stricter — duplicate constraint names raise errors during upgrade
  • The api.constrains decorator validates that constrained fields exist at class definition time

ORM Methods

  • search_count() with limit parameter was deprecated — use search_count(domain) without limit
  • name_search() behavior was refined for edge cases with special characters
  • read_group() result format was standardized for nested groupby
  • write() on computed stored fields raises a clearer error

Security

  • Record rule evaluation order was made deterministic
  • sudo() behavior was tightened in multi-company contexts
  • Access right checking was expanded to cover more ORM operations that previously bypassed checks

View and XML Changes

  • The position="attributes" xpath now validates attribute names more strictly
  • Tree view is fully renamed to list view in code — <tree> still works but generates deprecation warnings
  • Form view oe_chatter class positioning rules changed
  • Dashboard views were overhauled with new XML syntax
  • Pivot and graph view field attributes were standardized

Asset System

The asset bundling system was updated:

  • Bundle names changed — web.assets_backend remains but several sub-bundles were reorganized
  • SCSS variable names for theming were updated
  • The include directive in asset bundles was replaced with a new pattern
  • Module-level asset declarations in __manifest__.py use updated syntax

Removed Deprecations

Features deprecated in v16/v17 were removed in v18:

  • Legacy JavaScript widget system — all widgets must be OWL components
  • fields_view_get() method — replaced by get_views()
  • Old-style mail templates with Jinja2 syntax
  • Classic form view buttons without explicit type attribute
  • The states attribute on fields (use invisible/readonly conditions instead)

Database and Performance

  • PostgreSQL 14+ is now required (PostgreSQL 12/13 support dropped)
  • New database indexes were added to core tables — migration scripts handle this
  • Worker process management was updated — check odoo.conf worker settings
  • Longpolling was replaced with WebSocket for real-time updates

Migration Checklist

  1. Audit all JavaScript files for OWL 2 patterns that need OWL 3 updates
  2. Search for removed deprecated methods (fields_view_get, states attribute, etc.)
  3. Update asset bundle declarations in manifests
  4. Check PostgreSQL version compatibility
  5. Test all custom views for stricter validation errors
  6. Review record rules for multi-company sudo behavior
  7. Update SCSS/CSS for new variable names

DeployMonkey

DeployMonkey supports Odoo 18 deployment. Use the AI agent to scan your custom modules for v18 breaking changes before starting the migration.