CODENIK

Menu

A high-performance infinite canvas sketching & whiteboard app built for mouse and drawing tablets.

Scribl — Features & Capabilities

⚡ Ultra-Low Latency Dual Canvas (240Hz Ready)

  • Active Scratch Layer: Initialized with { desynchronized: true, alpha: true } to reduce rendering latency and enable immediate front-buffer drawing.
  • Committed Layer: Uses frustum-culled batch vector rendering of cached Path2D strokes to maintain 60–120+ FPS across thousands of elements.

🖊️ Tablet & Stylus Native

  • Organic Stroke Smoothing: Natural stroke outlines and tapered endpoints powered by perfect-freehand.
  • Event Coalescing: Uses getCoalescedEvents() to prevent angular stepping during fast scribbling.
  • Hardware Stylus Eraser: Recognizes stylus eraser flips using e.buttons === 32.
  • Strict Palm Rejection: Touch inputs are reserved for pan and zoom, preventing accidental pen marks.

🌌 Infinite 2D Canvas

  • Smooth Pan & Zoom: Navigate the canvas from 10% to 800% with world-coordinate transformations anchored precisely to the cursor.
  • Dynamic Dot Grid: Automatically scales the background dot grid according to the current zoom level.
  • Spacebar-to-Pan: Hold Space and drag to glide across the canvas with custom grab cursor feedback.

🧽 Minimalist Eraser Trail

  • Smooth Eraser Trail: Displays a clean slate-gray trailing streak that tapers and dissolves over approximately 180ms.
  • Circular Reticle: Provides a circular cursor that matches the eraser's hit-detection footprint.

🎨 Glassmorphic Floating HUD

  • Floating Island Toolbar: A bottom-docked interface featuring Select, Pen, Eraser, and Zoom tools.
  • Dedicated Zoom Tool:
    • Scrubby Zoom: Adjust zoom through horizontal dragging.
    • Selection Zoom: Draw a selection box to frame a specific canvas area.
  • Contextual Color Palette: Eight curated color swatches.
  • Stroke Thickness: Four discrete stroke-width options.
  • Zoom HUD: Quick zoom presets with keyboard shortcuts:
    • 100% — Shift + 0
    • Zoom In — +
    • Zoom Out — -
  • Non-Blocking Clear Action: Two-step canvas clearing confirmation.

🔄 Command-Based History

  • Multi-Level Undo: Supports Cmd + Z.
  • Redo: Supports Cmd + Shift + Z and Cmd + Y.
  • Command Tracking: Maintains history for stroke additions, deletions, and translations.

💾 Persistence & High-Resolution Export

  • Debounced Autosave: Automatically saves canvas state to local storage.
  • Native Document Support: Open and save .scribl JSON documents.
  • High-Resolution PNG Export: Exports canvas content at 2× resolution, tightly bounded to the actual drawing content.

⚙️ Neovim-Style Lua Configuration

  • Native Lua 5.4: Fully customizable through ~/.config/scribl/init.lua, powered by mlua.
  • Custom Keybindings: Configure keyboard shortcuts using Vim-style notation, including <C-z>, <D-z>, <S-0>, and c.
  • Customizable Floating Dock: Reorder, customize, and reposition the toolbar to:
    • bottom
    • top
    • left
    • right
  • Live Configuration Reload: Native filesystem watching through notify automatically reloads configuration changes when the Lua file is saved, without reloading the canvas.

Scribl is MIT open-source, and looking for contributors! You can contribute by helping to build shapes, canvas text, a highlighter and much more.

👉 GitHub: https://github.com/shadowmkj/scribl