Java, compiled straight to the board

Juno is an ahead-of-time compiler for a checked subset of Java

`javac` stays the frontend. Juno closed-world-links your `main` method on the development machine and emits GNU ARM Cortex-M4 assembly plus a small C++ runtime shim directly — no JVM, no interpreter, no dynamic class loading on the Arduino UNO R4 WiFi or UNO Q.

No JVM on the board

`javac` → `.class` → Juno's closed-world linker → Cortex-M4 (Thumb-2) assembly plus an `extern "C"` runtime shim, assembled and linked by the board's own Arduino toolchain.

See the feature inventory

Real hardware intrinsics

GPIO, timing, Serial, the LED matrix, Wi-Fi/HTTP/JSON, SD card storage, email, USB mouse, and LCD/TFT shields — plain Java `native` methods lowered to shim calls at link time.

Browse the hardware API

16 playable games

Pac-Man, Chess, Battleship, Blackjack, Texas Hold'em and more, running on an ELEGOO 2.8″ TFT touch shield — compiled ahead of time, not interpreted.

See the games

Two boards, one backend

The same Cortex-M4/Thumb-2 codegen targets the UNO R4 WiFi's Renesas RA4M1 and the UNO Q's Zephyr-hosted STM32U585.

Compare the boards

How it works

Java source -> javac -> .class -> Juno linker/AOT -> .S + Shim.cpp + .ino -> Arduino toolchain -> RA4M1 (UNO R4 WiFi)
                                                                                         -> STM32U585 (UNO Q)

Juno is deliberately closed-world and minimal: no interpreter, no dynamic class loading, no general objects or arrays yet. See the feature inventory for exactly what's supported today, or jump into Getting Started to flash Blink in a few commands.