Skip to Content
Modern office building
Info & Update

Odoo 19 vs Odoo 20: Technical Differences and Migration Guide

8 min read 121 views
Share:

Odoo 19 vs Odoo 20: Technical Differences and Migration Guide

Technical Comparison for Odoo Community Developers

For developers building custom addons for Odoo Community, comparing Odoo 19 and Odoo 20 involves much more than changes to the module folder structure.

There are 10 key technical areas that developers should carefully evaluate:

  1. Core Framework & ORM — Changes to Python APIs, models, fields, and methods.
  2. Database & PostgreSQL — Changes to database schemas, relationships, and system requirements.
  3. Security & Access Rights — Changes to ACLs, Record Rules, Groups, and permissions.
  4. XML Views & XPath — Changes to view structures and inheritance mechanisms.
  5. JavaScript & OWL — Changes to the frontend framework, components, and assets.
  6. API & Integration — Changes to external APIs, controllers, authentication, and integrations.
  7. Module Structure & Manifest — Changes to addon structures, dependencies, and module declarations.
  8. Background Jobs & Automation — Changes to cron jobs, scheduled actions, and background processing.
  9. Deployment & Dependencies — Compatibility requirements for Python, PostgreSQL, Linux, and external libraries.
  10. Migration & Compatibility — Impacts on custom addons and the overall upgrade process.

Important Note: As of November 2, 2026, technical differences should be verified against official Odoo 20 documentation and source code. Confirmed changes must be clearly distinguished from predictions, community discussions, or unverified technical claims.

1. Overview of Key Technical Differences

Available technical analyses indicate that Odoo 20 was released in September 2026, introducing significant framework-level changes compared to Odoo 19.

These changes extend beyond simply renaming security CSV files.

Technical AreaOdoo 19Odoo 20Impact
Minimum Python VersionPython 3.10Python 3.12High
Minimum PostgreSQL VersionPostgreSQL 13PostgreSQL 16High
Access Rightsir.model.accessir.accessCritical
Record RulesSeparate ir.rule modelConsolidated into ir.accessCritical
Security CSVir.model.access.csvir.access.csvCritical
Frontend FrameworkOwl 2.8Owl 3 with compatibility layerHigh
Icon FrameworkFont Awesome / Odoo IconsMaterial SymbolsMedium
Binary FieldsBase64-based representationBinaryValueHigh
Attachment APIdatasrawHigh
Configuration Parametersget_param() / set_param()Typed getters and settersHigh
ORM Groupingread_group()Replacement grouping APIHigh
Timezone HandlingpytzzoneinfoMedium
Web ServerWerkzeug-basedChanges to HTTP server implementationMedium
Module MigrationManual adjustments and scriptsAdditional upgrade scriptsMedium

Reference: Technical comparisons of Odoo 19.0 and 20.0 branches, including an Odoo Digest analysis published on October 24, 2026.

Verification Note: The table summarizes the technical changes reported in the supplied material. Individual changes should be confirmed against the relevant Odoo source-code branches before being treated as mandatory migration requirements.

2. Security Framework Changes — Critical Impact

One of the most significant reported changes in Odoo 20 concerns its security architecture.

Odoo 19 Security Architecture

Odoo 19 uses two primary models to manage security:

self.env['ir.model.access']
self.env['ir.rule']

These models serve different purposes:

  • ir.model.access manages model-level access permissions, including Create, Read, Update, and Delete (CRUD).
  • ir.rule manages record-level access restrictions using domain-based rules.

Odoo 20 Security Architecture

According to the reported changes, Odoo 20 consolidates these mechanisms into:

self.env['ir.access']

This means that the changes potentially extend beyond CSV file naming conventions to the underlying security management architecture.

Impact on Custom Addons

Developers should carefully review the following areas:

  • References to legacy security models must be identified and migrated where necessary.
  • Security file structures and declarations may require adjustments.
  • Custom code that creates or modifies ir.rule records must be reviewed.
  • Access-control testing must cover user groups, CRUD permissions, domain restrictions, and multi-company scenarios.
  • Security migration should follow official upgrade procedures and include comprehensive regression testing.

3. ORM and Python API Changes

Several legacy APIs are reported to have been removed, replaced, or refactored in Odoo 20.

These changes may directly affect custom business logic and backend integrations.

API / ComponentReported Odoo 20 ChangeRecommended Developer Action
read_group()RemovedMigrate to the supported grouping API
odoo.osv.expressionRemovedRefactor domain expressions
@ormcache_contextRemovedReview caching strategies
check_access_rights()RemovedMigrate access validation logic
check_access_rule()RemovedAdapt to the updated security API
_check_recursion()RemovedReview recursive validation logic
group_operatorRemovedUpdate aggregation declarations
toggle_active()RemovedRefactor active/archive operations
ir.attachment.datasRemovedUse the appropriate raw API

Potential Technical Impacts

These changes may introduce several compatibility issues:

1. Module Installation Failures

Custom addons may fail during installation if they reference removed or incompatible APIs.

2. Runtime Exceptions

Existing methods may trigger errors when called by business processes.

3. Data Processing Issues

Changes to ORM grouping, aggregation, or binary data handling may affect reports, dashboards, and integrations.

