Multi-platform diagram embedding guide for GitHub, Confluence, Jira, Azure DevOps, Notion, Teams, and Harness
From drawio-diagrammingnpx claudepluginhub markus41/claude --plugin drawio-diagrammingThis skill uses the workspace's default tool permissions.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Searches prompts.chat for AI prompt templates by keyword or category, retrieves by ID with variable handling, and improves prompts via AI. Use for discovering or enhancing prompts.
Guides agent creation for Claude Code plugins with file templates, frontmatter specs (name, description, model), triggering examples, system prompts, and best practices.
| Format | Editable | Displayable | Best For |
|---|---|---|---|
.drawio | Yes (native) | No (needs app) | Source of truth |
.drawio.svg | Yes (embedded XML) | Yes (renders as SVG) | GitHub, web, markdown |
.drawio.png | Yes (embedded XML) | Yes (renders as PNG) | Confluence, Jira, email |
.svg (exported) | No | Yes | Static documentation |
.png (exported) | No | Yes | Universal fallback |
.pdf (exported) | No | Yes | Print, formal docs |
Recommended default: Use .drawio.svg files. They render as images everywhere SVG is supported while retaining the editable XML inside the SVG metadata. Re-open in draw.io to edit.
Store diagrams alongside code in docs/ or diagrams/ directories:
project/
docs/
architecture.drawio.svg
data-flow.drawio.svg
er-diagram.drawio.svg
src/
README.md
Reference .drawio.svg files in any markdown file (README, wiki, PR descriptions):
## Architecture

## Data Flow

GitHub renders SVG files inline. Clicking the image shows the full SVG.
Include diagrams in PR descriptions to document changes:
## Changes
This PR refactors the authentication flow:


For PR comments, upload PNG exports directly or link to SVG files in the branch.
GitHub wikis support the same image syntax:

Or reference from the repo:

Create .github/workflows/drawio-export.yml to automatically convert .drawio files to SVG on push:
name: Export draw.io Diagrams
on:
push:
paths:
- '**/*.drawio'
jobs:
export:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install draw.io Desktop (CLI)
run: |
wget -q https://github.com/jgraph/drawio-desktop/releases/download/v24.7.17/drawio-amd64-24.7.17.deb
sudo apt-get install -y ./drawio-amd64-24.7.17.deb
sudo apt-get install -y xvfb
- name: Export changed .drawio to .drawio.svg
run: |
CHANGED=$(git diff --name-only HEAD~1 HEAD -- '*.drawio')
for file in $CHANGED; do
output="${file}.svg"
xvfb-run -a drawio --export --format svg --embed-diagram \
--output "$output" "$file"
echo "Exported: $output"
done
- name: Commit exported SVGs
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add '*.drawio.svg'
git diff --cached --quiet || git commit -m "chore: auto-export draw.io diagrams"
git push
Alternatively use the community action:
- name: Export draw.io
uses: rlespinasse/drawio-export-action@v2
with:
format: svg
transparent: true
embed-diagram: true
output: docs/
Install the hediet.vscode-drawio extension:
// .vscode/extensions.json
{
"recommendations": [
"hediet.vscode-drawio"
]
}
This allows editing .drawio, .drawio.svg, and .drawio.png files directly in VS Code with a graphical editor. Files are saved in the draw.io format and render correctly on GitHub.
For interactive diagrams on GitHub Pages, embed the draw.io viewer:
<!-- docs/index.html -->
<div class="mxgraph" data-mxgraph='{"url":"architecture.drawio.svg","highlight":"#0000ff","nav":true,"resize":true}'>
</div>
<script src="https://viewer.diagrams.net/js/viewer-static.min.js"></script>
Or use an iframe:
<iframe
src="https://viewer.diagrams.net/?url=https://raw.githubusercontent.com/org/repo/main/docs/architecture.drawio.svg&nav=1"
width="100%" height="600" frameborder="0">
</iframe>
The official draw.io app (by draw.io AG) is the most popular Confluence marketplace app. It adds native diagram capabilities.
+ button or type /drawioReference a diagram from another Confluence page:
For whiteboard-style collaborative diagrams:
Manage diagrams programmatically via Confluence REST API:
# Get page content (includes draw.io macro XML)
curl -u user:token \
"https://your-confluence.atlassian.net/wiki/rest/api/content/PAGE_ID?expand=body.storage" \
| jq -r '.body.storage.value'
# Update page with new diagram
curl -X PUT -u user:token \
-H "Content-Type: application/json" \
"https://your-confluence.atlassian.net/wiki/rest/api/content/PAGE_ID" \
-d '{
"version": {"number": NEW_VERSION},
"title": "Page Title",
"type": "page",
"body": {
"storage": {
"value": "<ac:structured-macro ac:name=\"drawio\">...</ac:structured-macro>",
"representation": "storage"
}
}
}'
draw.io for Confluence includes a Gliffy mass importer:
| Feature | Cloud | Data Center |
|---|---|---|
| Real-time collaboration | Yes | Yes |
| Custom libraries | Yes | Yes |
| Gliffy import | Yes | Yes |
| Custom colors/fonts | Yes | Yes |
| Lockdown (restrict editing) | Yes | Yes |
| Custom templates | Yes | Yes |
| Revision history | Via page versions | Via page versions |
If using draw.io for Confluence, reference those diagrams in Jira:
!confluence-page-url|draw.io diagram!
Configure a custom field to store diagram page references:
Link diagrams to workflow statuses:
## Acceptance Criteria
- [ ] Implementation matches [architecture diagram](confluence-link)
- [ ] Updated sequence diagram reflects API changes
Azure DevOps wikis support markdown image syntax. Export diagrams as SVG or PNG and embed:
## System Architecture

