Overview
Odoo 15 to 16 was a significant upgrade. Odoo 16 introduced major frontend changes (OWL 2 components), new view features, updated Python API patterns, and deprecation of several legacy interfaces. This guide covers the complete migration process — database, code, views, and data.
Before You Start
- Create a complete backup of your database and filestore
- Document all custom modules and third-party add-ons
- Test the migration on a staging server first — never migrate production directly
- Verify your third-party modules have v16 compatible versions
- Budget 2-6 weeks for a typical migration (depends on customization)
Database Migration
Odoo does not provide an official migration tool for Community Edition. Your options are:
OpenUpgrade (Community)
OpenUpgrade is the standard open-source migration tool. It provides migration scripts that transform the database schema and data from one version to the next. Run OpenUpgrade against your v15 database to produce a v16-compatible database.
git clone https://github.com/OCA/OpenUpgrade.git
git checkout 16.0
python odoo-bin -d your_db --update all --stop-after-initOdoo Enterprise Migration
Enterprise customers can use Odoo's official migration service. Upload your database at upgrade.odoo.com and receive a migrated database. This is the safest option for Enterprise but does not handle custom module code.
Key Python API Changes (v15 to v16)
Web Controllers
The website parameter in route decorators changed. Controllers using website=True need review as the website module was restructured. Check all custom controller routes for compatibility.
Fields and Models
- The
track_visibilityattribute was fully replaced bytracking=True(deprecated in v14, removed in v16) _sql_constraintssyntax remained stable but new validation was added- Selection fields gained
group_expandsupport for Kanban grouping
Security
Record rules using global attribute changed behavior. Review all ir.rule definitions in your custom modules. The global attribute now means the rule applies to all users, including superuser in some contexts.
View Changes
Odoo 16 introduced several view syntax updates:
- New
column_invisibleattribute for tree/list view columns replaced context-based column hiding - Form view button styling classes updated
- Kanban view QWeb templates got new helper attributes
- Search view filter grouping syntax was refined
Review all custom XML view definitions. Most view changes are backward-compatible, but deprecated patterns may cause warnings or unexpected behavior.
Frontend / JavaScript Changes
Odoo 16 continued the migration from legacy widgets to OWL 2 components. If your custom modules include JavaScript widgets:
- Legacy widget registry still works but is deprecated
- New OWL components should extend
Componentfrom@odoo/owl - Service injection replaced the old
require()pattern - Asset bundling changed — verify your module's
__manifest__.pyasset declarations
Data Migration Checklist
- Run OpenUpgrade or Odoo upgrade service on a copy of your database
- Verify all standard module data migrated correctly (partners, products, invoices)
- Check custom field data — fields added by custom modules need manual migration scripts
- Verify accounting data integrity — run trial balance before and after migration
- Test all automated actions and scheduled jobs
- Verify email templates render correctly
- Check report generation (QWeb PDF reports)
Custom Module Migration Steps
- Update
__manifest__.pyversion to16.0.x.x.x - Replace deprecated API calls (track_visibility, etc.)
- Update view XML for new syntax requirements
- Migrate JavaScript from legacy to OWL 2 where needed
- Update security files (ir.model.access.csv, record rules)
- Run Python tests and fix failures
- Test all UI workflows manually
Common Migration Issues
- Assets not loading: Asset bundle names changed. Update
__manifest__.pyasset references. - Website pages broken: Website module restructuring affects custom pages. Re-check templates.
- Kanban views empty: Column grouping behavior changed. Add
group_expandif needed. - Access errors: Record rule changes may affect permissions. Test all user roles.
Rollback Strategy
Always maintain your v15 backup and infrastructure until v16 is verified in production. A rollback plan should include: database restore procedure, filestore restore, v15 code deployment, and DNS switchback if applicable. Test the rollback procedure before going live.
DeployMonkey
DeployMonkey can deploy both Odoo 15 and 16 instances for side-by-side testing during migration. Use the AI agent to identify compatibility issues in your custom modules before committing to the migration.