Skip to Content
Salesforce Odoo Mac & iOS Guides Pricing Company Events Cart Sign In Contact

Upgrading to Odoo 20: What Changes for Your Customizations

The Odoo 20 changes that break custom modules, reports and imports, and what to do about each one.

Updated October 2026

Most guides to Odoo 20 list new features. This one lists the changes that break custom work, because those decide how long an upgrade takes and what it costs. We checked each item against the Odoo 19 and Odoo 20 source code, not only the release notes.

Changes that affect custom modules

AreaOdoo 19Odoo 20What to do
Access rights and record rulesir.model.access grants operations, and ir.rule limits records.One model, ir.access. A record with a group grants an operation, and grants add up. A record with no group restricts everyone, the administrator included.Rewrite your security files for ir.access (ir.model.access.csv becomes ir.access.csv), then test every role logged in as a real user in that group.
Companies and peopleA company_type choice, and is_company you can set.company_type is gone. is_company is computed: a top-level contact with a tax ID counts as a company.Update imports, views, filters and reports that set or read either field, and load tax IDs for company contacts.
Field change historyTracking values are stored for every tracked change.Tracking messages are built on the fly. Stored values move to a separate module, mail_tracking, that is not installed by default.Code or reports that read tracking values need that module, or a rewrite.
IconsFont Awesome.Material Symbols.Review custom views, templates and scripts that use Font Awesome classes.
PDF reportsOne built-in engine, wkhtmltopdf.Engines are separate modules: wkhtmltopdf, installed by default, and a new optional engine, Paper Muncher.Test every custom report layout after the upgrade, and again if you switch engines.
Modules merged into corestock_picking_batch, base_vat, hr_org_chart, and the eCommerce wishlist were separate modules.Their features live in Inventory, the base module, Employees and eCommerce. Remote Work is merged into Employees.Fix the dependencies in your custom modules' manifests.
Accounting structureAccount groups and asset models.Parent accounts and depreciation models.Review custom reports and code that use account groups or asset models.
Field Service (Enterprise)Its own app.Merged into Planning.Port Field Service customizations to Planning.
Push notificationsFirebase.Odoo's own service.Check any custom mobile notification integrations.

How we run an Odoo 20 upgrade

  • Audit. We list your custom modules, third-party apps, reports and data quality issues, and check each against the table above.
  • Port. We rewrite custom modules for Odoo 20, starting with security and anything that touches contacts.
  • Test on a copy. We upgrade a copy of your database, then your team tests their own work on it while we fix what turns up.
  • Go live. A planned cutover with a way back, then support while your team settles in.

We already build and run four of our own products on Odoo 20, so we work from the source code, not from guesses. Our Odoo services.

More guides

Want a second pair of eyes on your upgrade?

Book a free call. Bring your list of custom modules, and we will tell you which of these changes hit you.