Draw a function. Get the math.
Desmos plots a formula you type. unplot does the reverse: you draw a smooth
curve y = f(x) on a Cartesian plane, and it hands back the exact function — as
clean LaTeX you can differentiate, integrate, edit, and save.
What you get back is exactly what you drew: a shape-preserving spline that is a
valid function by construction, not a guess. And when your drawing really is a
simple function, unplot also proposes a compact closed form — f(x) ≈ 3x²,
cos x, 1/x — always shown with its error, never presented as exact.
- Draw a function, get exact LaTeX. The stroke becomes a shape-preserving PCHIP spline that is a valid function by construction — the pen hard-blocks anything that isn't one (no reversing in x, no vertical spikes).
- Edit everything. Drag knots and tangent handles, translate the whole curve,
undo/redo — or type
x, ypoints directly and plot them. - Calculus, exactly. Differentiate and integrate the curve. When it's a recognized function the result is exact and symbolic — d/dx of a drawn x³ is 3x², not a lumpy numeric approximation.
- A "prettier function." An error-gated closed-form guess — polynomials, waves of any frequency, and pole-shaped rationals — shown beside the exact output with its max/RMS error, never in place of it.
- Copy anywhere. Export the function as LaTeX, Desmos, or Wolfram.
- Save & reopen. A versioned, cross-platform
.unplotdocument stores just the points, so a saved curve reopens fully editable. - Cross-platform, offline, light/dark. Windows, macOS, and Linux. No network access, ever.
Download the installer for your platform from the latest release:
- Windows —
.msior.exe - macOS —
.dmg(universal: Apple Silicon + Intel) - Linux —
.deb(Debian/Ubuntu),.rpm(Fedora), or.AppImage(any distro). On rolling-release distros the.deb/.rpmare the most robust because they use your system's WebKitGTK — see docs/linux-packaging.md if an AppImage won't start.
The builds aren't code-signed yet, so your OS will warn about an unidentified developer the first time you open the app. To get past it:
- macOS — right-click the app and choose Open, then Open again (only
needed once). If it still refuses, clear the quarantine flag:
xattr -dr com.apple.quarantine /Applications/unplot.app. - Windows — on the SmartScreen prompt, click More info → Run anyway.
Needs Rust, Node 22+,
pnpm, and just. On Linux
you also need the Tauri prerequisites
(WebKitGTK etc.).
pnpm install # frontend dependencies
just dev # run the desktop app (Vite + Tauri)
just test # full test suite: Rust core + frontendA headless Rust core (crates/curve-engine/) does the math — spline fitting,
analytic calculus, the closed-form approximator, the symbolic layer, and file
I/O — and never imports the UI, so it is fully unit-tested on its own. A Canvas
2D + TypeScript frontend (src/) handles drawing, editing, and the KaTeX math
panel. Tauri (src-tauri/) glues them into a desktop app. The design
decisions and roadmap live in docs/PLAN.md.
Contributions are welcome — see CONTRIBUTING.md for setup, the architecture, and the conventions, and please follow the Code of Conduct. Report bugs or request features through the issue tracker; for security problems, see SECURITY.md.
MIT © Vitor Wilson