Or reference from the repository:

Create an Azure Pipeline to auto-export .drawio files on commit:
# azure-pipelines.yml
trigger:
paths:
include:
- '**/*.drawio'
pool:
vmImage: 'ubuntu-latest'
steps:
- task: Bash@3
displayName: 'Install draw.io CLI'
inputs:
targetType: 'inline'
script: |
wget -q https://github.com/jgraph/drawio-desktop/releases/download/v24.7.17/drawio-amd64-24.7.17.deb
sudo apt-get install -y ./drawio-amd64-24.7.17.deb
sudo apt-get install -y xvfb
- task: Bash@3
displayName: 'Export draw.io to SVG'
inputs:
targetType: 'inline'
script: |
find . -name "*.drawio" -not -path "*/node_modules/*" | while read file; do
output="${file}.svg"
xvfb-run -a drawio --export --format svg \
--embed-diagram --output "$output" "$file"
echo "Exported: $output"
done
- task: Bash@3
displayName: 'Commit exported files'
inputs:
targetType: 'inline'
script: |
git config user.name "Azure Pipeline"
git config user.email "pipeline@dev.azure.com"
git add '*.drawio.svg'
git diff --cached --quiet || git commit -m "chore: auto-export draw.io diagrams"
git push origin HEAD:$(Build.SourceBranchName)
- task: PublishPipelineArtifact@1
displayName: 'Publish diagram artifacts'
inputs:
targetPath: '$(Build.SourcesDirectory)'
artifact: 'diagrams'
publishLocation: 'pipeline'
Attach diagram images to work items:
drawio --export --format png --output diagram.png file.drawiocurl -X POST \
-H "Content-Type: application/octet-stream" \
-H "Authorization: Basic $(echo -n :$PAT | base64)" \
--data-binary @diagram.png \
"https://dev.azure.com/org/project/_apis/wit/attachments?fileName=architecture.png&api-version=7.1"
Azure DevOps wikis natively support Mermaid for simple diagrams:
::: mermaid
graph TD
A[Client] --> B[API Gateway]
B --> C[Service A]
B --> D[Service B]
:::
Use Mermaid for quick, simple diagrams. Use draw.io for complex architecture diagrams requiring precise layout and cloud icons.
Install the draw.io for Notion Chrome extension to edit diagrams inline in Notion pages.
/embed > paste URL.drawio.svghttps://viewer.diagrams.net/?url=ENCODED_URL_TO_DRAWIO_FILE
Paste this URL into a Notion /embed block for an interactive viewer.
Upload diagram images programmatically:
import requests
# Upload diagram image to Notion page
notion_api = "https://api.notion.com/v1"
headers = {
"Authorization": f"Bearer {NOTION_TOKEN}",
"Notion-Version": "2022-06-28",
"Content-Type": "application/json"
}
# Add image block to page
payload = {
"children": [
{
"object": "block",
"type": "image",
"image": {
"type": "external",
"external": {
"url": "https://raw.githubusercontent.com/org/repo/main/docs/arch.drawio.svg"
}
}
}
]
}
response = requests.patch(
f"{notion_api}/blocks/{PAGE_ID}/children",
headers=headers,
json=payload
)
.drawio files in OneDrive or SharePointPin a diagram as a Teams tab:
+ (Add a Tab)https://viewer.diagrams.net/?url=SHAREPOINT_URL_TO_DRAWIO_FILE&nav=1
Include diagram thumbnails in Adaptive Cards for bot messages:
{
"type": "AdaptiveCard",
"version": "1.4",
"body": [
{
"type": "TextBlock",
"text": "Architecture Update",
"weight": "Bolder",
"size": "Medium"
},
{
"type": "Image",
"url": "https://raw.githubusercontent.com/org/repo/main/docs/architecture.png",
"altText": "Architecture Diagram",
"size": "Large"
}
],
"actions": [
{
"type": "Action.OpenUrl",
"title": "Edit in draw.io",
"url": "https://app.diagrams.net/#Horg/repo/main/docs/architecture.drawio"
}
]
}
Create a Power Automate flow to notify Teams when diagrams are updated:
.drawio files)Embed diagram images in Harness pipeline step descriptions:
# harness-pipeline.yaml
pipeline:
name: Deploy Production
description: |
Deployment follows this architecture:

