Obsidian plugin

Handwriting

pen ink on ordinary Markdown notes. open a note and write. the note stays a .md file.

see it work

try it here first

this is the plugin's own ink code running in this page. if your pen writes here, it writes the same in a note.

Write here

no pen? drag with the mouse.

save as SVG is the plugin's own export. same file you get beside your note.

why it exists

Lack of handwriting integration kept Obsidian from becoming my main notebook. back in uni, taking notes for biochem and comp sci in onenote with pen and keyboard seamlessly on my tablet truly made me love learning.

I wish I could've used Obsidian back then to take all my notes. I built this plugin to solve that problem retroactively

for students, educators, engineers, artists, or anyone who writes and types in the same place.

what the pen does

the tip inks. the eraser end erases. the side button lassos: hold it and circle some ink, then drag the selection to move it or press Delete to remove it.

two tools, pen and highlighter. each has a nib size slider and its own palette: eight pen inks, five highlighter colors.

type above your ink and the strokes don't move. the insert space tool is the only thing that shifts them. ink scales with Obsidian's zoom and scrolls with the note, and Ctrl+Z undoes ink and text edits in the order they happened. draw past the last line or far off to the right and the note grows scroll room to reach it.

  • pressure sensitivity
  • palm rejection
  • ink prediction and smoothing
  • pinch to zoom
  • infinite canvas
  • pen toolbar with auto-hide
  • lined and grid paper
  • handwriting to shape
  • insert space
  • ink embeds
  • export ink as SVG

how it works

writing

when you put pen to screen, you are writing on an overlay drawn over the Obsidian text editor - this overlay is drawn in codemirror 6

the overlay claims pen input only. touch, mouse, typing, selection and caret placement all fall through to Obsidian untouched

the only thing ever written into your markdown is a single handwriting-page-id line in frontmatter which is placed when you start writing

where is ink stored

your ink is one json file per note in /.handwriting/

<vault>/ Some note.md your text, plus one frontmatter property .handwriting/ 3f2a….json the ink for that note trash/ a copy kept from a delete

sidecar is a digital photography term that refers to a small file beside a main file, that holds information about the main file. this is a useful analogy

in this case, the sidecar stores your ink as coordinates - your note is linked to your ink by a single properties line in the properties field of your note. this link + the coordinates tells Obsidian where all the ink is

what this means practically is that no matter what happens to the ink, the text in your note will be safe, as the note itself is not modified (besides its frontmatter).

.handwriting/ is hidden, and about half of all sync tools don't carry hidden folders by default. Obsidian Sync, iCloud and Dropbox don't. if you use one of these, turn on Compatibility with Obsidian Sync in the settings panel to get your ink syncing across devices

how the ink is stored

ink is stored in note-surface coordinates. origin at the top-left of the text column, y absolute down the document. markdown reflows wherever it wants. your ink stays where you put it. editing text will never move ink except in the case of the insert space tool, by design

how the ink is placed

drawing happens on raw pointer events. the line behind the nib is smoothed with math; the last stub to the pen tip is raw so the ink will always reach the tip of the pen

where it runs

WindowsmacOSLinuxiOSAndroidBoox

Obsidian 1.12.3 or newer. built and tested mostly on a Surface Pro, with some testing on an iPad. please send reports.

two things worth knowing

installing

  1. Settings > Community plugins > browse
  2. search Handwriting
  3. install, then enable

or from the directory: community.obsidian.md/plugins/handwriting. for beta builds before they're released, add ellimist-afk/handwriting to BRAT.

longer reading: the manual, and how ink is stored.

coming

found a bug

open an issue on GitHub and say what happened, which device, and which pen.

a pen trace helps. everything below is a command palette entry, so hit Ctrl+P (Cmd+P on Mac) and type the name.

  1. Diagnostics: begin recording
  2. reproduce the bug.
  3. Diagnostics: show pen trace
  4. press Copy in the window that opens, and paste it into the issue.