James Wolensky420 downloadsDraw with native stylus and Apple Pencil directly in Canvas nodes and Markdown embeds.
Native stylus and Apple Pencil drawing for Obsidian.
Blackboard adds a .blackboard file type with pressure-sensitive freehand drawing and palm rejection, and lets you draw directly inside Obsidian Canvas nodes and Markdown embeds — no separate editor to open first. It is built for iPad with Apple Pencil, and works on desktop with a mouse.
.blackboard view, one finger pans and two fingers pinch-zoom the infinite canvas; on desktop, hold Space and drag to pan. The stylus keeps drawing throughout.|WxH size on a Markdown embed), never baked into the file. Resizing scales the drawing without distortion; strokes are clipped to the node and never resize it..svg alongside each drawing on save..blackboard files are human-readable JSON that diffs cleanly in Git.Blackboard focuses on fast, native pen drawing that lives inside your notes and canvases. Excalidraw is a full diagramming tool; Ink is another handwriting plugin. They're built for different things.
| Blackboard | Excalidraw | Ink | |
|---|---|---|---|
| Draw directly on a Canvas node (no open-to-edit step) | ✓ | ✗ | ✗¹ |
| Live drawing in a Markdown embed | ✓ | ✗ | ✓² |
| Strokes reliably persist on reload | ✓ | ✓ | ⚠️³ |
| Plain-text, git-diffable files | ✓ | ✗⁴ | ✗⁴ |
| Diagramming: shapes, arrows, text | ✗⁵ | ✓ | ✗ |
| Primary focus | pen drawing | diagramming | handwriting |
Need rich diagramming? Use Excalidraw — it's excellent at it.
main.js, manifest.json, and styles.css from the latest release.<vault>/.obsidian/plugins/blackboard/.jameswolensky/obsidian-blackboard.Run Blackboard: New drawing from the command palette. This creates a .blackboard file and opens it.
A single floating toolbar follows whichever drawing is active. It holds the pen, highlighter, and eraser; a color control (preset swatches plus a color wheel); a brush-size control; undo/redo; and a button to collapse it to a small pill. Tool, color, and size apply to every drawing on the page — pick a color once and it stays as you move between drawings and switch tools.


Embed a drawing like any file: ![[My Drawing.blackboard]]. Set a size with the standard Obsidian syntax, e.g. ![[My Drawing.blackboard|640x480]] or ![[My Drawing.blackboard|100%]]. You can draw on the embed directly.

Enable Auto-export SVG in settings to write a .svg next to each drawing whenever it is saved (renames and deletes are kept in sync). Set SVG export path to collect exports in one folder.
| Command | Description |
|---|---|
| New drawing | Create a new .blackboard file and open it |
| Insert drawing | Create a drawing and embed it at the cursor in a note, or as a node in the active Canvas |
| Insert existing drawing | Pick an existing .blackboard file and embed it at the cursor / in the active Canvas |

| Setting | Default | Description |
|---|---|---|
| Drawing folder | Blackboard |
Folder for new drawing files |
| New file location | Fixed folder | Create new drawings in the fixed folder, or alongside the active file |
| Auto-export SVG | Off | Write an .svg alongside each drawing on save |
| SVG export path | (same folder) | Folder for exported SVGs (shown when Auto-export SVG is on) |
| Board background | #000000 |
Color painted behind every drawing — set white for a whiteboard |
| Toolbar palette (Color 1–8) | see below | The eight swatches in the toolbar color popover |
| Show toolbar pill | On | Show the collapsed pen-icon pill on Canvas with no active drawing |
The default toolbar palette is #000000, #ffffff, #ff0000, #0000ff, #00ff00, #ffff00, #ffa500, #800080. Pen, highlighter, and eraser sizes and colors are chosen live from the floating toolbar; they are not separate settings.
| Platform | Input | Notes |
|---|---|---|
| iPad + Apple Pencil | Full pressure | Primary target |
| iPad (touch) | Navigation only | One finger pans, two-finger pinch zooms; the stylus draws |
| Android tablet + stylus | Pressure varies by device | Supported |
| Desktop (mouse) | Uniform width (no pressure) | Supported |
.blackboard files are JSON:
{
"version": 3,
"width": 320,
"height": 240,
"strokes": [
{
"id": "abc123",
"tool": "pen",
"color": "#ffffff",
"size": 2,
"opacity": 1,
"points": [[100, 200, 0.5], [101, 201, 0.6]],
"hasPressure": true,
"timestamp": 1711281600000
}
],
"background": { "color": "transparent" },
"contentBounds": { "x": 80, "y": 180, "width": 60, "height": 50 }
}
Each stroke is an array of [x, y, pressure] points in drawing-space. width/height and contentBounds cache the strokes' bounding box for previews and are recomputed from the strokes; display size is decided by each embed, not the file. Files from earlier versions are read without loss.
Requires Node.js 24 and npm.
npm install
npm run dev # watch build
npm run build # production build
npm test # unit tests (Vitest)
npm run check # typecheck + tests + build
iPad-specific rendering (Apple WebKit) can't be reproduced by the desktop/Electron test runner; verify anything iPad-specific manually in the iOS Simulator (requires Xcode). The static harnesses in test/webkit/ render the toolbar and engine in real WebKit for that.
See CONTRIBUTING.md for the contribution workflow and conventions.
MIT © James Wolensky