OpenCalc is an open-source graphing calculator inspired by the TI-84, built around an ESP32-S3, a color LCD, USB-C, Python-style scripting, games, and expandable firmware.
OpenCalc-authored software is licensed under GPL-3.0-or-later. Bundled components retain their original licenses; see Third-Party Notices.
The calculator runs OpenCalc OS, the project’s open-source ESP32-S3 operating environment. OpenCalc OS includes the calculator interface, math and graphing engines, built-in apps, scripting runtime, USB file storage, keypad handling, display drivers, game support, and power management.
Blog: https://corypearl.github.io/opencalc/blog.html
Click an image to enlarge. The UI tour visits all 12 apps and the game menu.
- A real graphing calculator: textbook-style input, exact and numerical
math, complex numbers, calculus, history, persistent variables, and
unit-aware expressions such as
8 m / 2 s. - Integrated CAS and graphing: Giac/KhiCAS symbolic math linked to Cartesian,
parametric, polar, and sequence graphs, tables, roots, derivatives, tangents,
integrals, and points of interest.
Alpha+Graphopens exact symbolic analysis for the selected graph, including its derivative, integral, roots, asymptotes, tangent line, and integral shading. - A complete math toolkit: Statistics, Lists, Matrices, Solver, Finance, Conics, Inequalities, and a searchable science and engineering reference.
- Reference Center: press
Alpha+Zoomfor an interactive periodic table and browsable math, physics, and engineering formulas and explanations. - Programmable on the device: edit, run, upload, and debug Tiny Python programs with calculator math, graphics, keys, storage, audio, and hardware APIs.
- Built for science and electronics: use Tiny Python, 12 bidirectional digital pins, four 16-bit analog inputs, and shared I2C to control experiments, plot live sensor data, and analyze recordings in Stats.
- Games included: press
Alpha+2ndfor Tetris, Doom, Snake, Breakout, and NES/Mario support with persistent high scores, multi-key controls, and optional audio. - Open hardware: ESP32-S3, 320x240 color display, diode-isolated keypad, rechargeable battery, USB-C, expandable storage, and a documented V5 PCB.
- One-cable workflow: the same USB-C connection handles charging, firmware flashing, serial monitoring, and file storage.
- Dual-core OpenCalc OS: one core keeps the interface and graphics responsive while the other handles background math and system work, with persistent worksheets, configurable performance, and power-saving controls.
| Cost area | Estimate per unit |
|---|---|
| PCB electronics parts from BOM | $11-$16 |
| 320x240 LCD | $5 |
| 3.7 V 2000 mAh Li-ion battery | $3-$5 |
| Cheap keycaps / keypad plastics | $2-$4 |
| 3d printed case | $3-$6 |
| PCB fabrication + SMT assembly | $5-$9 |
| Bulk shipping / logistics allowance | $3-$6 |
| Estimated production cost | $32-$51 |
firmware/ OpenCalc OS source for the ESP32-S3 calculator
hardware/ key layouts, graphics, PCB files, case files, and hardware docs
docs/ notes and project website files
Install and activate ESP-IDF first; see Espressif's ESP32-S3 Get Started guide. Then connect OpenCalc with a data-capable USB-C cable and build the firmware:
cd firmware
idf.py buildFind the serial port created by OpenCalc:
| System | Terminal | Command |
|---|---|---|
| macOS | Terminal | ls /dev/cu.* |
| Linux | Terminal | ls /dev/ttyACM* /dev/ttyUSB* 2>/dev/null |
| Windows | PowerShell | [System.IO.Ports.SerialPort]::GetPortNames() |
| Windows | Command Prompt | mode |
Look for a new USB serial device after connecting the calculator. Typical names
are /dev/cu.usbmodemopencalc1 on macOS, /dev/ttyACM0 on Linux, or COM5 on
Windows. Replace PORT below with that complete name; do not type the word
PORT literally.
If automatic flashing does not enter the bootloader, hold Boot, tap Reset, and then release Boot. Flash using the detected port:
idf.py -p PORT flash
After OpenCalc restarts, find the port again because its name can change between bootloader and normal operation. Start the serial monitor with the runtime port:
idf.py -p PORT monitor
Press Ctrl+] to exit the monitor. The same USB-C cable supports flashing,
serial monitoring, storage, and charging.
- Complete OpenCalc OS Guide: in-depth controls, app workflows, games, scripting, settings, build instructions, validation, and troubleshooting.
- Firmware README: build settings, flashing, storage image, controls, apps, games, and firmware status.
- App Status: implementation status for every OpenCalc OS app and game.
- PCB README: current V5 PCB parts, pin map, power path, display, keypad, battery, audio, and bring-up checks.
- Tiny Python README: scripting runtime details.
OpenCalc OS has grown into a capable working prototype. The calculator, graphing, CAS, scripting, USB storage, power controls, and all five games are working on the current hardware. It is already useful, but it still needs more testing and polish before it is ready to be called a finished product.
| Area | Where it stands |
|---|---|
| Automated test groups | 12/12 passing |
| Features completed | About 80% |
| Everyday usability | About 75% |
| Reliability confidence | About 60% |
| Ready for release | About 40% |
The biggest jobs left are longer CAS and script tests, checking that saved work survives interruptions, stress-testing very large matrices, and testing the V5 audio and scientific I/O on real hardware. A fresh ESP-IDF build is also required before the next release. See the app-by-app status for more detail.
- OpenCalc OS, hardware, and enclosure design: Cory Pearl.
- CAS engines: Giac/Xcas by Bernard Parisse and contributors, with the KhiCAS ESP32 port lineage under GPL-3.0-or-later; Eigenmath remains as a BSD-2-Clause fallback.
- Doom engine: id Software's GPL Doom source, Simon Howard's Chocolate Doom work, and doomgeneric by ozkl, under GPL-2.0-or-later notices.
- NES emulation: Anemoia-ESP32 by Shim06 and contributors, under GPLv3.
- Platform: Espressif ESP-IDF, TinyUSB, and the ESP LCD ILI9341/ST7789 panel drivers under their respective licenses.
- Prototype project funding was provided in part by PCBWay.
Complete copyright, license, and game-data details are recorded in THIRD_PARTY_NOTICES.md. Doom WADs and NES ROMs are separate game data and are not licensed under the OpenCalc firmware license.



