Files
mermaid/docs/layouts/development.md
2025-07-21 13:46:38 +05:30

3.5 KiB
Raw Blame History

Warning

THIS IS AN AUTOGENERATED FILE. DO NOT EDIT.

Please edit the corresponding file in /packages/mermaid/src/docs/layouts/development.md.

🛠️ How to Create a New Layout Algorithm in Mermaid

Mermaid supports pluggable layout engines, and contributors can add custom layout algorithms to support specialized rendering needs such as clustered layouts, nested structures, or domain-specific visualizations.

This guide outlines the steps required to create and integrate a new layout algorithm into the Mermaid codebase.


📦 Prerequisites

Before starting, ensure the following:

  • You have Node.js installed.
  • You have pnpm installed globally:
    npm install -g pnpm
    

🔄 Step-by-Step Integration

Refer Mermaid Contributing Guide


🧠 Implementing Your Custom Layout Algorithm

1. Create Your Layout Folder

Navigate to the relevant source directory and create a folder for your new algorithm:

cd packages/mermaid/src/layout
mkdir myCustomLayout
touch myCustomLayout/index.ts

📁 You can organize supporting files, utils, and types inside this folder.

2. Register the Layout Algorithm

Open the file:

packages/mermaid/src/rendering-util/render.ts

Inside the function registerDefaultLayoutLoaders, find the layoutLoaders array. Add your layout here:

registerDefaultLayoutLoaders([
  ...,
  {
    id: 'myCustomLayout',
    loader: () => import('../layout/myCustomLayout'),
  },
]);

This tells Mermaid how to load your layout dynamically by name (id).


🧪 Testing Your Algorithm

3. Create a Test File

To visually test your layout implementation, create a test HTML file in:

cypress/platform/

Example:

touch cypress/platform/myCustomLayoutTest.html

Inside the file, load your diagram like this:

<!DOCTYPE html>
<html>
  <head>
    <script type="module">
      import mermaid from '/dist/mermaid.esm.mjs';

      mermaid.initialize({
        startOnLoad: true,
        theme: 'default',
        layout: 'myCustomLayout', // Use your layout here
      });
    </script>
  </head>
  <body>
    <div class="mermaid">graph TD A[Node A] --> B[Node B] B --> C[Node C]</div>
  </body>
</html>

4. Open in Browser

After running pnpm dev, open your test in the browser:

http://localhost:9000/myCustomLayoutTest.html

You should see your diagram rendered using your new layout engine.


📝 Tips

  • Keep your layout algorithm modular and readable.
  • Use TypeScript types and helper functions for better structure.
  • Add comments and constraints where necessary.
  • If applicable, create a unit test and add a visual test for Cypress.

📚 Example File Structure

packages/
└── mermaid/
    └── src/
        └── layout/
            └── myCustomLayout/
                ├── index.ts
                ├── utils.ts
                └── types.ts

Final Checklist

  • All dependencies installed via pnpm i
  • Layout folder and files created under src/layout/
  • Entry registered in registerDefaultLayoutLoaders
  • HTML test file added under cypress/platform/
  • Diagram renders as expected at localhost:9000
  • Code is linted and documented

💡 Youre now ready to build advanced layout algorithms and contribute to Mermaid's growing visualization capabilities!