Skip to main content

MkDocs plugin that renders process timeline shortcode content from YAML.

Project description

mkdocs-process-timeline

mkdocs-process-timeline renders a process timeline from YAML with a Markdown shortcode.

It is an MkDocs plugin that:

  • finds ::process-timeline{file="..."} in page Markdown
  • loads a YAML file relative to docs_dir
  • validates the YAML structure
  • replaces the shortcode with rendered HTML
  • automatically includes the bundled process-timeline.css and process-timeline.js assets

The rendered output contains:

  • a summary header with counts
  • a dark clickable timeline journey
  • a sticky left-side page progress bar inside the rendered timeline on desktop layouts
  • anchor links to detailed milestone sections
  • responsive milestone detail cards
  • lightweight JavaScript for viewport progress tracking

Install

pip install mkdocs-process-timeline

For local development:

pip install -e ".[dev]"

MkDocs configuration

Enable the plugin in mkdocs.yml:

plugins:
  - search
  - mkdocs-process-timeline

No extra CSS or JavaScript setup is required. The plugin injects its bundled stylesheet and progress script automatically.

Usage

Add the shortcode to a page:

::process-timeline{file="processes/delivery.yml"}

Whitespace around file= is also supported:

::process-timeline{ file = "processes/delivery.yml" }

The YAML file path is resolved relative to docs_dir, not relative to the current Markdown file.

Example:

  • if docs_dir is docs
  • and the shortcode is ::process-timeline{file="processes/delivery.yml"}

then the plugin reads:

  • docs/processes/delivery.yml

Progress bar

The timeline can render a sticky progress bar beside the milestone details on desktop layouts. It shows page scroll progress: empty at the top of the page and full at the bottom.

Progress is enabled by default. To make the setting explicit, add this top-level YAML field:

show_progress: true

To hide the progress bar for a specific timeline:

show_progress: false

When the progress bar is disabled, the milestone detail sections use the full available content width.

Browser support

The bundled styles are scoped to the rendered timeline and are designed for current versions of Chrome, Edge, Firefox, and Safari on Windows, Linux, and macOS. The layout uses CSS Grid and supports responsive, print, reduced-motion, and Windows forced-colors/high-contrast modes.

Minimal example

Markdown page:

# Delivery Process

::process-timeline{file="processes/delivery.yml"}

YAML file:

title: Delivery Process
description: A simple example showing how to define a delivery workflow in YAML.
show_progress: true
milestones:
  - id: intake
    title: Intake
    summary: Capture the incoming request and verify completeness.
    description: Review the request, collect missing inputs, and log the work item.
    duration_weeks: 1
    contact:
      name: Jordan Smith
      role: Intake Coordinator
      email: jordan@example.com
      support:
        label: Open intake support request
        url: https://example.com/support/intake
    references:
      - label: Intake checklist
        url: https://example.com/intake-checklist
    tasks:
      - title: Register request
        description: Create the delivery request record in the intake workflow.
        url: https://example.com/docs/register-request
      - title: Confirm mandatory inputs
        description: Verify the requester attached the required initial materials.
        url: https://example.com/docs/confirm-inputs
  - id: planning
    title: Planning
    summary: Convert the request into a structured delivery plan.
    description: Agree scope, owners, and target dates before execution begins.
    duration_weeks: 2
    contact:
      name: Casey Taylor
    tasks:
      - title: Define milestones
        description: Break the delivery into measurable execution checkpoints.

YAML schema

Top-level fields:

  • title: string
  • description: string
  • show_progress: optional boolean, defaults to true
  • milestones: non-empty list

Milestone fields:

  • id: string, unique
  • title: string
  • summary: string
  • description: string
  • duration_weeks: positive int or float
  • contact:
    • name: string
    • role: optional string
    • email: optional string
    • support: optional
      • label: string
      • url: string
  • references: optional
    • label: string
    • url: string
  • tasks: list of objects
    • title: string
    • description: string
    • url: optional string

Validation rules

The plugin validates input before rendering.

Top-level validation:

  • the YAML file must exist
  • the YAML root must be a mapping
  • milestones must be a non-empty list
  • when present, show_progress must be a boolean

Milestone validation:

  • milestone ids must be unique
  • id, title, summary, description are required non-empty strings
  • duration_weeks must be a positive number
  • contact must be a mapping
  • contact.name is required
  • when present, contact.role must be a non-empty string
  • when present, contact.email must be a string
  • when present, contact.support must be a mapping with label and url
  • when present, references must be a list of mappings with label and url
  • tasks must be a list of mappings
  • each task must contain title and description
  • when present, task.url must be a non-empty string

Validation errors include the filename and milestone id where possible.

Rendered structure

For each rendered timeline:

  • timeline cards link to #milestone-{id}
  • detailed milestone sections use matching id="milestone-{id}"
  • a sticky left-side page progress bar appears inside the rendered timeline on desktop unless show_progress: false
  • summary stats include:
    • milestones
    • estimated duration
    • required tasks
    • references
  • task titles render as links only when task.url is present
  • support renders only when contact.support is present
  • references panel renders only when references exist

Development

Install the project in editable mode:

python3 -m pip install -e ".[dev]"

Run tests:

pytest

Build the example site:

mkdocs build -f examples/basic/mkdocs.yml

Build distributable artifacts:

rm -rf dist build *.egg-info
python3 -m build

Check the generated distributions before publishing:

python3 -m twine check dist/*

Serve the example locally:

mkdocs serve -f examples/basic/mkdocs.yml

Then open:

  • http://127.0.0.1:8000/

Example

See examples/basic for a working sample project:

Publishing

Typical release flow:

python3 -m pip install -e ".[dev]"
pytest
mkdocs build -f examples/basic/mkdocs.yml
rm -rf dist build *.egg-info
python3 -m build
python3 -m twine check dist/*
python3 -m twine upload dist/*

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

mkdocs_process_timeline-0.2.1.tar.gz (14.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mkdocs_process_timeline-0.2.1-py3-none-any.whl (13.0 kB view details)

Uploaded Python 3

File details

Details for the file mkdocs_process_timeline-0.2.1.tar.gz.

File metadata

  • Download URL: mkdocs_process_timeline-0.2.1.tar.gz
  • Upload date:
  • Size: 14.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for mkdocs_process_timeline-0.2.1.tar.gz
Algorithm Hash digest
SHA256 18f91a814f103a43fb23de753ca32cb3d4a1190327585c87bed894a5431b115e
MD5 e5dd171c120ee34d026ab449bf4e6a15
BLAKE2b-256 de8689ba983662b3d878fba758b055d81d777c5740042c89c107d8b8191fd092

See more details on using hashes here.

Provenance

The following attestation bundles were made for mkdocs_process_timeline-0.2.1.tar.gz:

Publisher: publish.yml on lzelga/mkdocs-vibe

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mkdocs_process_timeline-0.2.1-py3-none-any.whl.

File metadata

File hashes

Hashes for mkdocs_process_timeline-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 79393398f998720c8cb68b7bb30317f58f988d00e78bd211a3d731283f298345
MD5 078ea15af865fc4ec60a176ba029a03c
BLAKE2b-256 df3fadeabb8ac62f7343a69e6debe4033e9e503b687a94796378b9f0af72b974

See more details on using hashes here.

Provenance

The following attestation bundles were made for mkdocs_process_timeline-0.2.1-py3-none-any.whl:

Publisher: publish.yml on lzelga/mkdocs-vibe

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page