MkDocs plugin that generates a product catalog page from YAML files
Project description
mkdocs-product-catalog
An MkDocs plugin that renders a product catalog on any page from a directory of YAML files. Each product appears as a clickable button with an icon (or acronym fallback). Clicking a button opens a lightbox modal with all product details.
Installation
pip install mkdocs-product-catalog
Usage
Add the plugin to mkdocs.yml:
plugins:
- search
- product-catalog
Then place this tag anywhere in a markdown file to embed a catalog:
<!-- product-catalog: dirname -->
dirname is the path to a directory of YAML files. Multiple tags can appear on the same page.
Path resolution
Absolute paths (relative to docs_dir):
<!-- product-catalog: catalog/platform_services -->
Relative paths (relative to the current file):
<!-- product-catalog: ./services -->
<!-- product-catalog: ../shared/catalog -->
Paths starting with ./ or ../ are resolved relative to the current markdown file. All other paths are resolved from docs_dir. Relative paths are required when using mkdocs-multirepo-plugin.
Navigation integration
The plugin automatically injects each catalog into the MkDocs navigation. Every product gets a nav link that opens its modal directly via a #modal-{id} hash anchor.
Opt out per tag
Add no-nav to suppress nav injection for a specific catalog:
<!-- product-catalog: ./internal no-nav -->
Disable globally
plugins:
- product-catalog:
nav_enabled: false
Multirepo compatibility
The plugin works with mkdocs-multirepo-plugin. Use relative paths in catalog tags so they resolve correctly inside each imported repo's temporary clone directory:
# Root mkdocs.yml
plugins:
- search
- product-catalog
- multirepo:
cleanup: true
nav:
- Home: index.md
- Team Alpha: '!import https://github.com/your-org/team-alpha-docs?branch=main'
<!-- In team-alpha-docs/docs/catalog.md -->
<!-- product-catalog: ./services -->
Nav links for imported repos are computed from MkDocs Page.url, so they remain correct regardless of where the plugin clones the source repository.
Hash-based deep linking
Products can be linked to directly via #modal-{id} in the URL:
https://yoursite.com/catalog-page#modal-services-my-product-0
Product YAML format
Each .yaml or .yml file in the directory represents one product:
title: My Product # required
description: A short description of the product. # optional
icon: images/my_icon.png # optional
url: https://myproduct.example.com # optional
documentation: # optional
- url: https://docs.example.com/myproduct
title: Official Documentation
description: Comprehensive guide to the product
- url: https://guide.example.com/user-guide
title: User Guide
repository: # optional
- url: https://github.com/example/myproduct
title: Main Repository
- url: https://github.com/example/plugins
title: Plugins Repository
owners: # optional
- Alice
- Bob
metadata: # optional — arbitrary key/value pairs
team: platform
sla: 99.9%
dashboard: https://grafana.example.com/d/overview
Products are rendered in alphabetical order by filename.
Icon
The icon value is used as the src of an <img> tag — use a path relative to the page the tag appears on, or an absolute URL. If omitted, an acronym (up to 3 initials) is shown in a colored circle instead.
Documentation and Repository
Both fields support an array of links, each with an optional title and description. The legacy single-string format is also accepted:
documentation: https://docs.example.com/myproduct
repository: https://github.com/example/myproduct
Metadata
Any metadata value that contains a URL (http://, https://) is automatically rendered as a clickable link.
Search
Product titles, descriptions, and owner names are included in a hidden element on the page so MkDocs search can index them.
Logging
The plugin logs under the mkdocs.plugins.product-catalog logger. Use mkdocs build --verbose to see debug output.
How it works
- The plugin scans all
.yamland.ymlfiles in the specified directory. - It renders a responsive button grid; each button shows the product icon or acronym and title.
- Clicking a button opens a modal with the product's description, URL, documentation, repository, owners, and metadata.
- The modal closes with the × button, by clicking the backdrop, or pressing Escape.
- Styles use MkDocs CSS custom properties and adapt to light and dark themes.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mkdocs_product_catalog-2.2.0.tar.gz.
File metadata
- Download URL: mkdocs_product_catalog-2.2.0.tar.gz
- Upload date:
- Size: 15.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9dc70a206dfaeadbade1e7c1cc41950647dcd55a09c970461b3dcfa4b9eeef99
|
|
| MD5 |
cf7dde082fddd43e3162ea2ef79a239e
|
|
| BLAKE2b-256 |
0538935e11b8494be7023e6d9eb2d2e9d3dde192a080f3a128a2c2c2213c845a
|
Provenance
The following attestation bundles were made for mkdocs_product_catalog-2.2.0.tar.gz:
Publisher:
pypi.yml on luukkemp/mkdocs_product_catalog
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mkdocs_product_catalog-2.2.0.tar.gz -
Subject digest:
9dc70a206dfaeadbade1e7c1cc41950647dcd55a09c970461b3dcfa4b9eeef99 - Sigstore transparency entry: 1342381079
- Sigstore integration time:
-
Permalink:
luukkemp/mkdocs_product_catalog@4869b93ba9e22da68f4914351f46250a956ac23d -
Branch / Tag:
refs/tags/v2.2.0 - Owner: https://github.com/luukkemp
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi.yml@4869b93ba9e22da68f4914351f46250a956ac23d -
Trigger Event:
release
-
Statement type:
File details
Details for the file mkdocs_product_catalog-2.2.0-py3-none-any.whl.
File metadata
- Download URL: mkdocs_product_catalog-2.2.0-py3-none-any.whl
- Upload date:
- Size: 15.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
439f8ac15ebd3b9a79ea0e1bbc5ecd7d673b0348e1049240588e1542561944de
|
|
| MD5 |
2e1c2a66ffe99821f330a79c5ceac39a
|
|
| BLAKE2b-256 |
b02e4c552d8ed60f9c2056629fd9e6fbd3b57b82e96de0626e743be05d267dd7
|
Provenance
The following attestation bundles were made for mkdocs_product_catalog-2.2.0-py3-none-any.whl:
Publisher:
pypi.yml on luukkemp/mkdocs_product_catalog
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mkdocs_product_catalog-2.2.0-py3-none-any.whl -
Subject digest:
439f8ac15ebd3b9a79ea0e1bbc5ecd7d673b0348e1049240588e1542561944de - Sigstore transparency entry: 1342381116
- Sigstore integration time:
-
Permalink:
luukkemp/mkdocs_product_catalog@4869b93ba9e22da68f4914351f46250a956ac23d -
Branch / Tag:
refs/tags/v2.2.0 - Owner: https://github.com/luukkemp
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi.yml@4869b93ba9e22da68f4914351f46250a956ac23d -
Trigger Event:
release
-
Statement type: