Skip to main content

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
  • addons/web/static/src/css/openerp.css
  • addons/web/static/lib/bootstrap/less/variables.less
  • addons/web/static/lib/bootstrap/less/bootstrap.less
  • LESS is the build tool — all customization entry points are .less files.
  • No standardized brand color overrides; customization requires forking openerp.css or overriding Bootstrap LESS variables.
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
  • addons/web/static/src/less/webclient.less
  • addons/web/static/src/less/variables.less
  • addons/web/static/lib/bootstrap/less/variables.less
  • Bootstrap bump 3.2.0 → 3.3.5 — incremental patches, no major API breakage.
  • openerp.css split into per-domain LESS stylesheets.
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
  • addons/web/static/src/less/webclient.less
  • addons/web/static/src/less/variables.less
  • addons/web/static/lib/bootstrap/less/variables.less
  • Stylesheet asset bundles introduced (web.assets_backend, web.assets_frontend).
  • Color/spacing variables consolidated into addons/web/static/src/less/variables.less.
  • openerp namespace replaced by odoo namespace — HTTP/addons/tools imports changed.
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
  • addons/web/static/src/less/webclient.less
  • addons/web/static/src/less/variables.less
  • addons/web/static/lib/bootstrap/less/bootstrap.less
  • Python 3 only (Python 2 dropped).
  • Bootstrap 3.3.5 + LESS retained — the LESS→SCSS migration happens at v12, NOT v11.
  • 228 .less files in addons/ (1 isolated .scss file from third-party summernote — not the main stack).
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
  • addons/web/static/src/scss/webclient.scss
  • addons/web/static/src/scss/variables.scss
  • addons/web/static/src/scss/bootstrap_overridden.scss
  • addons/web/static/lib/bootstrap/scss/_variables.scss
  • Major: LESS completely replaced by SCSS. Bootstrap 3 replaced by Bootstrap 4.1.3.
  • Grid switched from float-based to flexbox; .row/.col-* class behavior differs.
  • Glyphicons removed — Font Awesome icons used instead.
  • Many utility class names renamed (e.g. .pull-left → .float-left, .hidden-* → .d-*-none).
  • All v11 custom LESS themes must be rewritten as SCSS.
  • bootstrap_overridden.scss introduced as the canonical seam for Bootstrap variable overrides.
  • Quirk: 5 XML bundle entries still carry type='text/less' on .scss files (v12 source bug — ignored at runtime).
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
  • addons/web/static/src/scss/webclient.scss
  • addons/web/static/src/scss/variables.scss
  • addons/web/static/src/scss/bootstrap_overridden.scss
  • addons/web/static/lib/bootstrap/scss/_variables.scss
  • Bootstrap bump 4.1.3 → 4.3.1 — utility API expanded ($utilities-* maps), some spacer scales adjusted.
  • .badge-pill class behavior tightened; rounded-pill recommended.
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
  • addons/web/static/src/scss/webclient.scss
  • addons/web/static/src/scss/variables.scss
  • addons/web/static/src/scss/bootstrap_overridden.scss
  • addons/web_editor/static/src/scss/web_editor.common.scss
  • addons/website/static/src/scss/website.scss
  • Bootstrap 4.3.1 retained — no Bootstrap major change at v14.
  • Website/portal frontend SCSS refactored — website.scss becomes the primary frontend entry.
  • web_editor stylesheets split into common/backend/frontend bundles.
  • OWL 1.x introduced alongside legacy web.Widget.
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
  • addons/web/static/src/scss/primary_variables.scss
  • addons/web/static/src/scss/secondary_variables.scss
  • addons/web/static/src/scss/bootstrap_overridden.scss
  • addons/web/static/lib/bootstrap/scss/_variables.scss
  • Bootstrap 4.3.1 retained — Bootstrap 5 does NOT arrive until v16.
  • Variable layering split into primary_variables.scss (brand) and secondary_variables.scss (derived) — overrides must respect this ordering.
  • Assets dict in __manifest__.py replaces XML template asset bundle declarations.
  • 523 .scss files, 0 .less files (LESS fully gone by v15).
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
  • addons/web/static/src/scss/primary_variables.scss
  • addons/web/static/src/scss/secondary_variables.scss
  • addons/web/static/src/scss/bootstrap_overridden.scss
  • addons/web/static/lib/bootstrap/scss/_variables.scss
  • Major: Bootstrap 4.3.1 → 5.1.3. jQuery dropped as a Bootstrap dependency.
  • Internet Explorer support dropped.
  • RTL is now built-in via Bootstrap 5 logical properties (no separate RTL stylesheet).
  • Many components renamed: .form-row removed, .custom-select → .form-select, data-toggle → data-bs-toggle.
  • OWL 2 introduced — most legacy Widget-based templates migrated to OWL components.
  • 667 .scss files, 0 .less files.
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
  • addons/web/static/src/scss/primary_variables.scss
  • addons/web/static/src/scss/secondary_variables.scss
  • addons/web/static/src/scss/bootstrap_overridden.scss
  • addons/web/static/lib/bootstrap/scss/_variables.scss
  • Bootstrap 5.1.3 retained from v16 — no Bootstrap version bump at v17.
  • Partial dark-mode story added via data-bs-theme on select components.
  • Many color tokens migrated from SCSS variables to CSS custom properties (--bs-primary, --bs-body-bg, etc.).
  • 769 .scss files, 0 .less files.
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
  • addons/web/static/src/scss/primary_variables.scss
  • addons/web/static/src/scss/secondary_variables.scss
  • addons/web/static/src/scss/bootstrap_overridden.scss
  • addons/web/static/lib/bootstrap/scss/_variables.scss
  • addons/web/static/lib/bootstrap/scss/_variables-dark.scss
  • Bootstrap bump 5.1.3 → 5.3.3. Native color modes (light/dark) via data-bs-theme.
  • CSS custom properties ($variable-prefix: bs-) — deprecated in v5.2.0; $prefix is the new form.
  • border-radius-2xl CSS variable deprecated in v5.3.0.
  • <tree> → <list> view tag hard rename (ir.ui.view.type stores 'list', not 'tree').
  • 914 .scss files, 0 .less files.
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
  • addons/web/static/src/scss/primary_variables.scss
  • addons/web/static/src/scss/secondary_variables.scss
  • addons/web/static/src/scss/bootstrap_overridden.scss
  • addons/web/static/lib/bootstrap/scss/_variables.scss
  • addons/web/static/lib/bootstrap/scss/_variables-dark.scss
  • Bootstrap 5.3.3 retained from v18 — no Bootstrap version bump at v19.
  • ORM package split (odoo/orm/ with 23 files) — parser must use _resolve_core_paths for v19.
  • 1096 .scss files, 0 .less files.
  • CSS-custom-property-first theming approach increasingly favored over SCSS-variable overrides.
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.