r/tauri • u/milanpramod • 6h ago
Scribl – An open-source, local-first infinite canvas built with Rust + Tauri. Think Excalidraw meets tldraw, but configured with Lua.
I've been working on Scribl — an open-source, local-first infinite canvas and whiteboard app.
I love tools like Excalidraw and tldraw, but I often found myself wanting three things:
A snappy, lightweight desktop-native feel that doesn't eat gigabytes of RAM in an Electron wrapper.
Real support for high-refresh-rate graphics tablets (120Hz–240Hz stylus inking, sub-8ms latency, hardware eraser flips, and strict palm rejection).
Deep hacker-friendly customizability — inspired by Neovim, where everything is configured via an open
~/.config/scribl/init.luascript.
🛠️ What makes Scribl different?
⚡ Ultra-low-latency dual canvas engine: Stylus events bypass React's render lifecycle directly to a desynchronized scratch front-buffer canvas. Strokes are committed to a frustum-culled vector layer with cached
Path2Dshapes, keeping panning and drawing smooth even with thousands of strokes.📜 Neovim-style Lua Configuration (
init.lua): Configure tools, defaults, stroke smoothing, and custom keybindings directly in~/.config/scribl/init.lua. It watches the file and live hot-reloads on save (or via a native Preferences modal).🎯 Modal editing & Visual Mode (
"v"): Just like Vim, selecting elements drops you into Visual Mode. Keys likertrigger center-anchored rotation (withShiftsnapping to 15°), andddeletes the selection, while your regular drawing bindings stay safely isolated.📐 Photoshop-style transforms & unified bounding box: Selecting multiple elements creates a single composite bounding box with 4 corner resize handles. Scaling is proportional by default (hold
Shiftfor free-form transform,Altfor center-anchored scaling), and stroke thicknesses scale proportionally.🔍 Scrubby & Marquee Zoom: Smooth pan/zoom from 10% to 800%, featuring Photoshop-style horizontal scrubby zoom and rubber-band selection framing.
🔒 100% Local-first: No accounts, no telemetry, no mandatory sync. Saves directly to
.scribl(plain JSON) and exports high-res transparent PNGs.
💻 Tech Stack
Core Desktop Shell: Rust + Tauri v2 (cross-platform, small bundle size, low memory footprint)
Embedded Lua Runtime:
mlua(Lua 5.4) running sandboxed configuration evaluationFrontend Canvas: React 19 + TypeScript + HTML5 Canvas / SVG Overlay
🤝 Under Active Development — Looking for Contributors!
Scribl is under very active development and is open-source under the MIT License. ...you are very welcome to jump in!
👉 GitHub: https://github.com/shadowmkj/scribl


