Lattice app icon

Lattice

iPad · Apple Pencil · study notes

A notebook built on its own ink engine. There is no PencilKit in the project — strokes are captured from raw touches, stored as versioned JSON paths, and redrawn as vectors so writing stays sharp when you zoom. Scans become editable ink, not filtered photos.

SwiftUI Custom ink VisionKit SwiftData iPadOS 17+
Ink engine

Not a wrapper around PencilKit

Uniform round nib, centered smoothing on committed strokes, causal filtering for the live preview, and a tiled layer that re-rasterizes vectors at every zoom level. The live stroke raises its layer resolution while you draw zoomed in. Pen, pencil, and highlighter each keep their own opacity and blend behavior. The vector eraser’s hit radius stays constant on screen as you zoom.

Input

Pencil draws, fingers pan

Scroll is restricted to finger touches so a Pencil cannot pan the page. Two-finger tap undoes; three-finger tap redoes. Scribble over ink to erase it — gated so handwriting is never mistaken for a delete.

Shapes

Hold to snap

Strokes score against line, arrow, rectangle, ellipse, triangle, and diamond. Hold about a second and the best fit wins; lift normally and the ink stays exactly as drawn.

Scanning

Real paths, not a photo

Orientation, threshold, and printed-ruling removal are derived from the page. Thin marks get centrelines; filled marks get outlines. Both become ordinary ink strokes — erasable, undoable, exportable as SVG.

Paper

Blank, ruled, graph, Cornell

Plus draggable shapes, stickers, text boxes, and graph cards, with a persistent sticker library for diagrams you reuse across notebooks.

Build

What’s in the box

PlatformiPadOS 17.0+ · intentionally iPad-only
UISwiftUI · Dark Studio / Light Paper themes · indigo accent default
InkCustom engine from raw UITouch · JSON vector paths · tiled Core Graphics
ScanVisionKit document camera · Vision OCR · contour + skeleton tracers
StorageSwiftData · CloudKit-ready container iCloud.com.seanwirkus.lattice
ExportSVG — stroked centrelines and even-odd filled outlines
Bundlecom.seanwirkus.lattice