Handwriting Markdown View
approvedby Daniel Xu
A vector handwriting annotation view layered over rendered Markdown, with pen/touch separation, autosave, SVG preview, and basic block re-anchoring. - This plugin has not been manually reviewed by Obsidian staff.
Handwriting Markdown View
A vector handwriting annotation view layered over rendered Markdown, with pen/touch separation, autosave, SVG preview, and basic block re-anchoring — an Obsidian plugin.
Current version: 0.1.0-beta.1 — installable and testable, with core drawing and persistence working.
Features
1. Dedicated Handwriting View
Independent handwriting file view that works alongside Obsidian's edit/reading views. Switch freely between them on the same note.
2. Full Drawing Toolkit
- Pen, highlighter, stroke eraser, move, undo/redo
- Pressure, tilt, and twist data collection
- Uses
getCoalescedEvents()for smooth strokes, falls back to standardpointermovewhen unavailable
3. Pen & Touch Separation
- Stylus draws on canvas
- Single-finger scroll
- Two-finger pinch zoom
- Mouse draw mode available
4. Side Button Mapping
- Configurable pen side-button codes (default:
2,5) to toggle pen/eraser - Live toolbar display of
pointerType / button / pressurefor debugging device mappings
5. Data Persistence
- Each note gets a stable
handwriting-idin frontmatter - Strokes saved as
document.ink.jsonwith auto-generatedink-preview.svgandmetadata.json - Smart merge: matches strokes by ID before write, uses tombstones for deletions
6. Markdown Block Anchoring
Auto re-anchors strokes to Markdown blocks when text changes (exact text match). Unmatched stroke IDs are tracked as orphanedStrokeIds.
7. Cross-Platform
Reads/writes only through Obsidian's Vault / FileManager API — works on desktop and mobile.
8. Settings Panel
- Customize output directory (default:
Attachments/Handwriting/<handwriting-id>/) - Configure pen button codes
- Pen color, width and opacity presets
9. Build & Development
- TypeScript source in
src/main.ts - Zero npm dependency build:
npm run build - Lint check:
npm run check
10. Diagnostics & Testing
- OPPO Pad / Pencil real-time pointer diagnostics
- Toolbar shows live
pointerType / button / pressure - Button mapping debugging output
Data Directory
Default output:
Attachments/Handwriting/<handwriting-id>/
├── document.ink.json
├── ink-preview.svg
└── metadata.json
Configure the root directory in plugin settings.
Manual Installation
- Copy the
handwriting-markdown-viewfolder to:<Vault>/.obsidian/plugins/handwriting-markdown-view/ - Ensure it contains at least:
main.js manifest.json styles.css - In Obsidian → Settings → Community plugins, reload and enable Handwriting Markdown View.
- Open any Markdown note, click the pen icon in the left ribbon, or run the command:
Handwriting Markdown View: Open handwriting view in current tab
Data Format
Each stroke stores:
tool / color / baseWidth / opacitypoints[x, y, pressure, tiltX, tiltY, twist, time]modifiedAt / deviceId- Optional Markdown block anchor: element type, text excerpt, text hash, block rect, relative offset
Canvas logical width defaults to 960px; display scaling is device-independent.
License
MIT License — see LICENSE.
For plugin developers
Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.