Skip to main content

Exports your Draw.io diagrams at build time for easier embedding into your documentation

Reason this release was yanked:

broken

Project description

Diagrams.net (Draw.io) Exporter for MkDocs

Exports your Draw.io diagrams at build time for easier embedding into your documentation.


Quick start

First install the package:

pip install mkdocs-drawio-exporter

Then enable it:

plugins:
  - drawio-exporter

Configuration

For the default configuration, just add the plugin to the plugins key:

plugins:
  - drawio-exporter

You can override the default configuration; values shown are defaults:

plugins:
  - drawio-exporter:
      # Diagrams are cached to speed up site generation. The default path is
      # drawio-exporter, relative to the documentation directory.
      cache_dir: 'drawio-exporter'
      # Path to the Draw.io executable:
      #   * drawio on Linux
      #   * draw.io on macOS
      #   * or draw.io.exe on Windows
      # We'll look for it on your system's PATH, then default installation
      # paths. If we can't find it we'll warn you.
      drawio_executable: null
      # Additional Draw.io CLI args
      #   * --embed-svg-images will embed external images in SVGS, if format is "svg".
      drawio_args: []
      # Output format (see draw.io --help | grep format)
      format: svg
      # Embed format
      #   * The default is to embed via the <img> tag.
      #   * Consider <object type="image/svg+xml" data="{img_src}"></object>
      #     to enable interactive elements (like hyperlinks) in SVGs.
      #   * Consider {content} to inline SVGs into documents directly, useful
      #     for styling with CSS, preserving interactivity, and improving
      #     search by indexing diagram text.
      embed_format: '<img alt="{img_alt}" src="{img_src}">'
      # Glob pattern for matching source files
      sources: '*.drawio'

Usage

With the plugin configured, you can now proceed to embed images by simply embedding the *.drawio diagram file as you would with any image file:

![My alt text](my-diagram.drawio)

If you're working with multi-page documents, append the index of the page as an anchor in the URL:

![Page 1](my-diagram.drawio#0)

The plugin will export the diagram to the format specified in your configuration and will rewrite the <img> tag in the generated page to match. To speed up your documentation rebuilds, the generated output will be placed into cache_dir and then copied to the desired destination. The cached images will only be updated if the source diagram's modification date is newer than the cached export. Thus, bear in mind caching works per file - with large multi-page documents a change to one page will rebuild all pages, which will be slower than separate files per page.

GitHub Actions

See this guide.

Headless usage

In addition to the above, if you're running in a headless environment (e.g. in integration, or inside a Docker container), you may need to ensure a display server is running and that the necessary dependencies are installed.

On Debian and Ubuntu, the following should install the dependencies:

sudo apt install libasound2 xvfb

To run MkDocs with an automatically assigned X display, wrap the command as follows:

xvfb-run -a mkdocs build

Running without the sandbox

If you're seeing messages like the following it's likely that you're running MkDocs as root:

[22:0418/231827.169035:FATAL:electron_main_delegate.cc(211)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.

If possible, consider running MkDocs as a non-privileged user. Depending on the circumstances (e.g. running within an unprivileged container) it may be appropriate to disable the Chrome sandbox by adding the following option to mkdocs.yml:

plugins:
  - drawio-exporter:
      drawio_args:
        - --no-sandbox

Hacking

Optionally, use Nix for a development shell with all the necessary dependencies:

nix develop

We use Poetry for dependency management:

poetry install

To get completion working in your editor, set up a virtual environment in the root of this repository and install MkDocs:

poetry install --with dev

To install the plugin onto a local MkDocs site in editable form:

poetry add --editable /path/to/mkdocs-drawio-exporter

Note that you'll need to repeat this step if you make any changes to the [tool.poetry.plugins.*] sections listed in pyproject.toml.

Run the tests with the test script:

poetry run test

Upgrading dependencies

To upgrade the dependencies, first make any necessary changes to the constraints expressed in the [tool.poetry.dependencies] section of pyproject.toml, then have Poetry update them:

poetry update

Releasing

Build the distributable package:

poetry build

Push it to the PyPI test instance:

twine upload --repository-url https://test.pypi.org/legacy/ dist/*

Test it inside a virtual environment:

pip install --index-url https://test.pypi.org/simple/ --no-deps mkdocs-drawio-exporter

Let's go live:

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_drawio_exporter-0.10.0.tar.gz (12.9 kB view details)

Uploaded Source

Built Distribution

mkdocs_drawio_exporter-0.10.0-py3-none-any.whl (13.1 kB view details)

Uploaded Python 3

File details

Details for the file mkdocs_drawio_exporter-0.10.0.tar.gz.

File metadata

  • Download URL: mkdocs_drawio_exporter-0.10.0.tar.gz
  • Upload date:
  • Size: 12.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.4 CPython/3.10.12 Linux/6.5.0-1025-azure

File hashes

Hashes for mkdocs_drawio_exporter-0.10.0.tar.gz
Algorithm Hash digest
SHA256 b7017fd39ada1eeec64f6b454bdc50be998721d9dded45d7369956bb18965819
MD5 dcb5e88a4269d2e9f2c2db330ac74e8f
BLAKE2b-256 5de436f6c77d9312da8e6ca2b64ff864e15a45c12672ce9911a63da1e377045e

See more details on using hashes here.

File details

Details for the file mkdocs_drawio_exporter-0.10.0-py3-none-any.whl.

File metadata

File hashes

Hashes for mkdocs_drawio_exporter-0.10.0-py3-none-any.whl
Algorithm Hash digest
SHA256 90af1475a86fe1783451a3041430bf46c92e92dea8ea131c4a4ac2545672ef9b
MD5 1f6edbab9517ab1ce7b42af8a7bd35f0
BLAKE2b-256 ec2043559006d9380c7c910c8d27ae606cceaaa602289501b9fb176bdb4f96d9

See more details on using hashes here.

Supported by

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