Skip to content

v5.0.0

Latest

Choose a tag to compare

@kdeldycke kdeldycke released this 09 Aug 20:41
Immutable release. Only release title and notes can be modified.

Note

5.0.0 is available on 馃悕 PyPI and 馃悪 GitHub.

  • Breaking: Drop support for Python 3.9 and 3.10. The floor is now Python 3.11.
  • Breaking: Remove jQuery, magnific-popup and mglass, and the image auto-zoom they powered.
  • Breaking: Only support native Pygments syntax highlighting. The legacy .codehilite class is no longer styled.
  • Breaking: Remove inlining and minification of JavaScript assets, and the unmaintained closure dependency they relied on.
  • Add 14 Pygments styles, including dracula, github-dark, gruvbox-dark and nord. Remove the stata one.
  • Wrap the header, navigation bar and footer of base.html in overridable header, nav and footer blocks, and give page.html a page_content block.
  • Support Pelican's own ANALYTICS setting, holding whatever markup an analytics provider hands you. GOOGLE_ANALYTICS still emits its gtag.js snippet.
  • Add a collapsible generation details block in the footer, listing the Pelican and Plumage versions. The latter is exposed as a new PLUMAGE_VERSION template variable.
  • Add a meta description, taken from the entry's Description: metadata or its summary, with SITESUBTITLE standing in site-wide.
  • Advertise translations to crawlers, with hreflang on the <head> links and the visible ones alike.
  • Show when an article was last modified, next to the date it was published.
  • Show a site's pages, or a short notice, on an index with no article to list.
  • Serve every third-party asset from the site rather than from a CDN, declared in plumage/package.json so Dependabot bumps them. A new sync-vendored-assets job refreshes the copies, which had been frozen wherever they were first written.
  • Require Pelican 4.11, and develop against 4.12. A 4.12 floor is uninstallable while pelican-myst-reader caps myst-parser below 5.0.0, holding docutils under the 0.22 that 4.12 needs.
  • Replace every ~= requirement with >=, so no dependency carries an upper bound any more.
  • Switch from Poetry to uv, and build with the uv_build backend. Dropping node_modules from the distribution shrinks the wheel from 17.4 MB to 0.4 MB.
  • Declare the test dependencies as a PEP 735 group, so neither plumage[test] nor plumage[djlint] is published to PyPI.
  • Declare the license as an SPDX expression, and ship the license file in the package.
  • Update the webassets pipeline's Node dependencies: Bootstrap to 5.3.8, PostCSS to 8.5.25, Autoprefixer to 10.5.4 and postcss-cli to 11.0.1. The PostCSS 8.5 series closes an XSS through an unescaped </style>.
  • Move analytics code just below the <head> element, and all other JavaScript to the bottom of the page.
  • Mark up dates with <time datetime> instead of <abbr title>. title still carries the timestamp, so the hover tooltip is unchanged.
  • Announce the current navigation entry with aria-current, in place of a visually-hidden label.
  • Follow the color scheme in the page surround, the footer, heading shadows and the avatar, instead of the light-mode values they hard-coded.
  • Fix syntax highlighting silently not applying to code blocks. The MyST reader's docutils renderer omits the .highlight container every Pygments stylesheet selects through, so highlighting no longer depends on whether a page happens to carry an intra-site link.
  • Fix the build crashing on an article with no category, which Pelican 4.12.0 made reachable by binding the name to None instead of leaving it out.
  • Fix every page of a multilingual site being labelled with DEFAULT_LANG. The lang attribute now sits in an html_lang block the content templates override.
  • Fix the navigation bar never highlighting the current category.
  • Fix the paginator emitting a whitespace-only rel attribute on pages carrying no link relation.
  • Fix the full-width layout: the main content now spans all 12 columns, and the block above it lines up with it instead of being capped at half width.
  • Fix the search box icon, left behind by the Font Awesome to Bootstrap Icons migration.
  • Fix the search reset button rendering as a blank disc under a dark color scheme.
  • Fix three declarations in code.scss naming CSS variables Bootstrap 5 moved behind a --bs- prefix: a code block's filename label, the line-number gutter border, and highlighted line-number backgrounds.
  • Fix the avatar's flip rendering flat. Its perspective was set to a bare 600, and a number with no unit is not a length.
  • Take the code block's line-number gutter background from whichever stylesheet CODE_STYLE selects, instead of a hard-coded Monokai color.
  • Stop badges extending .btn and .btn-light, which drew a border in a fixed light gray around every one of them.
  • Style the search reset button and the search progress bar through the --bs-btn-close-filter and --bs-progress-height custom properties Bootstrap 5.3.4 introduced.
  • Replace the deprecated text-muted and the hard-coded text-dark in the footer with color scheme aware utilities.
  • Add the missing alt text on the site thumbnail.
  • Ignore anything that is not a stylesheet when collecting ALL_CODE_STYLES.
  • Drop the stale Python 3.10 classifier, left over from the move to a 3.11 floor.
  • Remove the pelican-image-process external-images workaround, the never-read plumage/postcss.config.js, and the box-sizing: content-box !important override on code blocks.
  • Collapse the seven rules revealing a heading's anchor link into one, using :is(), and drop the !important they carried.
  • Add a test suite covering settings validation, the HTML transforms, the favicon assets and the rendered templates, across both of the MyST reader's renderers. Run it with uv run --group test -- pytest.
  • Run the test suite on Python 3.11 to 3.14 through a new tests.yaml workflow.
  • Document code highlighting, admonitions, the LAYOUT setting, and every block the theme exposes.
  • Document theme development, recommend Jampack for asset optimization, and rewrite the installation instructions around uv.
  • Manage the repository with repomatic, and run the theme's own CI jobs on ubuntu-24.04.
  • Pin every tool invoked from a workflow to an exact version, and declare the Node version every job running npm uses.
  • Give Dependabot a cooldown, and configure stylelint and djlint to report only findings that apply to the theme.
  • Generate the Pygments stylesheets through the library's own API, in a job split from CSS formatting.
  • Lint and autofix all stylesheets in a single stylelint call each, instead of one per file extension.
  • Stop spell-checking the vendored minified bundles.
  • Declare the PyYAML stubs alongside PyYAML itself, so type-checking the test suite's workflow parsing no longer fails on the import.

Full changelog: v4.0.0...v5.0.0