Bootstrap & SCSS by Odoo version
When you customize an Odoo theme — overriding brand colors, restyling the backend, or forking a frontend module — you need to know exactly which Bootstrap version Odoo ships and which SCSS files are safe customization seams. This table is the cheat-sheet for v8 through v19.
SCSS file paths point to the canonical entry points inside Odoo's
addons/ tree. Override brand variables in
primary_variables.scss (v15+) or variables.scss /
bootstrap_overridden.scss (v11–v14). Never edit files inside
addons/web/static/lib/bootstrap/ directly —
those are vendored Bootstrap sources and will be overwritten on upgrade.
| Odoo version | Bootstrap | Key SCSS files | Breaking changes | Notes |
|---|---|---|---|---|
| 8.0 | 3.2.0 |
|
| Bootstrap 3.2.0 LESS source in addons/web/static/lib/bootstrap/less/. CSS is precompiled and shipped. Evidence: addons/web/static/lib/bootstrap/js/bootstrap.js:2 'Bootstrap v3.2.0'. |
| 9.0 | 3.3.5 |
|
| First Odoo version with a LESS variable layer downstream addons can override. 153 .less files in addons/. Evidence: addons/web/static/lib/bootstrap/less/theme.less:1 'Bootstrap v3.3.5'. |
| 10.0 | 3.3.5 |
|
| Still Bootstrap 3.3.5 + LESS. 204 .less files in addons/. Theme customization targets variables.less. Evidence: addons/web/static/lib/bootstrap/css/bootstrap.css:1 'Bootstrap v3.3.5'. Known limitation: 3 modules (l10n_fr_sale_closing, account_cash_basis_base_account, l10n_fr_pos_cert) retain __openerp__.py at v10 and are missed by ModernManifestFinder (see ADR-0005 known-miss). |
| 11.0 | 3.3.5 |
|
| Bootstrap 3.3.5 + LESS. No scss/ directory under addons/web/static/src/ — only less/. Evidence: addons/web/static/lib/bootstrap/css/bootstrap.css:2 'Bootstrap v3.3.5'; addons/web/static/lib/bootstrap/less/bootstrap.less:2 'Bootstrap v3.3.5'. Brand override: @odoo-brand-primary in addons/web/static/src/less/variables.less. |
| 12.0 | 4.1.3 |
|
| First version on Bootstrap 4 + SCSS. 308 .scss files in addons/. Evidence: addons/web/static/lib/bootstrap/css/bootstrap.css:1 'Bootstrap v4.1.3'. Override $primary, $body-bg etc. in bootstrap_overridden.scss. |
| 13.0 | 4.3.1 |
|
| 344 .scss files in addons/. Evidence: addons/web/static/lib/bootstrap/css/bootstrap.css 'Bootstrap v4.3.1'. Last release before website/portal stylesheets were heavily reorganized in v14. |
| 14.0 | 4.3.1 |
|
| 446 .scss files in addons/. Evidence: addons/web/static/lib/bootstrap/css/bootstrap.css 'Bootstrap v4.3.1'. Customizing frontend themes requires touching both website.scss and bootstrap_overridden.scss layers. |
| 15.0 | 4.3.1 |
|
| Evidence: addons/web/static/lib/bootstrap/js/index.js:4 'Bootstrap (v4.3.1)'; addons/web/static/lib/bootstrap/css/bootstrap.css:1 'Bootstrap v4.3.1'. OWL 1.4.11. Override $o-brand-primary in primary_variables.scss. |
| 16.0 | 5.1.3 |
|
| Evidence: addons/web/static/lib/bootstrap/js/dist/tab.js:2 'Bootstrap v5.1.3'. OWL 2.8.2. Override $o-brand-primary in primary_variables.scss. |
| 17.0 | 5.1.3 |
|
| Evidence: addons/web/static/lib/bootstrap/js/dist/collapse.js:2 'Bootstrap collapse.js v5.1.3'. For brand customization: override $o-brand-primary in primary_variables.scss for build-time defaults; use --bs-primary CSS variable for runtime/theme-toggle scenarios. |
| 18.0 | 5.3.3 |
|
| Evidence: addons/web/static/lib/bootstrap/dist/css/bootstrap.css:3 'Bootstrap v5.3.3'. 0 .less files confirmed. Bulk of v18 frontend churn is OWL component-level, not Bootstrap-level. |
| 19.0 | 5.3.3 |
|
| Evidence: addons/web/static/lib/bootstrap/dist/css/bootstrap.css:3 'Bootstrap v5.3.3'. Theming guidance: prefer runtime CSS custom properties (--bs-*, --o-*) when targeting a multi-theme deployment; reserve SCSS overrides for fixed brand defaults. |
How to use this table
- Picking a customization seam: override SCSS
variables in your own addon's stylesheet, prepended to the asset bundle. Do not patch
files inside
addons/web/static/lib/bootstrap/. - Upgrading a custom theme: any version row with a Bootstrap major bump (v11 → v12: BS3 LESS → BS4 SCSS; v15 → v16: BS4 → BS5) requires rewriting your styles. Minor bumps (e.g. v14 → v15, both BS4.3.1) are usually drop-in.
- v16+ CSS-variable theming: Bootstrap 5 (v16 ships
BS 5.1.3; v18/v19 ship BS 5.3.3) exposes CSS custom properties
(
--bs-primary). Runtime overrides win against compiled SCSS variables — verify both layers when debugging unexpected color values.
Curated by Viindoo frontend lead · generated · source: Manual curation against Odoo source tree — each version verified against addons/web/static/lib/bootstrap/ (bootstrap.css first comment or _variables.scss) and preprocessor file counts (*.less vs *.scss in addons/). See /tmp/osm-survey/v*-ground-truth.md S10 sections for evidence.