Skip to content

show-docs/remark-kroki

Folders and files

NameName
Last commit message
Last commit date

Latest commit

5d2f498 · Jul 8, 2024

History

26 Commits
Oct 17, 2023
Oct 17, 2023
Jul 8, 2024
Jul 8, 2024
Mar 28, 2022
Mar 28, 2022
Mar 28, 2022
Mar 28, 2022
Apr 22, 2024
Jul 8, 2024
Jul 8, 2024

Repository files navigation

remark-kroki

Remark plugin for showing Kroki diagram.

npm github node

Installation

npm install remark-kroki --save-dev

Usage

import readFileSync from 'node:fs';

import { remark } from 'remark';
import { remarkKroki } from 'remark-kroki';

const markdownText = readFileSync('example.md', 'utf8');

remark()
  .use(remarkKroki, {
    server: 'http://localhost:8000',
    alias: ['plantuml']
  })
  .process(markdownText)
  .then((file) => console.info(file))
  .catch((error) => console.warn(error));

Docusaurus v3 project

// docusaurus.config.mjs
import { remarkKroki } from 'remark-kroki';

export default {
  presets: [
    [
      'classic',
      {
        docs: {
          remarkPlugins: [
            [
              remarkKroki,
              {
                // ...options here
                alias: ['plantuml'],
                target: 'mdx3'
              }
            ]
          ]
        }
      }
    ]
  ]
};

Docusaurus v2 project

// docusaurus.config.js
module.exports = async function createConfig() {
  const { remarkKroki } = await import('remark-kroki');

  return {
    presets: [
      [
        'classic',
        {
          docs: {
            remarkPlugins: [
              [
                remarkKroki,
                {
                  // ...options here
                  alias: ['plantuml']
                }
              ]
            ]
          }
        }
      ]
    ]
  };
};

Options

Options.server

Using self host server by default. Set https://kroki.io to use free service.

Options.headers

  • type: object
  • default: {}

HTTP headers to send to the server for custom authentication.

Options.alias

  • type: array
  • default: []
  • example: ['plantuml']

Alias code language name to treat as kroki code block, meta.type will be ignored.

```kroki type=plantuml
```
↓

```plantuml
```

Options.target

  • type: string
  • default: 'html'
  • enum: ['html', 'mdx3']

Transform HTML tags as MDX 3.0 AST or not. When you using Docusaurus v3, you should use mdx3.

Options.output

  • type: string
  • default: 'img-base64'
  • enum: ['inline-svg', 'img-base64', 'img-html-base64', 'object-base64']

How to embed SVG as image. See the different and risk on Best Way To Embed SVG.

Syntax

Base

Turn

```kroki type=plantuml
  A --> B
```

Into

![plantuml](data:image/svg+xml;base64,xxxxxxxx)
Turn

```kroki type=plantuml alt=abc
  A --> B
```

Into

![abc](data:image/svg+xml;base64,xxxxxxxx)

Set classnames

<!--  when Options.output == 'img-html-base64' -->

Turn

```d2 classnames="tw-w-1/2"
A --> B
```

Into

<img classnames="tw-w-1/2" src="data:image/svg+xml;base64,xxxxxxxx" />

Troubleshooting

When you using inline-svg with mdx3 mode, You may get following error:

Error: Cannot handle unknown node `raw` when using with `@mdx-js/mdx`

You need to add rehype-raw to the complier, for example:

// docusaurus.config.mjs
import rehypeRaw from 'rehype-raw';
import { remarkKroki } from 'remark-kroki';

export default {
  presets: [
    [
      'classic',
      {
        docs: {
          remarkPlugins: [
            [
              remarkKroki,
              {
                // ...options here
                target: 'mdx3',
                output: 'inline-svg'
              }
            ]
          ],
          rehypePlugins: [
            [
              rehypeRaw,
              {
                passThrough: [
                  'mdxFlowExpression',
                  'mdxJsxFlowElement',
                  'mdxJsxTextElement',
                  'mdxTextExpression',
                  'mdxjsEsm'
                ]
              }
            ]
          ]
        }
      }
    ]
  ]
};

Related