Search...Search plugins and themes...
⌘K
Sign in
  • Get started
  • Download
  • Pricing
  • Enterprise
  • Account
  • Obsidian
  • Overview
  • Sync
  • Publish
  • Canvas
  • Mobile
  • Web Clipper
  • CLI
  • Learn
  • Help
  • Developers
  • Changelog
  • About
  • Roadmap
  • Blog
  • Resources
  • System status
  • License overview
  • Terms of service
  • Privacy policy
  • Security
  • Community
  • Plugins
  • Themes
  • Discord
  • Forum / 中文论坛
  • Merch store
  • Brand guidelines
Follow us
DiscordTwitterBlueskyThreadsMastodonYouTubeGitHub
© 2026 Obsidian

Sketchdown

Magnus HaggrenMagnus Haggren33 downloads

Draw Balsamiq-style wireframes in Excalidraw from a short text spec, as native, editable Excalidraw elements.

Add to Obsidian
  • Overview
  • Scorecard
  • Updates5

Balsamiq-style wireframes for Excalidraw inside Obsidian. Write a few lines of text and get a hand-drawn screen made of native Excalidraw elements: rectangles, lines and text you can annotate, connect with arrows and keep drawing around.

dialog: Delete user?
  text: Anna Svensson will lose access.
  buttons: Cancel | *Delete

Every component, drawn from one spec

Pasting a spec onto a drawing

Install

Sketchdown needs the Excalidraw plugin 2.0.0 or newer.

Until Sketchdown is listed in Obsidian's community plugins, install it with BRAT: run BRAT: Add a beta plugin for testing and enter magnushaggren/sketchdown. Then enable Sketchdown under Community plugins. Sketchdown is desktop-only for now; it hasn't been tested on mobile yet.

Use

In a drawing

  • Paste a spec onto the canvas. A ```sketchdown code block is always drawn; plain text is drawn when it is a valid spec (a setting). Ctrl/Cmd+Shift+V pastes plain text instead.
  • Sketchdown: Create or edit wireframe opens an editor with a live preview:
    • with a wireframe selected, it edits that wireframe and redraws it in place;
    • with a single text element selected, it turns the text into a wireframe;
    • with nothing selected, it starts a new one.
  • Edit wireframe, a button above a selected wireframe, does the same.

Editing a wireframe with the toolbar button

  • Sketchdown: Insert component opens the editor on a palette of snippets, from a single button to a whole app screen.

In a note

A ```sketchdown code block is drawn as a wireframe in reading view and live preview. Copy for Excalidraw under it copies the block for pasting into a drawing, and Sketchdown: Send wireframe to Excalidraw, with the cursor in the block, draws it in the drawing you used last.

Sending a note block to a drawing

The text is the truth

A wireframe is a group of ordinary Excalidraw elements that remembers its spec. Editing the spec redraws the whole group, so changes made by hand inside the group are lost on the next edit. Annotations, arrows and shapes outside the group are not touched.

Syntax

One component per line, keyword: content (options). Indentation nests components inside containers such as box, row, tabs and dialog. * marks the selected or primary item, | separates items, {icon} draws an icon, [text] a link and -text- grey text. The full reference is docs/SYNTAX.md.

Keyword (aliases) Example
button (btn) button: *Save
dropdown (select, combo, combobox) dropdown: *Sweden | Norway
checkbox (check, checkboxes) checkbox: [x] Email | [ ] SMS
text (label) text: Role
grid (table, datagrid) grid, then rows like Anna, Developer
tabs (tab) tabs: A | *B | C
box (panel, group) box: New user
section section: {users} Ownership (count=3)
form form: New user (label=140)
field field: Customer | search: Search...
row row:
icon icon: search
input (field, textbox) input: Anna
search search: Find users
password password: secret
spin (number, stepper) spin: 12
textarea textarea: Notes
h1 (heading) h1: Users
h2 (subheading) h2: Details
columns (cols) columns: (w=1200, h=700)
nav (navigation) nav: {home} Home | *{users} Users | - | Log out
avatar avatar: AS
details (properties) details: {phone} Phone | 070-123
window window: Settings
dialog (modal) dialog: Delete user?
browser browser: My app | example.com
phone phone: Users
buttons buttons: Cancel | *OK
link link: Forgot password?
paragraph (p, lorem) paragraph: lorem (lines=4)
radio (radios, option) radio: Small | *Medium | Large
toggle (switch) toggle: [on] Wi-Fi | [off] Bluetooth
slider (range) slider: 40%
alert (message, notice) alert: {info} Saved! [Undo]
progress progress: Uploading 60%
tooltip (hint) tooltip: Copied!
image (img, picture) image: 320x180 Team photo
breadcrumb (breadcrumbs, crumbs) breadcrumb: Home > Users > Anna
pagination (pager, pages) pagination: < 1 *2 3 … 10 >
menu (contextmenu) menu: Copy | Ctrl+C
tree tree: Project
placeholder placeholder: 240x40 Date picker

