A GUI JavaScript OS for ESP32
An open-source GUI operating system and JavaScript app platform for ESP32 and ESP32-S3, with graphics, hardware APIs, file management, an App Store, and cloud services.
KryonOS is an open-source, lightweight, high-performance GUI Operating System and JavaScript App Runtime designed specifically for the ESP32 and ESP32-S3 microcontrollers. It provides a complete desktop-like experience on embedded devices, featuring an integrated JS engine (Duktape) for executing standalone JavaScript applications, double-buffered graphics for smooth 2D/3D rendering, KryonCloud services, on-device AI streaming, an App Store, file management, and direct hardware API access.
| Multiple Devices Running KryonOS | M5Stack Cardputer v1.1 | CYD (Cheap Yellow Display) | LilyGO T-HMI |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
- JavaScript App Runtime (v2.0.0 / API Level 2): Execute interactive, standalone JS apps natively on the ESP32 using the optimized Duktape ECMAScript engine.
- Multi-Board Hardware Abstraction Layer (HAL): Unified hardware architecture with out-of-the-box support for touch screens, parallel displays, matrix keyboards, and multi-bus SD cards.
- KryonCloud Services & On-Device AI Engine (
Kryon.ai/System.ai): Real-time token streaming (SSE), structured JSON extraction, and vision processing directly on device. - KryonBeam Mesh Messenger: Hardware-to-hardware communication across paired devices with broadcast and direct messaging channels.
- Kryon3D Graphics Rasterizer (
Kryon3D/System.graphics3d): Native hardware-accelerated 3D engine supporting wireframes, solid shaded polygon meshes, camera controls, lighting vectors, and distance fog. - FastMath Acceleration Engine (
FastMath/System.math): FPU-accelerated trigonometry, pre-computed 360° LUT, and hardware True Random Number Generator (TRNG). - Anti-Rollback Wireless OTA Updater: Two-tier manifest resolution (
update.json), streaming 4KB chunk flashing, MD5 integrity checks, and automatic bootloader rollback recovery. - Rich UI & Double-Buffering: Built-in graphics library with double-buffering and mini-sprite support for tear-free, flicker-free rendering.
- App Store & Cloud Marketplace: Browse, download, and install JavaScript apps and games dynamically over Wi-Fi.
- File Management & Multi-Bus SD: Full-featured file explorer and text editor utilizing LittleFS internal storage and high-speed SD/SD_MMC cards.
- Comprehensive Hardware APIs: Direct JavaScript control over GPIO, I2C bus scanning/transfers, high-frequency PWM tone generators, hardware cryptographic hashing/AES, and ADC battery monitoring.
| Hardware Target | Status | Microcontroller | Flash & PSRAM | Display Driver | Input Mechanism |
|---|---|---|---|---|---|
| ESP32-S3 DevKitC-1 | Default / Stable | ESP32-S3 | 16MB Flash, 8MB Octal PSRAM | ILI9341 240x320 SPI | XPT2046 Touch |
| ESP32 DevKit v1 / WROOM-32 | Stable | ESP32 | 4MB Flash | ILI9341 240x320 SPI | XPT2046 Touch |
| M5Stack Cardputer v1.1 | Experimental | ESP32-S3 (Stamp-S3) | 8MB Flash (Dual OTA) | ST7789V2 240x135 SPI | 56-Key Physical Matrix Keyboard |
| LilyGO T-HMI | Experimental | ESP32-S3 | 16MB Flash, 8MB Octal PSRAM | ST7789 240x320 8-Bit Parallel | XPT2046 Touch & SD_MMC |
| ESP32-CYD-28 (Cheap Yellow Display) | Experimental | ESP32 | 4MB Flash | ILI9341 240x320 SPI | XPT2046 Touch & RGB LED |
Note on Experimental Boards (M5Stack Cardputer, LilyGO T-HMI, ESP32-CYD-28): Target boards marked as Experimental are implemented at the driver and HAL level but currently lack hands-on physical verification due to unavailable test hardware. If you test or flash KryonOS on these boards and encounter any issues or calibration offsets, please submit an issue on GitHub. Community feedback and contributions for these devices are strongly encouraged!
ESP32-S3 N16R8 Setup: For wiring schematics, PSRAM configuration, and PlatformIO setup for the default reference board, see the ESP32-S3 N16R8 Guide.
Multi-Board Architecture: For pinout tables and build configurations across all supported boards, see the Hardware Architecture Guide.
KryonOS requires an ILI9341 2.8 Inch Touch display and an SD card module. To achieve the best performance and avoid bus collisions, KryonOS uses split SPI buses.
- VSPI / Main SPI: Used exclusively for the TFT Display and Touch controller.
- HSPI / Secondary SPI: Used exclusively for the SD Card Module.
ESP32 Marauder Compatibility: Out-of-the-box, the default display and touch pinouts in KryonOS match the ESP32 Marauder (v4, v6, and v6.1) hardware!
| ILI9341 2.8 Inch Touch Display Pins | ILI9341 Display Pin Labels | ESP32 Pin |
|---|---|---|
| 1 | VCC | 3.3V |
| 2 | GND | GND |
| 3 | CS | D17 (TXD 2) |
| 4 | RESET | D5 |
| 5 | DC | D16 (RXD 2) |
| 6 | SDI (MOSI) | D23 |
| 7 | SCK | D18 |
| 8 | LED | D32 |
| 9 | SDO (MISO) | D19 |
| 10 | T_CLK | D18 |
| 11 | T_CS | D21 |
| 12 | T_DIN | D23 |
| 13 | T_DO | D19 |
| 14 | T_IRQ | X (Not Connected) |
| SD Card Module | ESP32 Pin | Notes |
|---|---|---|
| MOSI | GPIO 13 | SD SPI MOSI |
| MISO | GPIO 26 | SD SPI MISO |
| SCK / CLK | GPIO 14 | SD SPI Clock |
| CS | GPIO 15 | SD Card Chip Select |
You can download the latest precompiled firmware .bin files directly from our Releases Page.
Use an ESP32 flasher tool (such as esptool.py or the official ESP Flash Download Tool) to write the binaries:
esptool.py --chip esp32s3 --port COM14 --baud 921600 write_flash -z \ 0x0 bootloader.bin \ 0x8000 partitions.bin \ 0xe000 boot_app0.bin \ 0x10000 firmware.bin
To compile and flash from source:
# 1. Clone repository git clone https://github.com/Haris16-code/KryonOS.git cd KryonOS # 2. Build & Upload for Default Board (ESP32-S3 DevKitC-1 N16R8) pio run -e esp32-s3-devkitc-1-n16r8 -t upload # Or compile for other boards: pio run -e m5stack-cardputer -t upload # M5Stack Cardputer pio run -e lilygo-t-hmi -t upload # LilyGO T-HMI pio run -e esp32-cyd-28 -t upload # ESP32 Cheap Yellow Display pio run -e esp32doit-devkit-v1 -t upload # ESP32 DevKit v1
| Hardware Architecture | Hardware configuration and system architecture. |
| Setup Your KryonCloud | Connect your device to access KryonCloud services |
| App Development Guide | Build applications for KryonOS. |
| JavaScript API Guide | APIs available to JavaScript applications. |
| Kryon3D Engine Guide | Developing with the Kryon3D graphics engine. |
| Changelog | Changes, additions, fixes, and breaking changes. |
| Discussions | Community discussions and development topics. |
Visit the KryonOS Documentation →
Have a question, found a bug, want to contribute, or want to discuss a new feature? Join the KryonOS community.
GitHub Discussions • Issues • Pull Requests
Contributions are welcome. Before opening a pull request, please review the project documentation and existing architecture.
Areas where contributions are especially useful include:
- New board support
- Display and touch drivers
- Hardware integrations
- JavaScript APIs
- JavaScript applications for KryonOS
- Graphics and 3D engine improvements
- Bug fixes
- Documentation
- Hardware testing and validation
KryonOS is an independent, open-source project. Developing an operating system, maintaining multi-board hardware drivers, and building runtime engines requires significant time and physical test equipment.
Due to budget constraints, experimental board ports (Cardputer, T-HMI, CYD) cannot yet be bench-tested in person. Your financial support directly funds the acquisition of hardware test boards, displays, sensors, and continuous software development.
Subscribe to official KryonOS development updates to receive email notifications about new releases, newly supported hardware boards, architecture deep dives, and upcoming features:
→ Subscribe to KryonOS Updates
If you like KryonOS or find this project useful, please consider giving our repository a Star on GitHub! Every star boosts project visibility, helps grow the embedded JavaScript community, and motivates ongoing development.
KryonOS is licensed under the GNU General Public License v3.0.

![Cardputer [Experimental]](/s/com/github/G.https/Haris16-code/KryonOS/raw/main/Documentation/assets/imgs/Cardputer-V1.1.jpg)
![CYD [Experimental]](/s/com/github/G.https/Haris16-code/KryonOS/raw/main/Documentation/assets/imgs/CYD2432S028R.jpg)
![T-HMI [Experimental]](/s/com/github/G.https/Haris16-code/KryonOS/raw/main/Documentation/assets/imgs/Lilygo-T-HMI.jpg)
