| .github/workflows | ||
| docs/images | ||
| scripts | ||
| src | ||
| tests | ||
| .gitignore | ||
| .npmrc | ||
| .nvmrc | ||
| CHANGELOG.md | ||
| esbuild.config.mjs | ||
| LICENSE | ||
| manifest.json | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| styles.css | ||
| tsconfig.json | ||
| version-bump.mjs | ||
| versions.json | ||
Inkplane
A Pencil-first infinite canvas for Obsidian
Inkplane gives handwriting and sketches their own dedicated space inside Obsidian. Every drawing is a portable .inklayer file in your vault: open it as an edge-to-edge canvas, draw naturally with Apple Pencil or another pen, and embed it in any note when you want it in context.
Draw on an infinite canvas, then embed the result directly in any Obsidian note.
Why Inkplane?
- Made for Pencil input. Pressure-aware ink, palm rejection, coalesced pointer samples, and iPad-safe controls.
- A real canvas, not a note overlay. Draw without being constrained by Markdown layout or page dimensions.
- Native to your vault. Drawings are readable JSON files that move, sync, rename, and back up with the rest of your notes.
- Embed only when useful. Place a read-only preview in any Markdown note and open the source canvas with one action.
- Private by default. No accounts, network requests, analytics, or telemetry.
Quick start
- Run Inkplane: Create new drawing or select the pen icon in the ribbon.
- Draw with Apple Pencil. Use one finger to pan and two fingers to zoom on iPad.
- In a note, run Inkplane: Insert existing drawing in current note to add the canvas as an embed.
Inkplane stores new drawings in the Inkplane folder by default. Both the folder and default embed dimensions are configurable in Settings → Inkplane.
The canvas
Inkplane keeps the controls compact so the drawing remains the focus:
- Pressure-aware pen and translucent highlighter
- Area eraser that removes only the touched part of a stroke
- Lasso selection, movement, and deletion
- Undo and redo history
- Infinite pan and pinch/trackpad zoom
- Stroke-aware fit-to-view
- Quick colour swatches plus theme-matched, preset, and custom ink colours
- Live previews, width presets, and precise size controls for every drawing tool
- Configurable top or bottom toolbar with iPad safe-area support
- SVG export to a normal vault attachment
The Pencil-first canvas on iPad, with drawing tools, quick colours, and zoom controls close at hand.
Settings
Open Settings → Inkplane to configure:
- The folder for new
.inklayerdrawings and default embed dimensions - Pen and highlighter colours and widths, eraser size, and pressure response
- Palm rejection and optional finger or mouse drawing
- Top or bottom toolbar placement
Embedding drawings
Run Inkplane: Insert new drawing in current note to create, embed, and open a canvas in one flow. To reuse a drawing, run Insert existing drawing in current note.
Inkplane generates ordinary Obsidian embed syntax:
![[Inkplane/Project sketch.inklayer|800x600]]
Change 800x600 to control the preview size. Embedded canvases are intentionally read-only so they never capture note scrolling. Double-click a preview, or use its expand control, to open the source drawing.
Installation
Obsidian Community plugins
- Open Settings → Community plugins in Obsidian.
- Turn on community plugins if Obsidian prompts you to leave Restricted Mode.
- Select Browse, search for Inkplane, and select Install.
- Select Enable when installation finishes.
Obsidian installs updates from Inkplane's matching GitHub releases.
Beta testing with BRAT
To test a release before it reaches the Community directory, use BRAT:
- Install and enable BRAT.
- Run BRAT: Add a beta plugin for testing.
- Enter
https://github.com/SirwanAfifi/inkplane. - Enable Inkplane in Settings → Community plugins.
BRAT will keep the plugin updated from GitHub releases.
Manual installation
- Download
main.js,manifest.json, andstyles.cssfrom the latest release. - Create
<vault>/.obsidian/plugins/ink-layer/. - Copy the three files into that folder.
- Reload Obsidian and enable Inkplane under Community plugins.
The folder remains ink-layer for compatibility with existing installations; the product name shown in Obsidian is Inkplane.
Commands
| Command | What it does |
|---|---|
| Create new drawing | Creates and opens a standalone canvas. |
| Insert new drawing in current note | Creates a drawing, embeds it, and opens it. |
| Insert existing drawing in current note | Chooses and embeds a drawing from the configured drawing folder. |
| Export current drawing as SVG | Writes a scalable image attachment to the vault. |
| Convert legacy ink from current note to a drawing | Copies version 0.1 note ink into a standalone canvas. |
| Select pen / highlighter / eraser / lasso / pan | Switches tools from the command palette or a custom hotkey. |
| Switch between pen and eraser | Toggles between the two tools on the active canvas. |
| Undo ink / Redo ink / Fit drawing / Clear drawing | Controls the active canvas. |
Platform support
| Platform | Experience |
|---|---|
| iPad + Apple Pencil | Primary experience: Pencil draws, one finger pans, and two fingers zoom. |
| Windows pen devices | Supported through standard browser PointerEvent pen input. |
| Desktop + trackpad | Draw with a mouse if enabled; pan and zoom with the trackpad or canvas tools. |
| Touch devices | Palm rejection is on by default; optional finger drawing is available in settings. |
Inkplane uses web-standard pointer type, pressure, tilt, pointer capture, and coalesced events. Apple Pencil double-tap and Pencil Pro squeeze are not exposed consistently to Obsidian community plugins by the iPad WebView, so Inkplane does not claim to intercept those private hardware gestures.
Files, migration, and privacy
Each .inklayer file is readable JSON. Stroke points are stored as compact tuples containing position, pressure, tilt, and time, while the drawing file retains its canvas metadata. This format follows normal Obsidian Sync, backup, rename, and file-management workflows.
Ink created by Inkplane 0.1 remains untouched in the plugin's data.json. Open the original note and run Convert legacy ink from current note to a drawing to copy those strokes into a standalone file and insert an embed. The original data is deliberately retained as a backup.
Inkplane makes no network requests and collects no telemetry. The existing-drawing picker searches only the configured drawing folder and does not enumerate other vault file paths. The only files Inkplane writes are plugin settings, .inklayer drawings, and SVG exports you explicitly request.
Development
Requirements: Node.js, npm, and Obsidian 1.7.2 or newer.
npm install
npm run check
npm run check runs the test suite, production build, and release validation. For local development, clone the repository into <vault>/.obsidian/plugins/ink-layer, run npm run dev, and reload Obsidian when the bundle changes.
A release consists of:
main.js
manifest.json
styles.css
The runtime uses Obsidian's mobile-safe APIs and does not import Node.js or Electron APIs. Bug reports and feature requests are welcome in GitHub Issues.
Compatibility promise
The internal plugin ID remains ink-layer, and drawing files retain the .inklayer extension. This preserves upgrades, existing installations, embeds, and vault data across the Inkplane rebrand.
License
MIT © Sirwan Afifi

