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
willStartandwillUpdatePropshooks were refactoredonWillStartandonWillUpdatePropsin thesetup()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 —
useServicereturns different types for some services - RPC service response handling changed for error cases
- Notification service API was simplified
Python API Changes
Model Definitions
_autoattribute behavior was tightened — abstract models now strictly enforce_auto = False- Computed field dependency tracking was improved, catching previously silent circular dependencies
_sql_constraintsvalidation is stricter — duplicate constraint names raise errors during upgrade- The
api.constrainsdecorator validates that constrained fields exist at class definition time
ORM Methods
search_count()withlimitparameter was deprecated — usesearch_count(domain)without limitname_search()behavior was refined for edge cases with special charactersread_group()result format was standardized for nested groupbywrite()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_chatterclass 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_backendremains but several sub-bundles were reorganized - SCSS variable names for theming were updated
- The
includedirective in asset bundles was replaced with a new pattern - Module-level asset declarations in
__manifest__.pyuse 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 byget_views()- Old-style mail templates with Jinja2 syntax
- Classic form view buttons without explicit
typeattribute - The
statesattribute on fields (useinvisible/readonlyconditions 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.confworker settings - Longpolling was replaced with WebSocket for real-time updates
Migration Checklist
- Audit all JavaScript files for OWL 2 patterns that need OWL 3 updates
- Search for removed deprecated methods (
fields_view_get,statesattribute, etc.) - Update asset bundle declarations in manifests
- Check PostgreSQL version compatibility
- Test all custom views for stricter validation errors
- Review record rules for multi-company sudo behavior
- 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.