4. Security Validation Failures

Changes to access-checking methods may affect custom authorization logic.

5. Business Logic Incompatibility

Custom Python methods may require refactoring to align with the updated ORM framework. Even when the addon folder structure and manifest remain unchanged, compatibility is not guaranteed.

Recommendation: Conduct a source-code audit to identify deprecated APIs, removed methods, and incompatible ORM operations before upgrading.

4. JavaScript and OWL Framework Changes

Odoo 20 reportedly introduces a transition from Owl 2.8 to Owl 3, bringing changes to frontend components, directives, and rendering mechanisms.

Frontend Framework Comparison

Odoo 19Odoo 20
t-portalt-custom-portal
t-modelt-custom-model
useEffectuseLayoutEffect
Owl 2 componentsOwl 3 components with a compatibility layer
Font Awesome iconsMaterial Symbols

Compatibility Considerations

Odoo 20 reportedly includes a compatibility layer to support certain existing Owl 2 components. However, compatibility does not necessarily extend to every custom implementation.

Developers should specifically evaluate addons that:

  • Patch native Odoo web client components.
  • Extend Owl components and templates.
  • Register custom services or frontend components.
  • Modify JavaScript registries.
  • Implement custom widgets and interactive dashboards.
  • Use custom JavaScript assets or frontend libraries.
  • Override standard Odoo website behavior.

5. Database and Deployment Changes

Changes to minimum Python and PostgreSQL requirements may significantly affect development, staging, and production environments.

Infrastructure Migration Requirements

ComponentRecommended Migration Action
PythonUpgrade to a supported runtime version
PostgreSQLPlan database migration to PostgreSQL 16 or another officially supported version
Python PackagesVerify compatibility of all packages in requirements.txt
Timezone HandlingRefactor pytz implementations where required
HTTP ServerReview reverse proxy and deployment configurations
DockerRebuild container images using compatible Odoo 20 dependencies
Database MigrationFollow an official database upgrade procedure rather than simply replacing the source code

Additional Technical Considerations

Operating System Compatibility

Verify that the Linux distribution supports the required Python, PostgreSQL, and system libraries.

Reverse Proxy Configuration

Review Nginx or other reverse proxy settings, including request routing, timeouts, and WebSocket-related configurations.

External Libraries

Validate compatibility with third-party Python packages used by custom addons.

Database Backup and Recovery

Establish a tested backup and rollback strategy before performing production migration.

Environment Isolation

Deploy Odoo 20 in a separate development or staging environment before migrating production workloads.

Recommended Deployment Approach

For Linux-based deployments using Nginx, PostgreSQL, and multiple custom addons, a controlled migration process is strongly recommended.The production environment should remain unchanged until functional, integration, security, and performance testing have been completed successfully.

7. Odoo 19 to Odoo 20 Migration Tools

Odoo 20 reportedly provides the upgrade_code command to assist developers in adapting custom addon source code.

Step 1 — Perform a Dry Run

Run the migration utility in simulation mode before applying changes:

./odoo-bin upgrade_code \
  --addons-path=/opt/odoo/custom_addons \
  --from 19.0 \
  --dry-run

The purpose of a dry run is to identify potential source-code modifications without directly changing addon files, where supported by the installed tool.

Step 2 — Execute the Code Upgrade

After creating a backup and a dedicated Git migration branch:

./odoo-bin upgrade_code \
  --addons-path=/opt/odoo/custom_addons \
  --from 19.0

Step 3 — Perform Owl 3 Migration

For frontend-related changes, the reported migration command is:

./odoo-bin upgrade_code \
  --addons-path=/opt/odoo/custom_addons \
  --script owl3-migration

Important: These commands are reproduced from the supplied technical material. Their availability, syntax, and supported options must be verified against the actual Odoo 20 command-line interface before execution.

Migration Tool Limitations

Automated migration utilities may assist with source-code transformation, but they cannot guarantee complete compatibility.

Manual validation remains necessary for:

  • Custom business logic
  • Security permissions
  • Record Rules
  • JavaScript and Owl components
  • Database migrations
  • External API integrations
  • Custom reports and dashboards
  • Third-party dependencies

A successful automated migration does not necessarily mean that an addon is production-ready.

8. Technical References

The following official resources should be used for further technical verification and compatibility assessment:

  1. Odoo 20 Developer Documentation
  2. Odoo 20 ORM API Reference
  3. Odoo 20 Security Framework
  4. Odoo 20 Source Code — GitHub

These resources should be consulted to confirm changes to framework APIs, security models, dependencies, and migration procedures.

9. Conclusion and Recommendations

Migrating from Odoo 19 to Odoo 20 involves much more than updating the module manifest version or renaming security configuration files.

The migration process may require substantial adjustments to backend architecture, frontend components, security mechanisms, database infrastructure, and external integrations.

The three highest-priority areas for technical assessment are:

  1. Security Framework Migration — Reviewing ACLs, Record Rules, user groups, and authorization mechanisms.
  2. Python and ORM API Refactoring — Identifying removed, deprecated, or modified APIs and updating custom business logic.
  3. Owl 3 Compatibility Testing — Validating custom frontend components, JavaScript extensions, and interactive interfaces.

Topics: Info & Update