Hello Calc
A faithful emulator of 35 classic HP calculators — from the HP-35 (1972) to the HP Prime (2013) — built over one shared TypeScript math engine, plus a keyboard-first native mode that exposes the whole engine directly.
What it is
Every machine is a pixel-honest faceplate driven by the real key-to-function data for that model, so pressing a key does exactly what the hardware did. Underneath, all 35 models — and the native mode — run on the same engine: a single exact value tower, two stack machines, and feature modules for units, the symbolic CAS, plotting, finance and statistics.
It runs entirely in your browser as a static site — no server, no account. Your session (stack, memory, variables, history and the active model) autosaves locally and exports as a versioned JSON file you can re-import anywhere.
Current status
Every model is fully wired: no key remains inert, and each machine is guarded by an automated coverage check that fails the build if any function is left unimplemented. The whole project is backed by 400+ unit tests and an end-to-end Playwright suite that must pass before any change ships.
The engine
One exact value tower
Every model computes on a single math.js instance configured to BigNumber (40-digit precision), so 0.1 + 0.2 is exactly 0.3 — no IEEE-754 drift. Finance builds on decimal.js for the same reason.
Two stack machines
A fixed 4-level RPN stack (X / Y / Z / T + LAST X) drives the classics through the HP-16C; a dynamic RPL object stack drives the 28C through the 50g with typed objects, directories and softkey menus.
Keystroke programming
Record-and-run programs with labels, GTO / GSB, conditional skips, ISG / DSE loops and an operation budget — reused by SOLVE and numeric integration.
Complex, matrices & solvers
Complex arithmetic, matrix algebra (determinant, inverse, transpose, RREF, LU / QR / SVD / eigenvalues), a numeric root finder and definite integration.
Units & dimensions
First-class unit quantities: 5 cm + 2 in auto-converts to 10.08 cm, and dimensionally inconsistent operations report a clear error instead of a silent NaN.
Tiered symbolic CAS
A light Nerdamer tier (differentiate, integrate, factor, solve) loads on demand; a heavy Pyodide + SymPy tier (limits, series, partial fractions, Laplace transforms) streams in only when an advanced-CAS key is pressed.
Plotting
2D function and polar plots, statistical scatter / bar / histogram charts, and projected 3D wireframes — sampled in the engine and drawn by a lazily-loaded grapher.
Finance & statistics
Full TVM (solve any variable), amortization, cash-flow NPV / IRR, bond pricing, depreciation, descriptive statistics, curve fitting and probability distributions.
The fleet
Classic
- HP-351972
- HP-451973
- HP-651974
Woodstock
- HP-251975
Programmable / desktop
- HP-671976
- HP-971976
HP-41 series
- HP-41C/CV1979
- HP-41CX1983
Voyager
- HP-11C1981
- HP-12C1981
- HP-15C1982
- HP-16C1982
RPL clamshell
- HP-28C1986
- HP-28S1988
Pioneer
- HP-20S1988
- HP-27S1988
- HP-32S1988
- HP-42S1988
- HP-32SII1991
Business / financial
- HP-18C1986
- HP-17B1988
- HP-17BII1990
- HP-19B1988
- HP-19BII1990
- HP-12C Platinum2003
- HP-10BII2001
- HP-20b2008
- HP-30b2010
RPL graphing
- HP-48SX1990
- HP-48G1993
- HP-48GX1993
- HP-49G1999
- HP-50g2006
Modern
- HP-35s2007
- HP Prime2013
Native
- Native mode—
Design principles
- The integrated machine
- Nameplate, LCD and keyboard are one bezel that reflows across five page templates from phone to desktop — never a floating keypad.
- Real keyboard proportions
- Each keyboard's aspect ratio derives from its actual key grid and scales uniformly, so nothing is distorted or clipped at any size.
- Paper, not pixels
- History prints as a calculator tape; the stack and variables are notebook notes — each individually toggleable and placed by the active layout.
- Type, don't tap
- Per-model physical-keyboard maps with a visible key echo and a cheat sheet, so the whole machine is reachable without the mouse.
Built with
- Next.js
- TypeScript
- math.js / BigNumber
- decimal.js
- Tailwind CSS
- shadcn · Base UI
- KaTeX
- CodeMirror
- Nerdamer
- Pyodide · SymPy
- function-plot
- Vitest
- Playwright