Screenshot to wireframe

The screenshot-to-sketchdown skill teaches an AI agent such as Claude to turn a screenshot of a UI into a Sketchdown spec. Parts it can't draw become sized placeholder boxes, and it reports which components are missing. It checks its own work with a bundled script that renders the spec (Node, plus Chrome or Edge for images).

  • Claude Code: copy the skills/screenshot-to-sketchdown folder to ~/.claude/skills/.
  • Claude apps: zip the folder and upload it under Settings → Capabilities.

Then share a screenshot and ask for a Sketchdown wireframe. Paste the result into a drawing.

Settings

  • Colours of fills, primary buttons, selections, links, dark panels and more.
  • Font size and gaps between and inside components.
  • Pasting: whether plain text that is a valid spec becomes a wireframe.
  • Notes: whether code blocks are drawn.
  • Stroke and font: take the stroke colour, font and sloppiness from the drawing, or use a fixed style. Notes always use the fixed style.

Develop

  • npm run dev: watch build to main.js
  • npm run build: type-check and production build
  • npm test: run the tests
  • npm run sketch -- spec.txt out.svg out.png: check a spec and render it outside Obsidian
  • npm run skill: regenerate the skill's syntax reference and checker
  • npm run cheatsheet: regenerate the cheat sheet above from docs/SYNTAX.md

Credits

  • Inspired by Balsamiq.
  • Syntax ideas from Wireframy (MIT), which also has an Obsidian plugin that renders wireframes in notes.
  • Built on Excalidraw and the Obsidian Excalidraw plugin by Zsolt Viczián.
  • Hand-drawn rendering in notes by Rough.js.

Licence: MIT.

HealthExcellent
ReviewSatisfactory
About
Create Balsamiq-style wireframes in Excalidraw from simple text specs, producing hand-drawn rectangles, lines and text you can annotate and connect. Edit specs with a live preview, insert reusable components from a snippet palette, render sketchdown code blocks in notes, or send them to Excalidraw.
DrawingCanvasIntegrations
Details
Current version
1.0.1
Last updated
Last week
Created
Last month
Updates
5 releases
Downloads
33
Compatible with
Obsidian 1.7.2+
Platforms
Desktop only
License
MIT
Report bugRequest featureReport plugin
Author
Magnus HaggrenMagnus Haggrenmagnushaggren
GitHubmagnushaggren
  1. Community
  2. Plugins
  3. Drawing
  4. Sketchdown

Related plugins

Excalidraw

Visual PKM powerhouse. Create and edit Excalidraw drawings.

Advanced Canvas

Supercharge your canvas experience. Create presentations, flowcharts and more.

BRAT

Easily install a beta version of a plugin for testing.

LanguageTool Integration

Advanced grammar and spell checking, powered by LanguageTool.

Self-hosted LiveSync

Sync vaults securely to self-hosted servers or WEBRTC.

Fast Note Sync

Real-time sync of your vaults across server, mobile, and web; shareable with anyone; supports REST and MCP integrations to build your personal AI knowledge base.

Mermaid Tools

Improved Mermaid.js experience: visual toolbar with common elements and more.

Custom Frames

Turn web apps into panes using iframes with custom styling. Also comes with presets for Google Keep, Todoist and more.

Local REST API with MCP

Unlock your automation needs by interacting with your notes over a secure REST API.

Google Drive Sync

Syncs a vault into Google Drive for cross-platform use (works for iOS).