stages:
- stage:
name: Build
spec:
execution:
steps:
- step:
name: Export Diagrams
type: Run
spec:
shell: Bash
command: |
# Export draw.io diagrams for documentation
for f in docs/*.drawio; do
drawio --export --format svg --embed-diagram \
--output "${f}.svg" "$f"
done
Harness documentation pages support markdown with embedded images:
# Deployment Architecture

## Network Flow

Generate deployment diagrams from pipeline definitions:
#!/usr/bin/env python3
"""Generate a draw.io deployment diagram from a Harness pipeline YAML."""
import yaml
import xml.etree.ElementTree as ET
def pipeline_to_drawio(pipeline_yaml: str) -> str:
pipeline = yaml.safe_load(pipeline_yaml)
stages = pipeline.get('pipeline', {}).get('stages', [])
root = ET.Element('mxGraphModel')
root_elem = ET.SubElement(root, 'root')
ET.SubElement(root_elem, 'mxCell', id='0')
ET.SubElement(root_elem, 'mxCell', id='1', parent='0')
x, y = 100, 50
prev_id = None
for i, stage_wrapper in enumerate(stages):
stage = stage_wrapper.get('stage', {})
cell_id = f'stage_{i}'
cell = ET.SubElement(root_elem, 'mxCell',
id=cell_id,
value=stage.get('name', f'Stage {i}'),
style='rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;',
vertex='1', parent='1')
geo = ET.SubElement(cell, 'mxGeometry',
x=str(x), y=str(y), width='160', height='60')
geo.set('as', 'geometry')
if prev_id:
edge = ET.SubElement(root_elem, 'mxCell',
id=f'e_{i}',
style='edgeStyle=orthogonalEdgeStyle;',
edge='1', source=prev_id, target=cell_id, parent='1')
edge_geo = ET.SubElement(edge, 'mxGeometry', relative='1')
edge_geo.set('as', 'geometry')
prev_id = cell_id
y += 100
return ET.tostring(root, encoding='unicode', xml_declaration=False)
Add diagram references to execution logs via shell steps:
echo "##[group]Architecture Reference"
echo "See deployment diagram: https://viewer.diagrams.net/?url=..."
echo "##[endgroup]"
All platform integrations benefit from CLI export. Key commands:
# Export to SVG with embedded diagram (editable SVG)
drawio --export --format svg --embed-diagram --output out.drawio.svg input.drawio
# Export to PNG with embedded diagram (editable PNG)
drawio --export --format png --embed-diagram --output out.drawio.png input.drawio
# Export to PDF
drawio --export --format pdf --output out.pdf input.drawio
# Export specific page
drawio --export --format svg --page-index 0 --output page1.svg input.drawio
# Export all pages
drawio --export --format svg --all-pages --output output-dir/ input.drawio
# Export with specific dimensions
drawio --export --format png --width 1920 --output out.png input.drawio
# Export with transparent background
drawio --export --format png --transparent --output out.png input.drawio
# Export with border padding
drawio --export --format svg --border 10 --output out.svg input.drawio
# Crop to content (remove whitespace)
drawio --export --format svg --crop --output out.svg input.drawio
For headless environments (CI/CD), wrap with xvfb-run:
xvfb-run -a drawio --export --format svg --embed-diagram --output out.svg input.drawio
Recommended workflow for teams using multiple platforms:
.drawio files in Git repository.drawio.svg on push (GitHub Actions / Azure Pipelines).drawio.svg in README and PR descriptionsThis ensures a single source of truth with automatic distribution to all platforms.