Odoo 20.0 FINAL shipped after the Brussels Odoo Experience (24–26 September 2026) and is now live on the App Store. Before porting anything, we read the actual source — not a changelog, not a third-party blog — to find out what breaks a connector that works today on Odoo 19. Here is what we found, with the file and line where we checked it.
Method: every row in the table comes from running ls, grep or git log against /srv/odoo-fuente/odoo-20.0 and /srv/odoo-fuente/enterprise-20.0 (commits 17ff827a1 and e5186134, 26 and 27 September 2026), not from reading about Odoo 20 somewhere else.
The four breaking changes we verified
| What is gone | What happens if your module uses it | Verified against |
|---|---|---|
base_vat and base_iban | The module fails to install if it depends on them: NIF/IBAN validation moved into core. | addons/ folder in Odoo 20.0 FINAL source |
ir.model.access and ir.rule | Both merge into a new model, ir.access. Old-format permission CSVs are not read. | odoo/addons/base/models/ir_access.py + odoo/upgrade_code/19.4-00-ir-access.py |
odoo.osv (the whole package) | from odoo.osv import expression raises ModuleNotFoundError and the module fails to load. | odoo/osv/ missing from Odoo 20.0 FINAL source |
The datas field on attachments | ir.attachment.create({'datas': ...}) creates the attachment with size 0, with no error at all. The signed PDF comes out empty. | odoo/addons/base/models/ir_attachment.py:535 in Odoo 20.0 FINAL source |
The attachment change is the dangerous one: it raises no exception at all. An e-signature connector still writing 'datas': base64... installs cleanly, passes a smoke test, and saves the signed PDF at size 0. It shows up when a customer tries to open the document, not in the deploy log.
What to check before migrating your own connector
grep -rn base_vat\|base_iban __manifest__.pyacross your modules: if it's independs, the module won't install.grep -rn 'from odoo.osv import'across the Python code: every hit needs to becomefrom odoo.fields import Domain.ir.model.access.csvfiles: runodoo-bin upgrade_code --script 19.4-00-ir-access, which converts the format, updates the manifest and removes the old CSV (Odoo's own official script).- Any
'datas': base64.b64encode(...)written to an attachment: change it to'raw': ..., which works the same on Odoo 17, 18, 19 and 20 — no need to wait for the port to fix it.
How we tested it ourselves
Every one of our connectors that reaches Odoo 20 first goes through a real Odoo 20.0 FINAL install with Enterprise: it actually installs, its whole test suite runs — at least one test, none skipped — and only a fully green run gets published. A clean install is not proof: the attachment issue, for instance, only shows up in a test that opens the document after creating it, never in a tidy install log.
With that bar, we already have 9 connectors published on Odoo 20 — the list is in this article — and the rest of the catalog is arriving module by module, as each one clears its full test suite, not all at once.
Frequently asked questions
Can Odoo 20 be installed in production already?
Odoo 20.0 FINAL is published and available on the App Store. Before migrating a deployment with custom connectors, check whether they depend on base_vat, base_iban or odoo.osv, and whether they write attachments using 'datas'.
Why can a connector that installs fine still fail on Odoo 20?
Because installing only checks that the manifest and views load. The attachment change (the datas field) raises no error when the record is created: the failure shows up when the saved document is read or opened, something only a test that actually checks this catches.
Useful links inside FlexigoTech
Does your connector rely on us? We'll tell you if Odoo 20 breaks it
Send us the module's name and we'll tell you, against the real source, whether any of these four breaking changes affects it. Email comercial@flexigobe.com or call +34 616 809 504.

