squidfunk/mkdocs-material
55.5
Weak · 18 September 2026
33.5k
lines of production code
Python
with TypeScript
1
measurement over time
What this system is
This system is a comprehensive documentation theme and plugin ecosystem for MkDocs, designed to enhance static site generation with advanced content organization and user experience features. It provides a suite of plugins for managing blogs, tags, social media cards, and offline search, alongside tools for image optimization and privacy-focused asset handling. The platform also supports multi-project builds, automated translation management, and a modern, modular JavaScript architecture for interactive client-side components.
How it got here
2016–2021 — Modernization and build overhaul
28 changes.
The project underwent a significant architectural shift by removing legacy Materialize-based templates and monolithic scripts in favor of a modular, TypeScript-driven structure. This period focused on rebuilding the asset pipeline using esbuild and RxJS, while introducing new features like an icon search component and sponsorship integration.
2022–2023 — Plugin ecosystem expansion and UI modernization
49 changes.
This period focused on significantly expanding the plugin ecosystem with the introduction of dedicated Blog, Tags, Offline, and Privacy plugins, alongside major refactors to the Search and Social plugins for improved stability and configurability. The project simultaneously modernized its frontend architecture by restructuring templates and stylesheets into modular components and rewriting JavaScript logic using RxJS observables to enhance maintainability and user experience.
2025 — Plugin ecosystem expansion and refactoring
7 changes.
This period focused on significantly expanding the plugin ecosystem with new tools for metadata, hierarchical tags, multi-project builds, and image optimization. The work involved major architectural refactoring of the tags plugin to support structured listings and persistent mappings, alongside the introduction of the Projects and Typeset plugins. Maintenance efforts included replacing legacy SCSS styles with TypeScript DOM type definitions.
Features
Added Cairo library lookup debug scripts and MkDocs documentation links
This change introduces three new Python scripts (for Linux, macOS, and Windows) under the includes/debug directory that diagnose how the system locates the Cairo shared library, printing the resolved path and the list of files the FFI layer will attempt to load. It also adds an includes/mkdocs.md file containing reference links to various MkDocs configuration options and documentation pages.
includes · high confidence
Added Google Analytics 4 integration with consent support and event tracking
The theme now includes a new analytics integration system that supports Google Analytics 4. Users can configure their GA4 property ID via \config.extra.analytics.property\. The integration automatically tracks page views, search queries, and user feedback interactions. It also respects user consent settings, ensuring analytics are only initialized if consent is granted when \config.extra.consent\ is enabled.
src/overrides/assets/javascripts, src/templates/partials/integrations · high confidence
Added TypeScript declarations for global runtime observables and storage helpers
A new type definition file (typings/\/index.d.ts) has been added to provide TypeScript support for global runtime variables and utility functions. This includes declarations for RxJS observables and subjects that expose browser state (such as document, location, keyboard, viewport, and screen status) as well as application state (alerts, progress, and components). It also defines global helper functions for computing hashes and interacting with local storage (\\_md\get, \\_md\_set), ensuring these runtime APIs are properly typed for the application bundle.
typings/\ · high confidence_
Added TypeScript type definitions for Lunr search library
Added a new TypeScript declaration file (index.d.ts) for the Lunr search library, exposing types for the index structure, query builder, tokenizer, and multi-language support. This enables better type safety and IntelliSense for developers using Lunr within the project.
typings/lunr · high confidence
Added TypeScript typings for Google Fonts
The project now includes TypeScript declarations for the 'google-fonts-complete' module, allowing TypeScript consumers to correctly import and use the Google Fonts data. This replaces the previous article typography SCSS styles with a type definition that exposes the fonts as a record of strings.
typings/google-fonts · high confidence
Added experimental Group plugin for conditional plugin loading
An experimental Group plugin is now available in both the material and src plugin directories. This new capability allows users to define a group of plugins that are loaded conditionally based on a configuration flag, simplifying complex plugin setups. The plugin handles the initialization and ordering of the grouped plugins within the MkDocs lifecycle, ensuring they integrate correctly with the existing plugin system.
material/plugins/group, src/plugins/group · high confidence
Added icon category filtering to search
The icon search component now supports filtering results by category. Users can select between viewing all items, icons only, or emojis only via a new selection control, which updates the search results in real time.
src/overrides/assets/javascripts/components/iconsearch/\ · high confidence_
Added project configuration and linting files
Added configuration files for browser compatibility (.browserslistrc), Docker builds (.dockerignore), editor settings (.editorconfig), and code linting (.eslintignore, .eslintrc, .stylelintignore, .stylelintrc), along with .gitattributes to enforce Unix line endings.
(repo-wide) · high confidence
Automated translation status and documentation shortcodes
The documentation build process now includes a new hook that automatically generates a language overview on the 'Changing the Language' setup page, displaying flags, names, and links to file issues for missing translations. Additionally, a new Python hook introduces Markdown shortcodes (e.g., \\<!-- md:version --\>\, \\<!-- md:plugin --\>\) that render as styled badges for versions, plugins, features, and other documentation elements, replacing manual HTML or text representations.
material/overrides/hooks · high confidence
Introduction of the Blog plugin
The blog plugin is now available as a built-in feature, allowing users to create and manage blog posts within their MkDocs documentation. This addition introduces configuration options for post directories, date formatting, pagination, categories, and author profiles, along with automatic generation of archive and category views. Users can now enable blogging capabilities by configuring the plugin in their mkdocs.yml file.
src/plugins/blog · high confidence
Introduction of the Blog plugin for MkDocs
The blog plugin is now available as a first-class feature, allowing users to create and manage blog-style documentation sites. This addition introduces support for post metadata (including dates and authors), automatic pagination, category and archive views, and author profiles. The plugin handles URL generation, navigation integration, and draft management, providing a structured way to present time-sensitive content alongside standard documentation pages.
material/plugins/blog · high confidence
Introduction of the Tags plugin for organizing content
A new Tags plugin has been added to the product, allowing users to collect tags from page front matter and automatically generate site-wide tag indexes, content listings, and JSON exports. The plugin provides extensive configuration options for filtering, sorting, slug generation, and hierarchical tag structures, and includes support for shadow tags during local development to improve the authoring experience.
src/plugins/tags · high confidence
New JavaScript template components for UI elements
The project now includes a new set of JavaScript template functions in \src/templates/assets/javascripts/templates\ to render specific UI components. This includes \renderSearchResultItem\ for displaying search results with tags and missing terms, \renderVersionSelector\ for managing version selection with support for aliases and hidden versions, \renderClipboardButton\ for code copy functionality, \renderAnnotation\ for inline annotations, \renderSourceFacts\ for repository statistics, \renderTabbedControl\ for tab navigation, \renderTable\ for mobile-friendly table scrolling, and \renderTooltip\ variants for inline and dialog tooltips.
src/templates/assets/javascripts/templates · high confidence
New JavaScript utility modules and polyfills added
This change introduces several new JavaScript source files to the project's template assets. It adds a polyfill module providing \Object.entries\, \Object.values\, \Element.scrollTo\, and \Element.replaceWith\ for older browsers. It also introduces a utility library featuring a JSX-like \h\ factory function for creating HTML elements, a \round\ function for formatting repository statistics (e.g., stars/forks), and an index for integration exports (alternate, clipboard, instant, search, sitemap, version). Additionally, a dedicated search worker entry point is added to import the search integration worker.
(repo-wide) · high confidence
New Markdown extensions for emoji and link previews
Added new Markdown extensions in the material/extensions module: an emoji extension that integrates with pymdownx to support custom icons and Twemoji, and a preview extension that automatically adds data-preview attributes to internal links to enable instant hover previews in the documentation site.
material/extensions · high confidence
New Optimize plugin for automated image compression
The new Optimize plugin automatically compresses PNG and JPEG images during the build process to reduce site size. It supports configurable quality settings, caching to speed up incremental builds, and concurrent processing for faster builds. Users can enable or disable specific optimizations, define inclusion/exclusion patterns, and view a summary of space savings in the build output.
material/plugins/optimize · high confidence
New Optimize plugin for image compression
The new Optimize plugin automatically compresses PNG and JPEG images during the build process to reduce site size. It supports configurable concurrency, caching of optimized assets, and fine-grained control over optimization quality and file inclusion/exclusion patterns, providing users with a summary of space savings after each build.
src/plugins/optimize · high confidence
New Privacy plugin for localizing external assets
A new Privacy plugin has been added to the project, designed to improve build privacy by downloading and localizing external CSS, JavaScript, and image assets. The plugin allows users to configure concurrency, caching, and specific inclusion/exclusion rules for external resources, while also supporting features like preload hints and handling of protocol-relative URLs to ensure external dependencies are resolved locally during the build process.
src/plugins/privacy · high confidence
New Projects and Typeset plugins for multi-project builds and headline typesetting
This release introduces two new MkDocs plugins. The Projects plugin enables building multiple MkDocs sites from a single root configuration, handling dependency resolution, parallel builds via a process pool, and live-reload watching for nested projects. It also supports hoisting theme media files to the top-level project and resolving inter-project links. The Typeset plugin automatically extracts and assigns page titles from the first H1 headline when not explicitly set in configuration or metadata, and cleans up anchor links within headlines to ensure valid HTML5 output.
(repo-wide) · high confidence
New SCSS utilities for responsive breakpoints and unit conversion
Added new utility modules to the stylesheet library: \\_break.scss\ introduces device-specific responsive breakpoints (mobile, tablet, screen) with mixins for width ranges, orientation, and aspect ratio, while \\_convert.scss\ provides helper functions to convert HEX colors to HSL, handle RGBA transparency, and convert pixel font sizes to em or rem units.
src/templates/assets/stylesheets/utilities · high confidence
New clipboard integration with configurable copy text
A new clipboard integration module has been added to the JavaScript assets, leveraging ClipboardJS to handle copy actions. This change introduces support for specifying custom text to be copied via the \data-clipboard-text\ attribute on code blocks, while falling back to the element's inner text if not specified. The integration also ensures that trailing whitespace is trimmed from copied content and provides user feedback through a configurable alert subject upon successful copy.
src/templates/assets/javascripts/integrations/clipboard · high confidence
New component stylesheets for core UI elements
Added SCSS files for the author avatar, announcement banner, base layout grid, clipboard and code block controls, consent dialog, content area, feedback widget, footer, form inputs, header, metadata, navigation, pagination, and breadcrumbs. These styles define the visual appearance, spacing, and interactive states (hover, focus) for these components, including print-specific rules to hide non-essential elements.
src/templates/assets/stylesheets/main/components · high confidence
New default landing page and announcement bar overrides
The distribution now includes new override templates for the home page and main layout. The home page (home.html) renders a dedicated hero section with a title, description, and call-to-action buttons for the quick start and Insiders, while suppressing sidebars and the footer. The main layout (main.html) injects custom CSS and JavaScript assets and displays an announcement bar directing users to follow the project on Mastodon and Twitter.
material/overrides · high confidence
New documentation hooks for badges and translation management
Added new hook files in \src/overrides/hooks\ to enhance documentation rendering. \shortcodes.py\ introduces a system for processing custom markdown comments (e.g., \\<!-- md:version --\>\, \\<!-- md:sponsors --\>\) into styled badges for versions, features, plugins, and sponsors. \translations.py\ adds a hook that scans language template files to detect missing translations and dynamically renders a language overview with links to contribute, while \translations.html\ provides the Jinja2 macros to display these languages with their respective flags.
src/overrides/hooks · high confidence
New icon search query component with analytics tracking
A new \mountIconSearchQuery\ component has been added to handle icon search input interactions. It tracks query values and focus state, and automatically sends a pageview analytics event to Google Analytics when the user blurs from the search field with a non-empty query.
src/overrides/assets/javascripts/components/iconsearch/query · high confidence
New icon search result rendering component
Added a new TypeScript React component (index.tsx) in the iconsearch templates directory that defines the structure for rendering individual icon search results. This component includes an Icon interface, a helper function to highlight matching text in search queries using fuzzaldrin-plus, and a renderIconSearchResult function that generates list items displaying the icon image and a copyable shortcode button.
src/overrides/assets/javascripts/templates/iconsearch · high confidence
New info plugin for bug report reproduction
A new info plugin has been added to help users create reproducible bug reports. It automatically generates a self-contained ZIP archive of the project files, validates that all paths are within the current working directory, checks for the latest version, and excludes common non-essential files like cache directories and IDE settings. The plugin is disabled by default during local serving to avoid interference but can be enabled via configuration.
material/plugins/info · high confidence
New landing page template and icon search component
The overrides now include a dedicated \home.html\ template that renders a custom landing page with a hero section, specific styling to hide standard navigation elements, and a link to the Insiders page. Additionally, a new \iconsearch\ JavaScript component has been added to provide icon search functionality, and the main template has been updated to include custom CSS and JavaScript assets along with an announcement bar linking to Mastodon and Twitter.
src/overrides · high confidence
New meta and tag plugins with file filtering utilities
This change introduces the Meta plugin, which allows authors to define default metadata in \.meta.yml\ files that are automatically merged into pages, with page-level metadata taking precedence. It also adds a Tag plugin featuring a renderer and default templates for displaying tags and listings, supporting custom styling via \config.extra.tags\. Additionally, new utility modules provide a configurable \Filter\ and \FileFilter\ class that apply include/exclude glob patterns to values and MkDocs files respectively.
(repo-wide) · high confidence
New sponsorship component with live data integration
A new sponsorship component has been added to the JavaScript components, introducing a \mountSponsorship\ function that fetches sponsorship data from an external API endpoint. This component renders the count of sponsors, the total monthly contribution amount, and a list of public sponsors, while also handling the display of private sponsors. The implementation utilizes RxJS for handling asynchronous data streams and integrates with existing template functions for rendering sponsor details.
src/overrides/assets/javascripts/components/sponsorship · high confidence
New sponsorship rendering components for public and private sponsors
The sponsorship template area now includes a new index.tsx file that exports functions to render public sponsor items (displaying a user's image and link) and private sponsor items (showing a count of hidden sponsors). This change introduces the UI logic for displaying sponsor information in the documentation site, replacing or augmenting previous inline implementations with dedicated rendering functions.
src/overrides/assets/javascripts/templates/sponsorship · high confidence
Offline plugin now supports offline search and iframe polyfills
The offline plugin has been refactored to enable search functionality when viewing the site without a server by inlining the search index into a JavaScript file, and it automatically injects the iframe-worker shim into polyfills to ensure compatibility. Additionally, the plugin now disables directory URLs by default to ensure correct link resolution when browsing the built site directly from the file system.
material/plugins/offline, src/plugins/offline · high confidence
Tags plugin refactored to support structured listings and hierarchical tags
The tags plugin has been restructured to introduce a dedicated internal architecture for managing tag hierarchies and generating tag listings. This change adds a new \structure\ module containing classes for \Tag\, \Mapping\, and \Listing\, enabling features such as hierarchical tag separation (e.g., \foo/bar\), scoped listings that filter pages by subsection, and the ability to include tag listings directly in pages via the \\<!-- material/tags --\>\ directive. The refactoring also introduces a \MappingStorage\ component to serialize and share tag mappings across multiple MkDocs projects via JSON, and updates the table of contents integration to anchor links for tags within listings.
material/plugins/tags/structure · high confidence
Removals
Removal of legacy application.js logic
The monolithic \src/assets/javascripts/application.js\ file has been deleted, removing the legacy application logic that previously handled drawer alignment, search index initialization, and various DOM manipulations directly in a single script. This change eliminates the bundled code responsible for attaching FastClick, managing scroll-based drawer positioning, and initializing the lunr search index within this specific file, indicating a shift in how these features are now implemented or loaded.
src/assets/javascripts · high confidence
Removal of legacy article styling modules
The legacy SCSS modules for article appearance and layout (\_appearance.scss and \_layout.scss) have been removed from the codebase. This deletion eliminates the previous styling rules for article content, including specific color schemes for headlines and links, table border-radius and shadow effects, footer styling, and layout adjustments for iOS standalone web applications and tablet views.
src/assets/stylesheets/modules/article · high confidence
Architecture
Refactored JavaScript components into a modular, observable-based architecture
The JavaScript components in the templates directory have been restructured from a monolithic script into a modular, component-based system using RxJS observables. Each UI element—such as the announcement bar, consent manager, content tabs, code blocks, Mermaid diagrams, and annotations—now has its own dedicated module with separate mount and watch functions. This change improves maintainability and allows for more granular lifecycle management of interactive features, ensuring that components like code block copy buttons and Mermaid diagrams are initialized and updated independently and efficiently.
src/templates/assets/javascripts/components · high confidence
Restructured main stylesheet into modular SCSS components
The main stylesheet has been reorganized into distinct, modular SCSS files to improve maintainability. The new structure separates concerns by introducing dedicated files for color variables and theme definitions (\_colors.scss), icon styling (\_icons.scss), browser resets and normalizations (\_resets.scss), and typography/content typesetting (\_typeset.scss). This change affects how the visual presentation is constructed, moving from a monolithic style block to a component-based architecture while preserving the existing light and dark mode color schemes and typography rules.
src/templates/assets/stylesheets/main · high confidence
Tags plugin structure refactored into modular internal components
The internal architecture of the tags plugin has been reorganized into a structured package under \src/plugins/tags/structure\. This change introduces dedicated modules for managing tag hierarchies (\Tag\), mapping pages to tags (\Mapping\ and \MappingManager\), and handling persistent storage of these mappings via JSON (\MappingStorage\). Additionally, the plugin now supports structured tag listings with configurable scopes, inclusion/exclusion filters, and table-of-contents integration (\Listing\, \ListingConfig\, and \ListingManager\). This refactoring isolates the core data structures and logic, improving maintainability and enabling more flexible tag-based navigation and filtering features.
src/plugins/tags/structure · high confidence
Behavioural changes
Added version info to entrypoint
The package entry point now exposes a \_\version\\_ variable, enabling users and tools to programmatically determine the installed version of the software.
src · high confidence
Blog plugin structure refactored with improved date handling and metadata parsing
The blog plugin's internal structure has been reorganized into dedicated modules (structure, config, markdown, options) to improve maintainability and fix several bugs. Key changes include robust UTF-8 with BOM encoding support for post files, deterministic sorting of categories, and stricter validation of post dates that ensures timezones are handled correctly (preventing crashes on missing or ambiguous timezone data). The metadata parser now explicitly rejects MultiMarkdown syntax in favor of standard YAML, and excerpt rendering has been optimized with a dedicated tree processor to correctly resolve internal anchors and relative links within blog views.
src/plugins/blog/structure · high confidence
Blog readtime calculation now ignores non-content HTML elements
The blog readtime plugin has been refactored to use a custom HTML parser that excludes text inside \<script\>, \<style\>, \<object\>, and \<svg\> tags from word counts, ensuring that estimated reading times reflect only visible content. This change replaces the previous external dependency with a lightweight, self-contained implementation, reducing Docker image size and improving the accuracy of readtime estimates for users.
material/plugins/blog/readtime, src/plugins/blog/readtime · high confidence
Build system restructured with new RxJS-based pipeline and Windows fixes
The build tooling in tools/build has been restructured, moving scripts into subfolders and replacing deprecated RxJS operators with the new RxJS API. This change introduces a new copy module and refactors the main build index to use RxJS observables for asset processing, including SVG optimization and file copying. Additionally, specific fixes address Windows compatibility by ensuring POSIX-style path separators and correcting the output order of the \build:all\ task, while also fixing issues with FontAwesome icon fill attributes and asset URLs after the restructuring.
tools/build · high confidence
Centralized configuration and feature flag system for instant navigation and UI components
The JavaScript assets now include a centralized configuration module that exposes global settings, feature flags, and translations to the rest of the application. This change introduces support for instant navigation features, including a progress indicator, prefetching, and preview modes, as well as auto-replacement of meta tags during instant loading. Users benefit from a more consistent and extensible foundation for UI behaviors like code copying, search highlighting, and navigation tracking, all driven by the new feature flag system.
src/templates/assets/javascripts/\ · high confidence_
Drawer styles refactored into modular SCSS files
The drawer styling has been reorganized from a single monolithic file into four distinct SCSS modules: \_animation.scss, \_appearance.scss, \_layout.scss, and \_typography.scss. This change improves maintainability by separating concerns, allowing developers to modify animation, visual appearance, layout structure, and typography independently without affecting other aspects of the drawer component.
src/assets/stylesheets/modules/drawer · high confidence
Improved reliability and stability of instant navigation
This update addresses several bugs in the instant navigation integration to provide a smoother browsing experience. It fixes issues where anchor links were ignored or caused crashes, resolves relative image paths correctly, and prevents visual flashes during loading. Additionally, it ensures that meta tags and color theme settings are preserved during navigation, and adds support for a progress indicator to give users feedback while pages load.
src/templates/assets/javascripts/integrations/instant · high confidence
Improved version selector navigation and outdated banner handling
The version selector now intelligently maps user clicks to the corresponding page in the selected version by consulting the site sitemap, ensuring that navigation preserves the current path and URL parameters (hash and query string) even when switching between versions. Additionally, the logic for displaying the outdated version warning banner has been refined to correctly scope the check to the site's base URL and properly respect user-configured default version strings, preventing the banner from incorrectly appearing on versions that should be treated as current.
src/templates/assets/javascripts/integrations/version · high confidence
Material theme version updated to 9.7.7
The material theme package has been updated to version 9.7.7, as reflected in the \_\init\\_.py module. This change ensures that the installed theme reports the correct version number to the application.
material · high confidence
New JavaScript bundle and alternate version navigation support
This change introduces a new centralized JavaScript entry point (bundle.ts) that consolidates core application logic, including media query handling, keyboard shortcuts, and component mounting. It adds support for alternate version navigation, allowing users to seamlessly switch between different versions of the site (e.g., different documentation versions hosted on separate domains) by intercepting clicks and resolving paths via fetched sitemaps. Additionally, it integrates instant navigation progress indicators and fixes tooltip behavior during instant navigation.
src/templates/assets/javascripts · high confidence
New JavaScript partials for user preferences and UI state
This change introduces a set of new JavaScript template partials in src/templates/partials/javascripts that handle client-side user preferences and UI state management. Specifically, it adds scripts to persist and restore color palette preferences (including system dark/light mode detection), manage consent form interactions, handle content tab selection persistence, control the visibility of announcement and outdated-version banners, and provide core utility functions for scoped local/session storage access.
src/templates/partials/javascripts · high confidence
New JavaScript patches for ellipsis tooltips, indeterminate checkboxes, and scroll handling
This change introduces a new modular patch system in the JavaScript assets, adding specific handlers for UI behaviors. The ellipsis patch now mounts improved tooltips on truncated text elements (respecting the \content.tooltips\ feature flag) and on status elements, replacing the previous native title attribute behavior. A new indeterminate patch ensures navigation toggle checkboxes maintain their indeterminate state correctly, particularly on tablet viewports. Additionally, scroll handling is refined: the scrollfix patch now explicitly targets Apple devices to fix overflow scrolling issues, and the scrolllock patch prevents body scrolling when the search overlay is active on mobile devices, restoring the previous scroll position upon closing.
src/templates/assets/javascripts/patches · high confidence
New blog post structure and configuration system
The blog plugin now uses a dedicated structure module to handle post metadata, configuration, and excerpt rendering. This introduces a new \Post\ class that reads YAML metadata with UTF-8 BOM support and integrates with the meta plugin for metadata merging. It adds a \PostConfig\ schema supporting authors, categories, dates (with timezone handling), drafts, pins, and links. Excerpts are now rendered via a custom Markdown tree processor that correctly resolves internal anchors and relative paths within views. Custom config options ensure unique categories/authors and normalize date formats to UTC datetimes.
material/plugins/blog/structure · high confidence
New build transform pipeline with esbuild and PostCSS
The build system in tools/build/transform has been restructured to use esbuild for JavaScript bundling and PostCSS for stylesheet processing. Scripts are now transpiled to the es2015 target with inline legal comments and optional minification, while stylesheets are compiled via SASS and processed through a PostCSS pipeline including autoprefixer, postcss-logical, and other plugins. This change introduces a new transform mechanism for both scripts and styles, replacing the previous build approach.
tools/build/transform · high confidence
New component type definitions and element retrieval utilities
A new index file introduces TypeScript type definitions for icon search and sponsorship components (including query, result, select, count, and total variants) and provides helper functions to retrieve DOM elements by these component types using the data-mdx-component attribute.
src/overrides/assets/javascripts/components/\ · high confidence_
New stylesheets for pymdownx extensions
The project has restructured its styling by introducing dedicated SCSS files for the pymdownx extensions (arithmatex, critic, details, emoji, highlight, keys, tabbed, and tasklist). This change provides specific visual rules for mathematical rendering (MathJax/KaTeX), code highlighting, collapsible details, tabbed content, and task lists, ensuring consistent appearance and fixing layout issues such as horizontal scrollbars in math containers and marker artifacts in Firefox.
src/templates/assets/stylesheets/main/extensions/pymdownx · high confidence
Privacy plugin configuration and core architecture introduced
The privacy plugin now exposes a structured configuration schema (PrivacyConfig) allowing users to control asset fetching, caching, logging, and link handling via options like assets\_fetch, assets\_include/exclude, and links\_noopener. The plugin's core logic has been refactored to use a streaming HTML parser (FragmentParser) instead of lxml to reduce Docker image size, and implements concurrent downloading of external assets via ThreadPoolExecutor with configurable concurrency limits.
material/plugins/privacy · high confidence
Redesigned admonitions, footnotes, and table of contents styling
The visual presentation of Markdown content has been updated with new styles for admonitions, footnotes, and the table of contents. Admonition blocks now feature a distinct border, background color, and icon-based titles that vary by flavor (e.g., note, warning, success), with improved focus states and nested spacing. Footnote backreferences are now displayed as icons that appear on hover or focus, with specific adjustments for right-to-left (RTL) languages to ensure correct orientation. The table of contents section introduces visible headerlinks that appear on hover or focus, and uses modern CSS scroll-margin properties to improve anchor scrolling behavior, particularly with sticky headers.
src/templates/assets/stylesheets/main/extensions/markdown · high confidence
Redesigned navigation, content layout, and consent management
The template structure for the site has been reorganized into a new set of partials, fundamentally changing how the interface is rendered. The navigation system now uses dedicated \nav-item\, \nav\, \tabs\, and \path\ components, introducing support for navigation pruning and section-based layouts. Content pages are now assembled via a \content\ partial that explicitly includes tags, actions, and feedback, while a new \consent\ partial provides a built-in cookie consent manager with granular control over analytics and social cookies. Additionally, a \progress\ partial adds a reading progress indicator, and the \source-file\ partial now supports displaying local author avatars and configurable email visibility for contributors.
material/templates/partials · high confidence
Refactored browser utilities into a modular, RxJS-based architecture
The browser-side JavaScript utilities have been restructured into a modular, RxJS-based architecture. This change introduces new, dedicated modules for observing document state, element properties (such as size, offset, visibility, and focus), keyboard interactions, and network requests. Notably, the network request module now utilizes XMLHttpRequest to support download progress tracking and request cancellation, addressing limitations of the Fetch API. Additionally, the location handling module has been updated to support instant navigation by intercepting link clicks via a temporary anchor element, and the element focus observer has been improved to use bubbling focus events for better accuracy with nested focusable elements.
src/templates/assets/javascripts/browser · high confidence
Refactored build tooling to use RxJS observables and Chokidar for file watching
The build system in tools/build/\_ has been rewritten to leverage RxJS for handling asynchronous file operations and Chokidar for file watching. This change introduces a new \resolve\ function that returns an Observable of file paths, supporting both standard resolution and live watching modes via the \--watch\ flag. It also adds a \write\ function that caches file contents to avoid redundant disk writes and optionally logs changes when \--verbose\ is enabled. These updates improve the semantics of the build pipeline, particularly regarding file change detection and output consistency.
tools/build/\ · high confidence_
Refactored icon search result logic to support mode-based filtering
The icon search result component has been restructured to handle different search modes (icons, emojis, or all) via a new \mode$\ observable. The \watchIconSearchResult\ function now branches based on the \data-mdx-mode\ attribute: in 'file' mode, it searches only icon shortcodes, while the default mode combines both icons and emojis based on the current search mode setting. This change improves the discoverability and accuracy of search results by respecting the user's selected search context.
src/overrides/assets/javascripts/components/iconsearch/result · high confidence
Refactored template structure and improved accessibility
The template system has been restructured into modular partials, introducing new components for cookie consent management, user feedback collection, and a reading progress indicator. Accessibility has been enhanced by adding a rel=edit attribute to the edit button link, fixing unescaped quotes in ARIA labels, and ensuring the navigation expander is keyboard-focusable. The search interface now correctly respects the enabled setting, and navigation pruning logic has been fixed to handle active tabs and sections properly.
src/templates/partials · high confidence
Removal of custom icon font definitions
The custom icon font styles and font-face declarations have been removed from the theme's stylesheet. This change eliminates the local definition of the 'Icon' font family and its associated CSS classes (such as .icon-search, .icon-github, etc.), meaning the visual rendering of these icons will now depend on external sources or alternative styling mechanisms rather than the previously bundled font files.
src/assets/stylesheets/fonts · high confidence
Removal of legacy Materialize theme templates and breakpoint mixins
The legacy Materialize theme assets have been removed, specifically the SCSS breakpoint mixin library (src/assets/stylesheets/mixins/\_break.scss) and the core Jinja2 view templates (src/views/base.html, drawer.html, footer.html, header.html, toc.html). This eliminates the previous responsive breakpoint logic and the standard documentation layout structure, including the navigation drawer, header, footer, and table of contents rendering, which will require replacement by the new theme implementation.
src/assets/stylesheets/mixins, src/views · high confidence
Removal of legacy base stylesheet modules
The base stylesheet modules for animation, appearance, and layout have been removed from the project. This deletion eliminates the previous CSS rules governing page structure, visual styling, and transition effects, indicating a shift away from the legacy styling approach in this area.
src/assets/stylesheets/modules/base · high confidence
Removal of legacy stylesheet modules
The codebase has removed several core stylesheet files, including the global reset (\_reset.scss), print overrides (\_print.scss), and the complete search module (\_highlight.scss, \_animation.scss, \_appearance.scss, \_layout.scss). This change eliminates the previous CSS-based styling for code syntax highlighting, print layouts, and the search interface animations and layout, indicating a shift away from these specific visual implementations.
src/assets/stylesheets · high confidence
Replaced SCSS stylesheets with Mermaid type declarations
The file previously located at src/assets/stylesheets/application.scss has been renamed to typings/mermaid/index.d.ts and its content has been completely replaced. The original SCSS file, which imported various Bourbon, Quantum, and application-specific modules (such as drawer, article, and search), has been removed. In its place, a TypeScript declaration file has been added that declares a global 'mermaid' variable as type 'any', effectively shifting this location from providing CSS styles to providing type definitions for the Mermaid library.
typings/mermaid · high confidence
Replaced article animation styles with outbound click analytics tracking
The file previously responsible for article styling animations (specifically the fade color effect on highlighted code spans and copyright links) has been replaced by a new JavaScript module that sets up analytics. This new module subscribes to document body click events and sends 'outbound' click events via Google Analytics for any links navigating to a different origin, effectively removing the visual animation behavior in favor of tracking external link clicks.
src/overrides/assets/javascripts/integrations · high confidence
Replaces SCSS styles with DOM type definitions
The file previously located at src/assets/stylesheets/\_shame.scss has been moved to typings/dom/index.d.ts and converted from SCSS to TypeScript. This change removes legacy CSS rules for tablet landscape layouts (such as project name coloring and button-menu hiding) and instead defines a global TypeScript interface for FormData, adding a keys() method that returns an IterableIterator of strings.
typings/dom · high confidence
Restructured JavaScript component and template exports
The project has reorganized its JavaScript module structure by introducing a new \components/index.ts\ file that explicitly exports the \iconsearch\ and \sponsorship\ modules. Additionally, the previous \src/assets/stylesheets/\_palette.scss\ file has been removed and replaced with a new \templates/index.ts\ file, which also exports the \iconsearch\ and \sponsorship\ modules, effectively consolidating these specific feature exports into the new templates entry point.
src/overrides/assets/javascripts/components, src/overrides/assets/javascripts/templates · high confidence
Restructured and restyled custom theme assets
The custom stylesheets have been reorganized into a modular structure, introducing dedicated SCSS files for the landing page hero, announcement banner, icon search, and sponsorship sections. This restructuring brings visual updates to the landing page hero, including a new gradient background and slate theme adjustments, while the icon search now features a refined result list with a type-selection dropdown and improved dark-mode styling. Additionally, sponsorship displays have been updated with new layouts for premium sponsors and interactive hover effects on sponsor avatars.
src/overrides/assets/stylesheets · high confidence
Restructured color palette into modular SCSS files
The color palette styles have been reorganized into three distinct files: \_accent.scss, \_primary.scss, and \_scheme.scss. This change separates the definition of accent colors, primary color themes (including specific handling for white and black schemes), and the slate (dark mode) scheme rules. Users will see no visual change, but the underlying stylesheet structure is now more modular, making it easier to maintain and customize specific color aspects independently.
src/templates/assets/stylesheets/palette · high confidence
Restructured stylesheet architecture and added print/comment hiding
The stylesheet organization has been restructured into a modular system with dedicated entry points for main styles and palette configuration, importing specific component and extension modules. This change introduces a new grid layout system for content cards and an inline floating modifier for sidebars. Additionally, print styles have been updated to hide the comment section (including Giscus) and the Mermaid diagram integration now uses dedicated CSS variables for consistent theming.
src/templates/assets/stylesheets · high confidence
Restructured template layout and added blog post author support
The template directory has been restructured into a new modular layout, introducing dedicated templates for blog posts and the blog index alongside a new 404 page and a redirect template. For blog posts, the sidebar now displays author profiles, including support for local author avatars and clickable author names if a URL is provided. Additionally, the theme initialization script now automatically suppresses the MkDocs 2.0 compatibility warning when running in forked environments.
src/templates · high confidence
Restructured theme template layout and added blog post support
The theme's template structure has been reorganized, introducing a new base layout (base.html) and a dedicated blog-post template that displays author avatars, publication dates, categories, and reading time in a sidebar. A new 404.html template provides a standard not-found page, while a redirect.html template handles URL redirections. Additionally, the \_\init\\_.py file now includes logic to automatically display a warning about MkDocs 2.0 compatibility when running in the MkDocs context.
material/templates · high confidence
Search integration restructured with improved highlighting and query handling
The search integration has been restructured into a modular TypeScript architecture, introducing a custom tokenizer that is aware of HTML tags and supports multi-character splitting for more accurate indexing. Search result highlighting now correctly escapes HTML entities (such as \&\) and properly handles code blocks in titles, while query parsing includes fixes for wildcard detection and improved segmentation for Asian languages via Lunr.js.
src/templates/assets/javascripts/integrations/search · high confidence
Search plugin restructured with improved stability and configuration
The search plugin has been refactored to improve resilience and fix several crashes. It now handles edge cases such as empty titles, numeric tags, empty tag keys, and nested headlines that previously caused errors. The plugin also correctly applies search boosts to document sections and preserves indentation in code blocks. Configuration options like 'indexing', 'prebuild\_index', and 'min\_search\_length' are now deprecated as unsupported. The plugin uses the 'backrefs' library for regex operations and supports Chinese text segmentation via 'jieba'.
src/plugins/search · high confidence
Search plugin rewritten for stability and robustness
The search plugin has been completely rewritten to fix multiple crashes and indexing errors. This update resolves issues where search would fail on empty or numeric tags, crash on specific page titles or nested headlines, and incorrectly handle whitespace and code blocks. It also improves resilience during incremental builds and theme changes, ensuring a more reliable search experience for users.
material/plugins/search · high confidence
Social plugin introduces configurable card layouts and sandboxed template engine
The social plugin now supports customizable social media cards through a new YAML-based layout system (default, accent, invert, variant, and image-only templates) that allows users to define background colors, fonts, and layer positioning. The plugin also switches to a sandboxed Jinja environment for rendering these templates, improving security and stability, while introducing configuration options for caching, concurrency, and debug modes to optimize build performance.
material/plugins/social · high confidence
Social plugin restructured with configurable card layouts and sandboxed rendering
The social plugin has been refactored to support customizable social card designs through a new layout system defined in YAML templates (default, accent, invert, variant, and only/image). Card generation now uses a sandboxed Jinja environment for safer template rendering, and the plugin includes a comprehensive configuration schema (SocialConfig) that deprecates old settings like cards\_color and cards\_font in favor of cards\_layout\_options. This change also introduces parallelized image saving and caching to improve build performance, while ensuring cards correctly display the site name on the homepage and handle font loading more robustly.
src/plugins/social · high confidence
Tags plugin configuration and structure refactored for MkDocs compatibility
The tags plugin's configuration schema has been updated to use MkDocs' class-based config options, introducing explicit settings for tag slugification, hierarchy, sorting, and shadow tags, while deprecating older comparison-based settings. The plugin now includes dedicated configuration classes for tag structures and listings, ensuring better type safety and alignment with current MkDocs standards.
material/plugins/tags · high confidence
Updated and expanded language translation files
The template partials in \material/templates/partials/languages\ have been updated with new and revised translations for numerous languages, including Afrikaans, Arabic, Azerbaijani, Belarusian, Bulgarian, Bengali, Catalan, Czech, Welsh, Danish, German, Greek, English, Esperanto, Spanish, Estonian, Basque, Persian, Finnish, French, Galician, Hebrew, Hindi, Croatian, Hungarian, Armenian, and Indonesian. These changes ensure that interface strings, search placeholders, and navigation labels are correctly localized for users selecting these languages.
material/templates/partials/languages, src/templates/partials/languages · high confidence
Updated bundled JavaScript assets
The bundled JavaScript file \custom.f9feb4cf.min.js\ and its corresponding source map have been regenerated. This update includes the \fuzzaldrin-plus\ library for fuzzy search scoring and a significant portion of the \rxjs\ reactive extensions library, alongside the project's own TypeScript source files, ensuring the client-side search and component logic is up to date.
material/overrides/assets · high confidence
Fixes
Added empty \_\_init\_\_.py files to plugin directories
New empty \_\init\\_.py files have been added to the material/plugins and src/plugins directories. This change ensures these directories are recognized as Python packages, which resolves import errors where the 'material.plugins' module could not be found.
material/plugins, src/plugins · high confidence
Dependencies
Updated frontend and Python dependencies
The build environment and runtime dependencies have been updated to their latest compatible versions. Frontend tooling now uses esbuild 0.28.1, TypeScript 5.9.3, and Stylelint 16.26.1, while Python dependencies include MkDocs 1.6+, Pygments 2.16+, and Pillow 10.2+ to ensure compatibility and address security vulnerabilities.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Baseline
- First survey — no prior run to compare against. CAI 56.
Lenses
- Code Health 84
- Architecture 97
- Maturity 72
- Readiness 34
- Security 73
- Accessibility 73
Changes since last survey
- 300 commits — 237 feature/other, 63 fixes
By area
- (root) — 91 commits
- material/templates — 59 commits
- docs/blog — 36 commits
- material/plugins — 27 commits
- .github/workflows — 11 commits
- src/templates — 10 commits
- docs/setup — 8 commits
- docs/contributing — 6 commits
- docs/insiders — 6 commits
- docs/plugins — 6 commits
- docs/publishing-your-site.md — 6 commits
- .github/DISCUSSION_TEMPLATE — 5 commits
- docs/tutorials — 5 commits
- material/overrides — 5 commits
- (repo) — 4 commits
- .github/assets — 2 commits
- docs/changelog — 2 commits
- docs/reference — 2 commits
- docs/schema — 2 commits
- .github/FUNDING.yml — 1 commit
Notable commits
- fix: Added urlencode to fix # in custom icons (#8087)
- fix: Fix embedded mermaid css to fix class diagram arrow heads
- fix: Fixed & not escaped in search highlighting
- fix: Fixed CI
- fix: Fixed FontAwesome icons having fill attributes
- fix: Fixed build:all output on Windows (#8089)
- fix: Fixed annotations showing list markers in print view
- fix: Fixed back-to-top button partial
- fix: Fixed backref import (#8057)
- fix: Fixed blog post content sometimes not stretching
- fix: Fixed blog post date
- fix: Fixed breakpoint unit for media queries in JS
- fix: Fixed build badge
- fix: Fixed crashing tags plugin
- fix: Fixed deprecation warning as of Python 3.14 in Emoji extension
- fix: Fixed disappearing version selector when hiding page title
- fix: Fixed dotpath venv guessing
- fix: Fixed empty username fallback
- fix: Fixed entity-relationship diagram styling after Mermaid upgrade (#8211)
- fix: Fixed error in Norwegian translations
- …and 280 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
squidfunk/mkdocs-material was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 18 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 1c73dca3ff4909e4cddd0d3b6e272298e902dec7 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-5d04157a340d.