3rd / diagram.nvim

Diagrams as code in Neovim.
118 stars 6 forks source link
neovim neovim-plugin

diagram.nvim

A Neovim plugin for rendering diagrams, powered by image.nvim. \ You'll need to set up image.nvim to use this plugin, and either Kitty or Überzug++.

https://github.com/user-attachments/assets/67545056-e95d-4cbe-a077-d6707349946d

Integrations & renderers

The plugin has a generic design with pluggable renderers and integrations. \ Renderers take source code as input and render it to an image, often by calling an external process. \ Integrations read buffers, extract diagram code, and dispatch work to the renderers.

Integration Supported renderers
markdown mermaid, plantuml, d2
neorg mermaid, plantuml, d2
Renderer Requirements
mermaid mmdc
plantuml plantuml
d2 d2

Installation

With lazy.nvim:

{
  "3rd/diagram.nvim",
  dependencies = {
    "3rd/image.nvim",
  },
  opts = { -- you can just pass {}, defaults below
    renderer_options = {
      mermaid = {
        background = nil, -- nil | "transparent" | "white" | "#hex"
        theme = nil, -- nil | "default" | "dark" | "forest" | "neutral"
        scale = 1, -- nil | 1 (default) | 2  | 3 | ...
      },
      plantuml = {
        charset = nil,
      },
      d2 = {
        theme_id = nil,
        dark_theme_id = nil,
        scale = nil,
        layout = nil,
        sketch = nil,
      },
    }
  },
},

Usage

To use the plugin, you need to set up the integrations and renderers in your Neovim configuration. Here's an example:

require("diagram").setup({
  integrations = {
    require("diagram.integrations.markdown"),
    require("diagram.integrations.neorg"),
  },
  renderer_options = {
    mermaid = {
      theme = "forest",
    },
    plantuml = {
      charset = "utf-8",
    },
    d2 = {
      theme_id = 1,
    },
  },
})

API

The plugin exposes the following API functions: