Changes
- Bootstrap 5 migration: Upgraded all templates, CSS, and JS from Bootstrap 4 to Bootstrap 5 (data-toggle → data-bs-toggle, data-dismiss → data-bs-dismiss, etc.)
- Dark/light mode overhaul: Replaced the old dark_mode_theme (separate Bootswatch theme) with a unified default_theme_mode setting ("light", "dark", or "auto") using Bootstrap 5's
data-bs-theme attribute — any theme now works in both light and dark - New Bootswatch themes: Added brite, morph, quartz, vapor, and zephyr
- Collectstatic fix: Resolved issues with .map files breaking collectstatic on certain storage backends (Fixes #651)
- Tooling migration: Replaced Poetry with uv for dependency management; replaced black with ruff
- Python/Django support: Dropped Python 3.8/3.9, added Python 3.13 and Django 5.1/5.2/6.0 support
- New setting: show_theme_chooser — shows a theme switcher dropdown in the top navbar
- UI fixes: Spacing, sizing, and layout improvements across admin templates
- Docs updated: All documentation updated for Bootstrap 5, uv, ruff, new themes, and new settings
- New locale: Added pt_BR (Brazilian Portuguese) translations
Breaking Changes
- Python 3.8 and 3.9 dropped — minimum is now Python 3.10
- dark_mode_theme deprecated — if you had dark_mode_theme set in JAZZMIN_UI_TWEAKS, it is now ignored (with a deprecation warning logged). Migrate to "default_theme_mode": "auto" for
equivalent behavior - Bootstrap 4 → 5 — if you have custom CSS/JS targeting Bootstrap 4 classes (e.g. data-toggle, btn-outline-default, ml-/mr-), you'll need to update to Bootstrap 5 equivalents
(data-bs-toggle, ms-/me-, etc.) - Poetry → uv — development setup now uses uv instead of poetry; poetry.lock removed, uv.lock added
Test plan
- Run make test to verify all tests pass
- Run make test_app and verify admin UI renders correctly
- Test light/dark mode switching with default_theme_mode: "auto"
- Verify collectstatic completes without errors
- Test with existing JAZZMIN_SETTINGS / JAZZMIN_UI_TWEAKS to confirm backward compatibility
- Verify dark_mode_theme deprecation warning appears if old setting is present