tinydesk-project / tinydesk
git clone https://github.com/tinydesk-project/tinydesk.git
A mouse-operated, windowed desktop for microcontrollers, drawn in your terminal: Files, Editor, Shell, MQTT, Modbus. Tested on ESP32 boards; also runs on Windows and Linux.
—
stars, 24h
—
stars, 7 days
+77
stars, 30 days · #2,908
77
★ total
11
forks · 3 open issues
Star history starts 2026-10-20; the chart appears after the second daily snapshot.
LanguageC
LicenseMIT
Created2026-09-27 (23d ago)
Last push2d ago
Watchers0
OwnerOrganization
GitHub topics
ansicc11desktop-environmentembeddedembedded-systemsesp32freertosguiiotmcumicrocontrollermodbusmqttportableterminaltext-user-interfacetuivt100window-manager
Links
- GitHub: github.com/tinydesk-project/tinydesk
- Homepage: https://tinydesk-project.github.io/
- Releases · Issues · Hacker News mentions
README excerpt
# TinyDesk **A tiny board. A real desktop. Inside your terminal.** v0.1.6 · Developer preview. **Install it from the browser**: flash an ESP32 (Chrome or Edge, no toolchain), or download the Windows and Linux programs. Then open the board in the **web terminal**, or in PuTTY. Full **documentation**. To build from source, see below. *One continuous take from an ESP32 over USB serial, at normal speed: Editor, Files, System Monitor and Terminal are opened, dragged and resized side by side, then About. The board runs the desktop; the computer only displays it. Watch the MP4 or read the capture details.* TinyDesk draws overlapping, draggable text-mode windows with ANSI escape sequences and reads the keyboard and mouse back from the terminal. There is no display hardware: open a UTF-8 terminal with ANSI/VT cursor control and xterm mouse reporting (for example, configured PuTTY) on the board's serial port and you get a desktop, with a full shell, TinyDesk Shell, in a Terminal window. The core is portable C11; ports exist for ESP32 boards (ESP-IDF), Linux and Windows, and a new target needs four functions. * Pure C11 core with no third-party dependencies. Screen buffers are allocated at initialization; pasted text can grow a heap buffer with `realloc()`. Only changed cells are sent each frame. * Runs on the **ESP32-C6** (built-in USB port) and the **classic ESP32** (USB-UART, 921600 baud, PSRAM boards), and natively in Windows, Linux and macOS terminals for development. * Windows with z-order, drag, resize, minimise, maximise; taskbar, start menu, mouse and keyboard; copy and paste with the PC; screen size follows the terminal. * Apps: Terminal (the shell), Files, Editor, Network, MQTT, Modbus (TCP and RTU), Task Manager, System Monitor, Log Viewer, Settings, Software Update (OTA), and a small API for writing your own. * Shell scripts (`.tdsh`): variables, `if`/`while`/`for`, functions, pipes and redirection, run from the Terminal or with right-click → Run on the desktop. Language reference: `docs/SCRIPTING.md` in TinyDesk Shell. * Optional, root-only desktop takeover over unencrypted Telnet. SSH provides an encrypted shell and SFTP, not the windowed desktop. FTP, SMB mounts, Wi-Fi and W6100 Ethernet are available from the shell. ## Choose a target | Desktop target | Hardware | Console / limits | | --- | --- | --- | | ESP32-C6 | 8 MB flash | Built-in USB Serial/JTAG | | Classic ESP32 with PSRAM | 16 MB flash, PSRAM required | USB-UART, 921600 baud | | Classic ESP32, 4 MB | PSRAM optional | USB-UART, 921600 baud; 80×25, no SSH server or OTA | | PC | Linux, Windows with MinGW, or macOS | Compatible terminal; host simulator for development | TinyDesk Shell also runs as standalone firmware or a POSIX host program. Every release has the firmware images for both editions, the PC programs and `SHA256SUMS.txt`; the web installer uses the same files. ### Community ports Maintained by their authors, not built or tested here: | Port | Hardware | Notes