Json Canvas
Create and edit JSON Canvas files (.canvas) with nodes, edges, groups, and connections. Use when working with .canvas files, creating visual canvases, mind maps, flowcharts, or when the user mentions Canvas files in Obsidian.
- Type
- Skill
- Repository
- kepano/obsidian-skills
- GitHub stars
- 48.9k
- License
- MIT
- Repo last updated
- Sep 15, 2026
- Source file
- skills/json-canvas/SKILL.md
What Json Canvas is
Json Canvas is a skill published in the kepano/obsidian-skills repository on GitHub, which has about 48.9k stars. The repository describes itself as: “Agent skills for Obsidian. Teach your agent to use Obsidian CLI and open formats including Markdown, Bases, JSON Canvas.”
A skill is a folder with a SKILL.md file: frontmatter with a name and a description, followed by instructions Claude follows. Claude loads a skill automatically when a task matches its description, and you can also run it directly with a slash and its name.
Skills work in Claude Code and in Claude Cowork, which makes Json Canvas a portable way to give Claude the same method everywhere.
How to install Json Canvas
Claude Code
- Download the json-canvas folder from the repository.
- Save it as ~/.claude/skills/<skill-name>/SKILL.md for all projects, or .claude/skills/<skill-name>/SKILL.md for one project.
- Claude loads it automatically when a task matches; you can also run it with / and its name.
Claude Cowork
- Zip the skill folder so SKILL.md sits at the top level of the folder.
- Open Customize → Skills, click +, then upload the ZIP.
- Start a task that matches the description, or call it by name with /.
New to extending Cowork? Our plugins guide and Customize guide explain how skills, plugins, and connectors fit together.
Inside the source file
An excerpt from skills/json-canvas/SKILL.md, shared under the repository's MIT license. Read the full file on GitHub.
File Structure
A canvas file (.canvas) contains two top-level arrays following the JSON Canvas Spec 1.0:
{
"nodes": [],
"edges": []
}- nodes (optional): Array of node objects
- edges (optional): Array of edge objects connecting nodes
Common Workflows
1. Create a New Canvas
- Create a .canvas file with the base structure {"nodes": [], "edges": []}
- Generate unique 16-character hex IDs for each node (e.g., "6f0ad84f44ce9c17")
- Add nodes with required fields: id, type, x, y, width, height
- Add edges referencing valid node IDs via fromNode and toNode
- Validate: Parse the JSON to confirm it is valid. Verify all fromNode/toNode values exist in the nodes array
2. Add a Node to an Existing Canvas
- Read and parse the existing .canvas file
- Generate a unique ID that does not collide with existing node or edge IDs
- Choose position (x, y) that avoids overlapping existing nodes (leave 50-100px spacing)
- Append the new node object to the nodes array
- Optionally add edges connecting the new node to existing nodes
- Validate: Confirm all IDs are unique and all edge references resolve to existing nodes
3. Connect Two Nodes
- Identify the source and target node IDs
- Generate a unique edge ID
- Set fromNode and toNode to the source and target IDs
- Optionally set fromSide/toSide (top, right, bottom, left) for anchor points
- Optionally set label for descriptive text on the edge
- Append the edge to the edges array
- Validate: Confirm both fromNode and toNode reference existing node IDs
4. Edit an Existing Canvas
- Read and parse the .canvas file as JSON
- Locate the target node or edge by id
- Modify the desired attributes (text, position, color, etc.)
- Write the updated JSON back to the file
- Validate: Re-check all ID uniqueness and edge reference integrity after editing
Nodes
Nodes are objects placed on the canvas. Array order determines z-index: first node = bottom layer, last node = top layer.
Generic Node Attributes
Text Nodes
{
"id": "6f0ad84f44ce9c17",
"type": "text",
"x": 0,
"y": 0,
"width": 400,
"height": 200,
"text": "# Hello World\n\nThis is **Markdown** content."
}Newline pitfall: Use \n for line breaks in JSON strings. Do not use the literal \\n -- Obsidian renders that as the characters \ and n.
File Nodes
{
"id": "a1b2c3d4e5f67890",
"type": "file",
"x": 500,
"y": 0,
"width": 400,
"height": 300,
"file": "Attachments/diagram.png"
}Link Nodes
{
"id": "c3d4e5f678901234",
"type": "link",
"x": 1000,
"y": 0,
"width": 400,
"height": 200,
"url": "https://obsidian.md"
}Group Nodes
Groups are visual containers for organizing other nodes. Position child nodes inside the group's bounds.
{
"id": "d4e5f6789012345a",
"type": "group",
"x": -50,
"y": -50,
"width": 1000,
"height": 600,
"label": "Project Overview",
"color": "4"
}Edges
Edges connect nodes via fromNode and toNode IDs.
{
"id": "0123456789abcdef",
"fromNode": "6f0ad84f44ce9c17",
"fromSide": "right",
"toNode": "a1b2c3d4e5f67890",
"toSide": "left",
"toEnd": "arrow",
"label": "leads to"
}Colors
The canvasColor type accepts either a hex string or a preset number:
Preset color values are intentionally undefined -- applications use their own brand colors.
ID Generation
Generate 16-character lowercase hexadecimal strings (64-bit random value):
"6f0ad84f44ce9c17"
"a3b2c1d0e9f8a7b6"Layout Guidelines
- Coordinates can be negative (canvas extends infinitely)
- x increases right, y increases down; position is the top-left corner
- Space nodes 50-100px apart; leave 20-50px padding inside groups
Before you install
- Read the whole file first. Skills, commands, and subagents are instructions Claude will follow, so make sure they match what you want.
- Check which tools, scripts, or MCP servers it uses. Local servers and scripts run with your permissions.
- Try it in a test project or a copy of your files before pointing it at real work.
- Pin the version you tested, and review changes before updating.
- Watch for instructions that fetch web content or run shell commands; those are where prompt injection risks start. See our prompt injection guide.
FAQ
What is Json Canvas?
Json Canvas is a skill for Claude Code and Claude Cowork from the kepano/obsidian-skills repository on GitHub. Create and edit JSON Canvas files (.canvas) with nodes, edges, groups, and connections. Use when working with .canvas files, creating visual canvases, mind maps, flowcharts, or when the user mentions Canvas files in Obsidian.
How do I install Json Canvas in Claude Code?
Download the json-canvas folder from the repository. Save it as ~/.claude/skills/<skill-name>/SKILL.md for all projects, or .claude/skills/<skill-name>/SKILL.md for one project. Claude loads it automatically when a task matches; you can also run it with / and its name.
Can I use Json Canvas in Claude Cowork?
Zip the skill folder so SKILL.md sits at the top level of the folder. Open Customize → Skills, click +, then upload the ZIP. Start a task that matches the description, or call it by name with /.
Is Json Canvas safe to install?
It is a third-party community resource, not reviewed by Anthropic or this site. Read the source file first, check which tools and connectors it uses, and install only from sources you trust.
Similar resources
- Obsidian Create and edit Obsidian vault files including Markdown, Bases, and Canvas. Use when working with .md, .base, or .canvas files in an… Plugin · kepano/obsidian-skills
- Scientific Thinking & Analysis Comprehensive analysis tools and document processing for scientific research workflows Skill · K-Dense-AI/scientific-agent-skills
- Academic Paper 12-agent academic paper writing pipeline. 11 modes… Skill · Imbad0202/academic-research-skills
- GitHub Copilot Skills 324 official GitHub Copilot plugin skills across Azure, .NET, Docker, and more Skill · github/awesome-copilot
- Ad Creative When the user wants to generate, iterate, or scale ad creative — headlines, descriptions, primary text, or full ad variations — for any paid advertising platform. Also use when the user mentions 'ad copy variations,' 'ad creative,' 'generate headlines,' 'RSA headlines,' 'bulk ad copy,' 'ad iterations,' 'creative testing,' 'write me some ads,' 'Facebook ad copy,' 'Google ad headlines,' 'LinkedIn… Skill · coreyhaines31/marketingskills
- Ai Slop Cleaner Clean AI-generated code slop with a regression-safe, deletion-first workflow and optional reviewer-only mode Skill · Yeachan-Heo/oh-my-claudecode
- Last30days Research what people actually say about any topic in the last 30 days. Pulls posts and engagement from Reddit, X, YouTube, TikTok, Hacker News, Polymarket, GitHub, and the web. Includes a doctor health check to diagnose broken or missing sources. Skill · mvanhorn/last30days-skill
- Acquiring Disk Image With Dd And Dcfldd Create forensically sound bit-for-bit disk images using dd and dcfldd while preserving evidence integrity through hash verification. Skill · mukul975/Anthropic-Cybersecurity-Skills