Skip to main content

MkDocs plugin for embedding Drawio files

Project description

MkDocs Plugin for embedding Drawio files

Publish Badge PyPI

Sergey (onixpro) is the original creator of this plugin but since his repository isn't maintained anymore we forked it on the 19th December of 2023 and have been keeping it up-to-date and expanding on the features since then. Buy Sergey a ☕

Features

This plugin enables you to embed interactive drawio diagrams in your documentation. Simply add your diagrams like you would any other image:

You can either use diagrams hosted within your own docs. Absolute as well as relative paths are allowed:

Absolute path:
![](/assets/my-diagram.drawio)

Same directory as the markdown file:
![](my-diagram.drawio)

Relative directory to the markdown file:
![](../my-diagram.drawio)


Or you can use external urls:
![](https://example.com/diagram.drawio)

Additionally this plugin supports multi page diagrams by using either the page or alt property. To use the page property, you need to use the markdown extension attr_list.

Either use the alt text:
![Page-2](my-diagram.drawio)
![my-custom-page-name](my-diagram.drawio)

Or use the page attribute:
![Foo Diagram](my-diagram.drawio){ page="Page-2" }
![Bar Diagram](my-diagram.drawio){ page="my-custom-page-name" }

Setup

Install plugin using pip:

pip install mkdocs-drawio

Add the plugin to your mkdocs.yml

plugins:
  - drawio

Configuration Options

Full documentation of the configuration options and examples can be found in the official documentation

By default the plugin uses the official url for the minified drawio javascript library. To use a custom source for the drawio viewer you can overwritte the url. This might be useful in airlocked environments.

If you want to use a self-hosted JavaScript viewer file. You should download the latest version from the official drawio repo.

plugins:
  - drawio:
      viewer_js: "https://viewer.diagrams.net/js/viewer-static.min.js"

Further options are:

plugins:
  - drawio:
      tooltips: true       # Enable tooltips on diagram elements
      border: 5            # Border size / padding around diagrams
      edit: true           # Enable opening the editor for diagrams
      darkmode: true       # Enable dark mode support (classic MkDocs and Material)
      highlight: "#0000FF" # Highlight color for hyperlinks
      lightbox: true       # Enable opening the lightbox on click
      toolbar:             # Control the looks and behaviour of the toolbar
        pages: true        # Display the page selector
        tags: true         # Display the tags selector
        zoom: true         # Display the zoom controls
        layers: true       # Display the layer controls
        lightbox: true     # Display the lightbox / fullscreen button
        position: "top"    # Control the position of the toolbar (top or bottom)
        no_hide: false     # Do not hide the toolbar when not hovering over diagrams
        show_title: false  # Show the diagram title in the toolbar based on the file name

Material Integration

If you are using the Material Theme and want to use the instant-loading feature. You will have to configure the following:

In your mkdocs.yaml:

theme:
  name: material
  features:
    - navigation.instant

plugins:
  - drawio

extra_javascript:
  - https://viewer.diagrams.net/js/viewer-static.min.js
  - javascripts/drawio-reload.js

Add docs/javascripts/drawio-reload.js to your project:

document$.subscribe(({ body }) => {
  // if drawio toolbar icons/buttons are not showing or missing due to title being longer than the image width
  // you can set a minimum width for the graph viewer by uncommenting the following line
  // GraphViewer.prototype.minWidth = 500;

  GraphViewer.processElements()

  // required to fix duplicate display of external drawio graphs (via http)
  reload();
})

Using Tabs (pymdownx.tabbed)

If you want to use drawio diagrams inside of tabs you need to make sure that the diagrams are processed after the tabs are rendered. You can achieve this by adding the following javascript to your mkdocs.yml:

extra_javascript:
  - javascripts/drawio-tabs.js

Add docs/javascripts/drawio-tabs.js to your project:

document.addEventListener('change', (event) => {
  // Check if the target is a pymdownx tab input
  if (event.target.matches('.tabbed-set > input')) {
    GraphViewer.processElements()
  }
});

Its a bit of a workaround as it listens for all events on the page and retriggers the drawio processing if any tab is clicked.

How it works

  1. mkdocs generates the html per page
  2. mkdocs-drawio attaches to the on_post_page event. For more details, please have a look at the event lifecycle documentation
  3. Adds the drawio viewer library
  4. Searches through the generated html for all img tags that have a source of type .drawio
  5. Replaces the found img tags with mxgraph html blocks (actual drawio diagram content). For more details, please have a look at the official drawio.com documentation.

Contribution guide

  1. Setup a virtual environment: python3 -m venv venv && source venv/bin/activate
  2. Install poetry: pip install poetry
  3. Install dependencies and current version: poetry install
  4. Make your desired changes
  5. Add a test for your changes in the example directory
  6. Test your changes by starting mkdocs serve in the example directory
  7. Increase the version in pyproject.toml
  8. Make sure poetry run ruff check . and poetry run black --check . passing
  9. Open your pull request ✨️

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_drawio-1.16.1.tar.gz (7.6 kB view details)

Uploaded Source

Built Distribution

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

mkdocs_drawio-1.16.1-py3-none-any.whl (8.9 kB view details)

Uploaded Python 3

File details

Details for the file mkdocs_drawio-1.16.1.tar.gz.

File metadata

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

File hashes

Hashes for mkdocs_drawio-1.16.1.tar.gz
Algorithm Hash digest
SHA256 55a3fdd2313b05b78d5d6098f6bee122ad8eb8e0b8cbf0a1e2ea649a188208a6
MD5 a8971c626bea8b6823cf2dc7163389ae
BLAKE2b-256 ba0bc853af611b61b1c2eb02c7fe12a79dadf5c2bd7bd7d03101f9d2d0178da1

See more details on using hashes here.

Provenance

The following attestation bundles were made for mkdocs_drawio-1.16.1.tar.gz:

Publisher: python-publish.yml on tuunit/mkdocs-drawio

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_drawio-1.16.1-py3-none-any.whl.

File metadata

  • Download URL: mkdocs_drawio-1.16.1-py3-none-any.whl
  • Upload date:
  • Size: 8.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for mkdocs_drawio-1.16.1-py3-none-any.whl
Algorithm Hash digest
SHA256 fb8389147fda6aac1f6a6f807d9c2910839d06e93748f728a551c8204aeeb74b
MD5 1bb2753d727ec5b01a5f5b28b25ba876
BLAKE2b-256 c7908a64ea0bb94ece545b7d90fe407d4286f669a903504d49c7d00be30e087f

See more details on using hashes here.

Provenance

The following attestation bundles were made for mkdocs_drawio-1.16.1-py3-none-any.whl:

Publisher: python-publish.yml on tuunit/mkdocs-drawio

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