Migration tracker: Odoo 20.0

How many OCA repositories already carry a 20.0 branch, how many of those hold real modules, and what the same measurement looked like for 19.0. One set of numbers, one piece of code, two dates.

The 20.0 branch does not exist yet — not in OCA, not at Odoo itself. Last checked 2026-09-16 18:00 UTC; the watcher asks git ls-remote every 15 minutes. 8 days remain until the Odoo Experience keynote on 2026-09-24.

The zeros below are a measurement, not a blank: we ask for the refs of every OCA repository — the watcher hourly, the harvest nightly — and 20.0 is in none of them. With zero branches the remaining rows are zero by definition — a branch that does not exist holds neither modules nor a template. Once the first branch appears, the contents of the trees are read as a separate step, and until they are read those rows show dashes: “the branch exists” and “the branch holds modules” do not collapse into one number here.

Odoo 20.0

MeasuredValue
Repositories with the branch0 of 234
  of them with modules0
  of them OCA template only0
  of them not read yet0
Modules in those branches0

Snapshot 2026-09-16 17:30 UTC.

Daily series: 27 points since 2026-08-19, all of them zero. The first non-zero point will show up here on its own.

How 19.0 went — the same measurement

19.0 was released on 2025-09-01. This is where it stands 12 months later. Both columns are counted by one piece of code: each reads the branch tree and counts directories holding a top-level __manifest__.py.

MeasuredValue
Repositories with the branch232 of 234
  of them with modules122
  of them OCA template only110
  of them not read yet0
Modules in those branches1 311

Snapshot 2026-09-08 06:47 UTC. Trees are read only where the ref has moved, so the number stays current without re-cloning everything.

Two counters, never one

“The branch exists” and “the branch holds modules” are different statements, and on 19.0 the gap between them is large: the OCA template rolls out across the organisation on its own — one Initial commit, no __manifest__.py anywhere in the branch history. A tracker counting branches alone would show growth that is not there.

DateRepositoriesModulesΔ modules
2026-09-022321 277
2026-09-03incomplete snapshot — not a measurement
2026-09-042321 293
2026-09-052321 299+6
2026-09-062321 302+3
2026-09-072321 300-2
2026-09-082321 311+11
2026-09-092321 316+5
2026-09-102321 321+5
2026-09-112321 334+13
2026-09-122321 344+10
2026-09-132321 344+0
2026-09-142321 345+1
2026-09-152321 353+8
2026-09-162321 361+8

Weekend rows are dimmed; an empty Δ after an “incomplete snapshot” row is a refusal to compute growth across a day we did not measure. A zero on Saturday and Sunday is normal, not a stall: the growth happens on working days — measured, not assumed. A negative Δ is not a fault of the count: OCA sometimes force-pushes a branch back to the empty template, and that day the modules on it are gone — the index publishes the actual state of the branch, not its history.

Trend by series

Modules in the branch, one point per day. A series shorter than 14 points is not drawn at all: a curve over a few points reads as a trend while being just a segment. Incomplete harvest runs are excluded — the dataset flags them in the partial column.

16.0
28 points · 2026-08-19…2026-09-16 · 3 099 → 3 108 (+9) · 1 incomplete snapshot excluded
17.0
27 points · 2026-08-19…2026-09-16 · 1 930 → 1 953 (+23) · 1 incomplete snapshot excluded
18.0
27 points · 2026-08-19…2026-09-16 · 2 877 → 2 961 (+84) · 1 incomplete snapshot excluded
19.0
27 points · 2026-08-19…2026-09-16 · 1 192 → 1 361 (+169) · 1 incomplete snapshot excluded
20.0
27 points · 2026-08-19…2026-09-16 · 0 → 0 (+0) · 1 incomplete snapshot excluded

How many modules have somewhere to move at all

Before the release we ran 1 290 modules of the 19.0 branch on Odoo’s development line — the one 20.0 will come out of. 442 started with no change to the code beyond the version string in the manifest. That does not mean they will install on 20.0: the manifest still has to be updated, and the platform itself will change before release. It does mean that for those 442 the port is a mechanical step rather than work.

How this is measured, with every caveat — the methodology section.

What this page will not carry

Forecasts and ETAs. The 19.0 growth runs at about ten modules per working day and zero at weekends, and at the edge rates the yearly range spreads fivefold. A line reading “at this pace parity arrives in May” drawn from that is a claim, not a fact, and we do not make it.

A “who ports worst” ranking. Technically possible from the same data. It will not happen.

Subscribe

Atom feed of 20.0 events: one entry for “a branch appeared in this repository” and a separate one for “modules appeared in that branch”. Those are different pieces of news, and merging them would announce progress that is not there yet. This tracker has no subscription form and will not get one — a feed needs neither an address nor a registration.

The feed is empty right now, and that is the truthful answer: no events yet. Subscribing makes sense precisely now — so you hear about the first one rather than finding it on your second visit.

Data updated 2026-09-16 18:00 UTC · we publish the install log with a date, not a vendor rating · CSV and JSON are open

Questions or a wrong result: open an issue or hello@allservices.one

Independent project. Not affiliated with Odoo S.A. or the Odoo Community Association.