What's Changed
- fix: Structure board update sometimes failed to add all interactive elements by @fsbraun in #8227
- chore: Prepare new dev branch by @fsbraun in #8223
- chore: Move from script tags containing dom elements to template tags by @fsbraun in #8233
- docs: Require American spelling in documentation by @shundread in #8207
- fix: Update migrations to respect the
--databaseoption by @fsbraun in #8222 - fix: Page settings raised an exception when
USE_I18N = Falseby @fsbraun in #8236 - fix: replace outdated usage of
page__node__pathwithpage__pathby @PeterW-LWL in #8238 - fix: 404 no raised in CMS view when no URLs match by @stefanw in #8240
- fix: Remove unused import by @dnlzrgz in #8241
- build(deps): bump tar-fs by @dependabot[bot] in #8244
- fix: broken links in CONTRIBUTING file by @dnlzrgz in #8245
- build(deps): bump django from 4.2.21 to 4.2.22 in /docs by @dependabot[bot] in #8250
- build(deps): bump requests from 2.32.3 to 2.32.4 in /docs by @dependabot[bot] in #8252
- chore: Make
djangocms-admin-styleoptional dependency by @fsbraun in #8251 - fix: Allow legacy PlaceholderField to be deconstructed by @stefanw in #8248
- fix: Migration error with cms.0027_title_placeholders_data_migration by @jmit-modern in #8249
- refactor: Replace inline-scripts and onclick handlers for better CSP conformance by @stefanw in #8246
- build(deps): bump urllib3 from 2.3.0 to 2.5.0 in /docs by @dependabot[bot] in #8260
- build(deps-dev): bump pbkdf2 from 3.1.2 to 3.1.3 by @dependabot[bot] in #8262
- fix: Apphook widget detection (#8263) by @fsbraun in #8264
- chore: Remove legacy publication code from extensions by @fsbraun in #8270
- fix: show_placeholder did not respect edit/preview mode and failed loudly by @fsbraun in #8272
- fix: Page 'str' return page title for all pages by @mhsiddiqui in #8280
- chore: Include package data in distr by @fsbraun in #8281
- fix: Allow lazy wizard initialization by @fsbraun in #8266
- chore: Introduce dynamic badges by @mrbazzan in #8282
- chore: Run code coverage upon merge of PR by @fsbraun in #8285
- fix: Allow clicks to propagate to plugins by @fsbraun in #8288
- chore: Remove djangocms-text-ckeditor from tests by @fsbraun in #8287
- fix: GrouperAdmin Search in content model by @mhsiddiqui in #8284
- docs: link pr template link to Discord channel by @wesleyboar in #8257
- fix: The headless template included inline CSS by @fsbraun in #8291
- build(deps): bump actions/first-interaction from 1 to 2 by @dependabot[bot] in #8295
- docs: Fix broken link in 01-install.rst by @macolo in #8297
- feat: Django 6 compatibility (July 2025) by @fsbraun in #8299
- feat: Help menu on CMS5 (#8300) by @florianschieder in #8301
- build(deps): bump tmp from 0.2.1 to 0.2.4 by @dependabot[bot] in #8304
- build(deps): bump starlette from 0.46.1 to 0.47.2 in /docs by @dependabot[bot] in #8305
- build(deps): bump actions/download-artifact from 4 to 5 by @dependabot[bot] in #8308
- build(deps): bump actions/checkout from 4 to 5 by @dependabot[bot] in #8307
- build(deps): bump actions/first-interaction from 2 to 3 by @dependabot[bot] in #8310
- build(deps): bump amannn/action-semantic-pull-request from 5.5.3 to 6.0.1 by @dependabot[bot] in #8309
- docs: Add documentation for toolbar get_object and set_object methods by @fsbraun with @Copilot in #8312
- build(deps-dev): bump cipher-base from 1.0.4 to 1.0.6 by @dependabot[bot] in #8316
- build(deps-dev): bump sha.js from 2.4.11 to 2.4.12 by @dependabot[bot] in #8315
- fix: Respect individual placeholder checks if they can be changed by @fsbraun in #8317
- perf: Optimize placeholder and plugin utilities by @fsbraun in #8319
- build(deps): bump amannn/action-semantic-pull-request from 6.0.1 to 6.1.1 by @dependabot[bot] in #8323
- fix: Cut children from inactive menu nodes when level is less or equal to 0 by @stefanw in #8322
- build(deps): bump actions/setup-python from 5 to 6 by @dependabot[bot] in #8329
- build(deps): bump actions/setup-node from 4 to 5 by @dependabot[bot] in #8332
- build(deps): bump actions/github-script from 7 to 8 by @dependabot[bot] in #8331
- build(deps): bump actions/stale from 9.1.0 to 10.0.0 by @dependabot[bot] in #8330
- fix: copy lang management command - include PageUrl by @vasekch in #7548
- fix: Migration 0033 failed when empty placeholder objects were not present in the db by @fsbraun in #8338
- build(deps): bump django from 4.2.22 to 4.2.24 in /docs by @dependabot[bot] in #8333
- build(deps): bump tar-fs from 3.0.9 to 3.1.1 by @dependabot[bot] in #8345
- fix: Wrong placholders rendered when using apphooks with own placeholder by @fsbraun in #8343
- build(deps): bump django from 4.2.24 to 4.2.25 in /docs by @dependabot[bot] in #8351
- build(deps): bump actions/stale from 10.0.0 to 10.1.0 by @dependabot[bot] in #8354
- fix: Searching pages for language-specific content failed due to wrong serach queryset by @fsbraun in #8355
- build(deps): bump github/codeql-action from 3 to 4 by @dependabot[bot] in #8359
- ci: Fix new contributor message by @marksweb in #8369
- build(deps): bump actions/setup-node from 5 to 6 by @dependabot[bot] in #8370
- chore: change python version by @vinitkumar in #8371
- build(deps): bump actions/upload-artifact from 4 to 5 by @dependabot[bot] in #8373
- build(deps): bump actions/download-artifact from 5 to 6 by @dependabot[bot] in #8372
- fix: avoid stringifying None-values in page attribute template tag by @wfehr in #8375
- fix: link in welcome.html for fellowship program by @fsbraun in #8365
- feat: optimize CI with conditional database testing and nightly runs by @vinitkumar in #8377
- fix: Copying x-language lead to unique constraint violation by @fsbraun in #8366
- fix: Fix default value for edit_fields parameter to avoid AttributeError by @fsbraun in #8379
- build(deps): bump starlette from 0.47.2 to 0.49.1 in /docs by @dependabot[bot] in #8376
- fix: Ensure edit endpoint language selection when admin is not using i18n_patterns by @fsbraun in #8367
- build(deps): bump django from 4.2.25 to 4.2.26 in /docs by @dependabot[bot] in #8389
- fix: Update toolbar URL to use language context by @fsbraun in #8394
- chore: Upgrade JS build pipeline by @fsbraun in #8393
- feat: Implement new Django CMS design language for Django CMS 5.1 by @fsbraun in #8320
- fix: copying failed if a target placeholders was missing by @pietzschke in #8399
- build(deps-dev): bump js-yaml from 3.14.1 to 3.14.2 by @dependabot[bot] in #8400
- fix: Fix ApphookReloadMiddleware not handling new language variants #2 by @pietzschke in #8401
- feat: Refactor site handling, and allow single-instance multi-site configurations by @stefanw in #8303
- fix: Save fallback for includes when scanning for placeholders by @fsbraun in #8405
- build(deps): bump actions/checkout from 5 to 6 by @dependabot[bot] in #8409
- fix: Allow frontend-editable models to omit get_template method by @fsbraun in #8406
- feat: Let the "eye" icon in the page tree directly go to edit endpoints for editable content by @fsbraun in #8414
- feat: Allow plugins to restrict themselves to specific models by @fsbraun in #8395
- build(deps): bump django from 4.2.26 to 4.2.27 in /docs by @dependabot[bot] in #8421
- fix: clear apphook fields when copying page trees by @Vincent-Ngobeh in #8418
- fix: gracefully handle unresolvable extends variables in placeholder scanning by @Vincent-Ngobeh in #8420
- build(deps): bump urllib3 from 2.5.0 to 2.6.0 in /docs by @dependabot[bot] in #8422
- fix: Potential fix for code scanning alert no. 1231: Wrong name for an argument in a call by @fsbraun in #8423
- chore: Replace Django 6.0a1 with 6.0 in test requirements by @vinitkumar in #8424
- build(deps): bump actions/stale from 10.1.0 to 10.1.1 by @dependabot[bot] in #8425
- chore: Update copyright notice by @fsbraun in #8417
- feat: Allow page permission change from advanced settings by @fsbraun in #8387
- build(deps): bump actions/cache from 4 to 5 by @dependabot[bot] in #8428
- build(deps): bump actions/download-artifact from 6 to 7 by @dependabot[bot] in #8429
- build(deps): bump actions/upload-artifact from 5 to 6 by @dependabot[bot] in #8430
- fix: Improved UX for external placeholders (e.g., static aliases) by @fsbraun in #8416
- docs: Add note on system attribute in CMSPluginBase by @mrbazzan in #8368
- fix: Ignore plugins placeholder conf settings nor non-root plugins. by @fsbraun in #8433
- fix: Add
default_auto_fieldto cms/apps.py (#8254) by @fsbraun in #8258 - build(deps): bump urllib3 from 2.6.0 to 2.6.3 in /docs by @dependabot[bot] in #8436
- feat: Add icon for redirected pages in page tree by @fsbraun in #8437
- ci: Skip live PyPI publish for tags containing "dev" by @fsbraun with @Copilot in #8439
- fix: Use PageContent.template_choices attribute for template choices instead of settings by @fsbraun in #8441
- feat: Preserve GET params when switching to preview or edit mode by @fsbraun in #8444
- chore: Add release notes of minor versions to main branch by @fsbraun in #8448
- docs: Update logo by @fsbraun in #8450
- fix: Improve anti-aliasing of django CMS logo png by @fsbraun in #8452
- docs: Update release notes for 5.1 by @fsbraun in #8454
- fix: resolve empty page_title in frontend edit mode for apphooks by @woolfie1101 in #8449
- docs: Add more type hints and tidy up docstrings in plugin_pool.py by @jasperbok in #8445
- fix: Make Placeholder.add_plugin() set plugin.instance to self (#8442) by @jasperbok in #8447
- build(deps): bump lodash from 4.17.21 to 4.17.23 by @dependabot[bot] in #8457
- build(deps): bump lodash-es from 4.17.21 to 4.17.23 by @dependabot[bot] in #8458
- docs: Rework doc's starting page, and dedicate a full page on explaining the philosophy by @fsbraun in #8453
- fix: Revert "Add
default_auto_fieldto cms/apps.py (#8254)" by @fsbraun in #8461 - feat: Make page content placeholders available to apphook root pages by @fsbraun in #8456
- feat: Avoid database access when registering apphook urls to make them async-safe by @fsbraun in #8460
- build(deps): bump wheel from 0.45.1 to 0.46.2 in /docs by @dependabot[bot] in #8459
- fix: Remove async method from user middleware to avoid asgi freeze when accessing session object by @fsbraun in #8464
- fix: Create page wizard not available on empty install by @fsbraun in #8463
- build(deps): bump django from 4.2.27 to 4.2.28 in /docs by @dependabot[bot] in #8467
- feat: introduce contracts for django CMS Extensions by @fsbraun in #8455
- fix: get_permissions failed for missing global permissions by @fsbraun in #8468
- fix: Align detection of frontend-editable models by @fsbraun in #8472
- fix: Grouper admin kept read-only fields as prepopulated fields by @fsbraun in #8471
- build(deps-dev): bump webpack from 5.102.1 to 5.105.0 by @dependabot[bot] in #8476
- fix: Language changer for edit and preview mode if no get_absolute_url is available by @fsbraun in #8474
- feat: Add button for django CMS chat by @fsbraun in #8478
- chore: Merge back release 5.1.0a1 by @fsbraun in #8481
- docs: Update screenshots for new UI design by @fsbraun in #8482
- chore: Squash early migrations by @fsbraun in #8484
- build(deps-dev): bump basic-ftp from 5.0.5 to 5.2.0 by @dependabot[bot] in #8498
- docs: Remove reference to page_moved signal which is never called by @fsbraun in #8495
- build(deps): bump actions/stale from 10.1.1 to 10.2.0 by @dependabot[bot] in #8494
- fix: Keep GET params when toggling structure mode (#8497) by @fsbraun in #8501
- build(deps): bump actions/download-artifact from 7 to 8 by @dependabot[bot] in #8504
- build(deps): bump actions/upload-artifact from 6 to 7 by @dependabot[bot] in #8505
- fix: slug and overwrite_url caching failed in read-only change_views by @fsbraun in #8507
- build(deps): bump minimatch by @dependabot[bot] in #8503
- build: bump minimum Django version to 4.2.26 (CVE-2025-64459) by @maycuatroi1 in #8502
- build(deps): bump django from 4.2.28 to 4.2.29 in /docs by @dependabot[bot] in #8514
- build(deps-dev): bump svgo from 4.0.0 to 4.0.1 by @dependabot[bot] in #8515
- build(deps): bump immutable by @dependabot[bot] in #8519
- fix: make django CMS logo on welcome page responsive to dark mode by @entuziaz in #8513
- docs: Add example for SEO using hreflang by @fsbraun in #8527
- fix: Chunk size was missing for plugin queryset.iterator() by @fsbraun in #8532
- build(deps-dev): bump flatted from 3.3.3 to 3.4.2 by @dependabot[bot] in #8535
- fix: Proxy models of
CMSPluginwere not downcasted correctly by @fsbraun in #8539 - fix: Multi-site permissions were incomplete for wizards and autocomplete by @EaEa0001 in #8537
- build(deps): bump requests from 2.32.5 to 2.33.0 in /docs by @dependabot[bot] in #8545
- build(deps): bump picomatch from 2.3.1 to 2.3.2 by @dependabot[bot] in #8543
- fix:
delete_orphaned_pluginscould corrupt the plugin tree order by @entuziaz in #8528 - build(deps): bump black from 26.1.0 to 26.3.1 in /docs by @dependabot[bot] in #8524
- build(deps): bump serialize-javascript and terser-webpack-plugin by @dependabot[bot] in #8552
- fix: Inline editing could circumvent permissions by @fsbraun in #8542
- build(deps): bump codecov/codecov-action from 5 to 6 by @dependabot[bot] in #8554
- build(deps): bump pygments from 2.19.2 to 2.20.0 in /docs by @dependabot[bot] in #8555
- fix: Updating plugins could lead to minified toolbar by @fsbraun in #8550
- feat: Provide UI for plugins acting as slots by @fsbraun in #8540
- build(deps): bump lodash-es from 4.17.23 to 4.18.1 by @dependabot[bot] in #8560
- fix: Fallback languages rendered empty (when not redirecting) by @fsbraun in #8557
- build(deps): bump lodash from 4.17.23 to 4.18.1 by @dependabot[bot] in #8561
- fix: DomDiff re-executed existing scripts or link tags by @fsbraun in #8523
- build(deps): bump django from 4.2.29 to 4.2.30 in /docs by @dependabot[bot] in #8565
- build(deps-dev): bump basic-ftp from 5.2.0 to 5.2.1 by @dependabot[bot] in #8566
- fix: Text not fully centered in toobar buttons by @fsbraun in #8563
- build(deps-dev): bump basic-ftp from 5.2.1 to 5.2.2 by @dependabot[bot] in #8571
- fix: Add
page_titleparameter tocms.api.create_pagefunction by @PeterW-LWL in #8567 - fix: XSS vulnerability in validator error message by @fsbraun in #8576
- build(deps): bump actions/github-script from 8 to 9 by @dependabot[bot] in #8577
- fix: Latent XSS vulnerability in the tooltip by @fsbraun in #8568
- build(deps): bump follow-redirects from 1.15.11 to 1.16.0 by @dependabot[bot] in #8583
- fix: Deleting a non-local plugin did not refresh the screen by @fsbraun in #8582
- chore: Remove legacy select2 dependency by @fsbraun in #8573
- fix: Update Apphook Widget template for modern admin by @fsbraun in #8585
- fix: Remove optional dependency on deprecated djangocms-admin-style by @fsbraun in #8548
- fix: Outdated code in UserSelectAdminWidget by @fsbraun in #8575
- fix: FrontendEditableMixin failed to provide the obj to the Django permission backend by @fsbraun in #8584
- chore: Missing empty options in PageSmartLinkWidger by @fsbraun in #8589
- chore: Update release script by @fsbraun in #8593
- fix: Convert value to string in ApplicationConfigSelect. by @zbohm in #8594
- docs: Improved placeholder documentation by @fsbraun in #8596
- fix: Refactor content object caching in GrouperAdmin by @fsbraun in #8588
- fix: Migrations with a custom user model caused a Programming error by @fsbraun in #8606
- fix: deadlock could happen on moving large pagesubtrees by @fsbraun in #8529
- fix: Compatibility shim for Page.objects.order_by used non-existing fields by @fsbraun in #8597
- build(deps-dev): bump uuid from 13.0.0 to 14.0.0 by @dependabot[bot] in #8613
- fix: Do not lock whole tree when editing a page by @fsbraun in #8612
- build(deps): bump postcss from 8.5.6 to 8.5.13 by @dependabot[bot] in #8614
- docs: Improve installation guides by @fsbraun in #8517
- build(deps): bump ip-address from 10.1.0 to 10.2.0 by @dependabot[bot] in #8618
- feat: Extend CMSApp class to provide root template for apphook by @fsbraun in #8619
- build(deps-dev): bump fast-uri from 3.1.0 to 3.1.2 by @dependabot[bot] in #8621
- build(deps-dev): bump @babel/plugin-transform-modules-systemjs from 7.29.0 to 7.29.4 by @dependabot[bot] in #8623
- build(deps): bump urllib3 from 2.6.3 to 2.7.0 in /docs by @dependabot[bot] in #8626
- fix: Compatibility with formtools 2.6+ caching by @fsbraun in #8629
- fix: Missing redirect_url in CMSNavigationNode.attr (#8625) by @fsbraun in #8627
- chore: Update JS dependencies by @fsbraun in #8620
- build(deps-dev): bump @tootallnate/once from 2.0.0 to 2.0.1 by @dependabot[bot] in #8631
- build(deps): bump idna from 3.11 to 3.15 in /docs by @dependabot[bot] in #8630
- build(deps): bump actions/stale from 10.2.0 to 10.3.0 by @dependabot[bot] in #8633
- build(deps): bump tmp from 0.2.5 to 0.2.7 by @dependabot[bot] in #8638
- fix: GrouperModelAdmin shadowed prepopulated_fields class attribute by @fsbraun in #8636
- fix: Single phased CMSAppExtension could extensions with contracts by @fsbraun in #8632
- chore: Add Django 6.1 to test matrix, remove Django 5.0, 5.1 by @fsbraun in #8635
- build(deps): bump starlette from 0.52.1 to 1.0.1 in /docs by @dependabot[bot] in #8648
- test: placeholder source availability for CMS_PLACEHOLDER_CONFIG was not covered by tests by @fsbraun in #8653
- fix: Slugs of published pages could be changed by @fsbraun in #8640
- fix: Honour plugin-declared Vary headers in the page cache key by @fsbraun in #8646
- fix: Toolbar login followed an unverified redirect after authentication by @fsbraun in #8642
- fix: Enforce authorization on structure, move and clipboard endpoints by @fsbraun in #8644
- build(deps): bump codecov/codecov-action from 6 to 7 by @dependabot[bot] in #8659
- fix: Copying from the clipboard into a different language sometimes failed by @fsbraun in #8664
- docs: First stab at a simplified tutorial by @fsbraun in #8641
- fix: Corrupted plugin positions are now automatically healed by @fsbraun in #8667
- fix: Minor fixes of long-standing bugs by @fsbraun in #8666
- fix: Some page permissions created invalid filter strings by @fsbraun in #8662
- feat: add configurable menu cache backend (fixes #4440) by @JaeHyuckSa in #8475
- feat: Simplify project creation with interactive djangocms command and options by @fsbraun in #8671
- feat: Propagate information why fields are readonly to user by @fsbraun in #8673
- fix: get_child_classes was always cached by @fsbraun in #8677
- feat: Accessibility update for wizards by @fsbraun in #8674
- build(deps-dev): bump @babel/core from 7.29.0 to 7.29.6 by @dependabot[bot] in #8682
- docs: Improve explanation section by @fsbraun in #8637
- build(deps): bump starlette from 1.2.1 to 1.3.1 in /docs by @dependabot[bot] in #8681
- build(deps): bump actions/checkout from 6 to 7 by @dependabot[bot] in #8688
- chore: Remove CMS_CONFIRM_VERSION4 setting for CMS 5.1 by @fsbraun in #8686
- feat: Allow wildcards (*, ?, []) for plugin restrictions, and "auto"
child_classesdetection by @fsbraun in #8675 - chore: Fix signatures for clarity by @fsbraun in #8683
- fix: Language selector triggered wrong toolbar by @fsbraun in #8687
- feat: Allow toolbar ajax items to return a data bridge structure by @fsbraun in #8694
- fix: cascade delete plugins of detached placeholders by @hey-granth in #8622
- fix: Missing authorization in
render_object_structuredisclosed non-PageContent placeholder structure by @fsbraun in #8692 - build(deps): bump actions/cache from 5 to 6 by @dependabot[bot] in #8705
- chore: Update test and compatibility setup for django >= 5.2 by @fsbraun in #8708
- fix: Page title leaked unescaped into rendering error message, clipboard could be cleared by get request by @fsbraun in #8699
- fix: Subpage wizard failed by @fsbraun in #8698
- fix: get_preview_url failed on frontend-editable objects without language attribute by @fsbraun in #8691
- fix: Replace left-over inline JS/CSS that might be blocked by CSP by @fsbraun in #8690
- feat: Add extra key to get/set_page_url_cache by @jrief in #8696
- feat: Clearer page permissions admin by @fsbraun in #8672
- fix: Additional permissions in advance page change form were invisible by @fsbraun in #8685
- fix: Harden page duplication, group permissions and URL validator by @fsbraun in #8704
- fix: GrouperAdmin only showed current content versions by @fsbraun in #8700
- feat: json config for djangocms command by @fsbraun in #8717
- fix: check and delete-orphaned-plugins had an n+1 issue by @fsbraun in #8701
- fix: Page tree had a n+1 regression fetching urls by @fsbraun in #8716
- feat: Add allowed_slots property to plugins by @fsbraun in #8709
- feat: Support django 6.1+ breadcrumb styles by @fsbraun in #8689
- chore: Prepare release 5.1 by @fsbraun in #8719
- feat: Add list_editable support to GrouperAdmin by @fsbraun in #8722
- fix: Placeholder operation signals lacked plugin ordering context by @fsbraun in #8723
New Contributors
- @dnlzrgz made their first contribution in #8241
- @jmit-modern made their first contribution in #8249
- @mhsiddiqui made their first contribution in #8280
- @wesleyboar made their first contribution in #8257
- @florianschieder made their first contribution in #8301
- @fsbraun with @Copilot made their first contribution in #8312
- @vasekch made their first contribution in #7548
- @pietzschke made their first contribution in #8399
- @Vincent-Ngobeh made their first contribution in #8418
- @woolfie1101 made their first contribution in #8449
- @maycuatroi1 made their first contribution in #8502
- @entuziaz made their first contribution in #8513
- @EaEa0001 made their first contribution in #8537
- @zbohm made their first contribution in #8594
- @hey-granth made their first contribution in #8622
Full Changelog: 5.0.0...5.1.0