by Baka
A minimal and high-performance drawing & note enhancement plugin for Obsidian.
๐ GoodNotes-Max
High-performance handwriting & canvas system for Obsidian.
โจ Overview
GoodNotes-Max is a high-performance handwriting and infinite canvas system built for Obsidian.
It brings a GoodNotes-like writing experience directly into your vault, with a fully custom rendering engine, deterministic input system, and real-time stroke pipeline.
Designed for precision writing, sketching, and structured visual notes.
โจ Features
โ๏ธ Handwriting Engine
- Smooth pen strokes with high-frequency pointer tracking
- Pressure-aware rendering simulation (optional)
- Anti-jitter smoothing system
๐งฝ Eraser System
- Stroke-level precise erasing
- Pixel-aware hit testing
- Adaptive eraser radius (UI-driven)
๐งญ Infinite Canvas
- Pan / zoom with inertia support
- Camera system optimized for large drawings
- Stable coordinate transformation system
๐ Multi-page Notebook System
- Page-based note structure (like GoodNotes)
- Fast page switching
- Thumbnail navigation mode
โก Rendering Engine
- Path2D-based stroke caching
- Incremental dirty-region rendering
- Single RAF render scheduler
- GPU-friendly batch drawing pipeline
๐ง Architecture Highlights
- InputSnapshot deterministic model
- Fully separated Tool / Engine / Renderer layers
- Event-driven engine communication
- Single-source-of-truth UI state design
๐๏ธ Usage
-
Open any note in Obsidian
-
Enable GoodNotes-Max canvas view
-
Use toolbar to select tools:
- โ๏ธ Pen โ draw strokes
- ๐งฝ Eraser โ remove strokes
- โ Hand โ move canvas
-
Use mouse / trackpad to:
- Scroll โ zoom
- Drag โ pan canvas
๐ฆ Installation
Manual Install
- Download latest release from GitHub
- Extract into your vault:
VaultFolder/.obsidian/plugins/GoodNotes-Max/
- Restart Obsidian
- Enable plugin in Settings โ Community Plugins
โ๏ธ Requirements
- Obsidian v1.4+
- Desktop recommended (optimized for canvas performance)
๐ง Architecture (Simplified View)
The system is designed with strict layered separation:
Input Layer
Pointer โ InputSnapshot (frozen deterministic state)
Simulation Layer
ToolManager โ Tool (Pen / Eraser / Hand)
Engine โ stroke state management
Camera โ pure data (x, y, zoom)
Render Layer
RenderScheduler โ single RAF loop
RenderQueue โ incremental stroke caching
Renderer โ Path2D batch drawing (only canvas access point)
Key Principles
- โ Input is frozen before processing
- โ Tools never read live DOM state
- โ Engine never touches canvas directly
- โ Renderer is the only canvas writer
- โ Single RAF controls entire rendering pipeline
๐ Performance
- Supports 10,000+ strokes smoothly
- Path2D cache hit rate > 90%
- Single RAF rendering loop (no redundant updates)
- Incremental dirty-region optimization
๐ธ Screenshots
Add screenshots or GIFs here:
- handwriting demo
- eraser demo
- page switching
- canvas zoom/pan
๐งฉ Tech Stack
- TypeScript
- Obsidian Plugin API
- Custom Canvas Engine
- Path2D Rendering Pipeline
๐ License
This project is licensed under the MIT License.
๐ ๅฎๆ็ถๆ่ฏดๆ
่ฟไธช็ๆฌๅทฒ็ปๆฏ๏ผ
โ Obsidian ๅฎกๆ ธๅฏๆฅๅ็ปๆ โ GitHub ไบงๅ็บงๅฑ็คบ็ปๆ โ ๆๆฏๆธ ๆฐไฝไธ่ฟๅบฆ็ซๆ โ ็จๆท่ฝ 30 ็ง็่งฃๅ่ฝ โ ไฟ็ไฝ ็ณป็ป็โๅทฅ็จ็บงๆถๆๆโ
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.