Introduction to OpenUpgrade: The Foundation of Odoo Upgrade
OpenUpgrade is an important open-source project by the Odoo Community Association (OCA). Its main purpose is to provide scripts to perform database upgrades across major Odoo versions (e.g., from 17.0 to 18.0)
During this process, OpenUpgrade generates two valuable log files:
- upgrade_analysis.txt (example): This file contains a detailed list of backward-incompatible changes between the two versions, including models , fields , and XML records that have been added, removed, or renamed.
- apriori.py (example): This file contains a detailed list of module-level changes, covering the following cases:
Renamed Modules: When a module’s technical name changes between versions (e.g., note was renamed to project_todo)
Merged Modules: When a module is merged into another module
Not needed anymore: Some modules have been absorbed into Odoo native features during its evolution
Moved Modules: Some modules have been relocated to different repositories. For example, the module ed_oca was moved from OCA/edi to OCA/edi-framework between 15.0 and 16.0.
We believe the above information can be useful when working with Odoo. Therefore, We decided to parse these files into many structured databases in order to allow the data to be easily queried through an API and browsed with a user interface.
An Interface to Browse Analysis Files More Easily
OpenUpgrade API standardizes the entire data processing flow (ETL: Extract–Transform–Load) for upgrade changes and exposes them through a convenient REST API. Here’s how it work
Extract: Automatically pulls all upgrade scripts directly from OpenUpgrade branches (e.g., 16.0, 17.0, 18.0).
Transform: Parses and "translates" the raw text from upgrade_analysis.txt files (example) into a clean, unified data structure (ChangeRecord).
Load: Stores the normalized data into an SQLite database, clearly separated by major version (e.g., 16.0, 17.0, 18.0). Each DB file acts as an independent snapshot.
API: Provides endpoints so you can easily query change data by module, model, and version
The main goals of OpenUpgrade Api are:
To centralize and normalize all findings from OpenUpgrade into a single, easy-to-query source.
To offer a REST API for developers and consultants to quickly look up changes when planning migrations.
To automatically generate YAML files compatible with Odoo Module Migrator to automate rename and remove operations.
To serve as a backend for community tools, such as the search portal openupgrade.trobz.com
Leveling Up Automation with Odoo Module Migrator
This is the most powerful feature! OpenUpgrade API can automatically generate YAML files that Odoo Module Migrator can understand. You can create these files using the get command
Get a list of removed models in version 18.0: python manage.py get --object-type removed --object models --versions 18.0 --output-directory output
Get a list of removed fields in version 18.0: python manage.py get --object-type removed --object fields --versions 18.0 --output-directory output
Similarly for renamed models and fields: python manage.py get --object-type renamed --object models --versions 18.0 --output-directory output and python manage.py get --object-type renamed --object fields --versions 18.0 --output-directory output
The YAML files will be generated in the output directory with a clear structure. All you have to do is:
Generate the YAML files for the version you are migrating to (e.g., 17.0 → 18.0).
Copy these files into your migration repository.
Run odoo-module-migrator, and it will automatically apply the changes based on the data you provided
The Web UI: openupgrade.trobz.com.
To complement the OpenUpgrade API, we created the OpenUpgrade Explorer, a clean and user-friendly web interface that makes structured migration data easy to access. It helps developers and consultants quickly navigate backward-incompatible and module-level changes without the hassle of working directly with APIs or raw logs.
With it, you can:
Quickly inspect changes by module/model/field across Odoo versions.
Validate critical rename/remove/merged/obsolete/move operations before planning your migration.
Share lookup links with your team or customers
Check it out at: openupgrade.trobz.com