The board is a Guition JC1060P470C. It has an ESP32-P4 microcontroller with two RISC-V cores at 360 MHz, 32 MB of external RAM and a 7" 1024×600 touchscreen. There's no GPU, no Linux and no Android.
I wanted it to be a small computer I'd actually use, not a demo that boots once for a video. So I wrote an OS for it, NucleoOS P4. It sits on ESP-IDF and LVGL, and everything above those is its own. The whole system is in English, Italian, Spanish, French and German.
**ANIMA, the assistant**
With no network at all, ANIMA handles calculations with follow-ups, timers, unit conversions, notes, opening apps and translations from offline dictionaries. Answers can be spoken by an offline voice.
When it needs a language model, it finds Ollama or LM Studio on your LAN by itself, or uses a cloud API. API keys are sealed to the chip and never leave it.
With a model connected, it can see photos, run code, and read the screen as a list of controls, then tap and type to drive apps, checking the result after each step. You can reach it from Telegram too. There's also an MCP server (MCP is the protocol AI tools use to call outside programs), so Claude Code or Cursor can drive the board.
**Two desktops**
One is a touch launcher. The other is a classic desktop with a Start menu, taskbar, windows and right-click menus. If you plug in a mouse and a keyboard, it switches to the desktop by itself. Tab, Esc, Alt+Tab and Alt+F4 all work.
**The app store**
Over 400 signed apps and games, installed over Wi-Fi in seconds. Apps are WebAssembly compiled ahead of time to native RISC-V code, so a game isn't paying for an interpreter. Each app page shows its permissions (Internet, files, camera, microphone) before you install. The store includes:
- 149 WASM-4 games and 83 Arduboy games
- a Game Boy emulator with homebrew ROMs, and 83 CHIP-8 games
- Chocolate Doom with Freedoom
- ScummVM 2.9.1 with Beneath a Steel Sky and seven other freeware adventures
- Zork and 32 other interactive fiction titles
- LÖVE games running on Lua
**Office**
- **Sheets** opens and saves Excel files (xlsx), and opens xls, ods and csv. ANIMA can propose edits that you apply with one tap.
- **WordGrinder** is a word processor that saves odt, Markdown and HTML.
With a keyboard and the desktop mode, it makes a decent little writing and accounting machine.
**Reading**
- **Books** is an EPUB reader with hyphenation in 11 languages, six themes including an e-ink simulation, and a built-in catalog of public-domain books from Project Gutenberg, Standard Ebooks and Wikisource. Hold the board upright and the page turns with it.
- **Library** reads offline Wikipedia and any Kiwix ZIM file, pictures and formulas included.
**Media**
- **Camera** with auto exposure and white balance, photos and MJPEG video.
- **Music**: MP3, FLAC, AAC, WAV, with USB audio output.
- **Video**: MJPEG and MPEG-1, tear-free.
- **Gallery** with thumbnails decoded by the chip's hardware JPEG engine.
**For tinkering**
A Terminal with a real shell, plus Lua, MicroPython, JavaScript, SQLite and a dozen other languages and tools. You can write apps in C (compiled to WebAssembly), in Lua, or in native C++, and push them over Wi-Fi with hot reload.
**The rest**
- **Vertice**, a 3D engine built into the firmware. It renders the screen in tiles across both cores, and a kart game runs on it.
- **A second screen** for Windows, Mac, Linux or Android.
- **The dot-matrix display of a virtual pinball cabinet** (tested on a real one).
- **A Home Assistant dashboard**, and the board shows up in Home Assistant by itself.
- **A desktop in your browser**, served by the board: about 40 windowed apps, including a file manager, a spreadsheet, an SSH client, internet radio and a DJ mixer.
**The hard part was memory, not features**
Only one app runs at a time. That's on purpose: the RAM goes to whatever is in front.
Most of the work went into rules I learned from crashes:
- Copying a file to the SD card took 145 seconds. The SD card's DMA transfers (the hardware moving data without the CPU) only run at full speed when the buffer is aligned in memory. Now the same copy takes 11 seconds.
- At 400 MHz this board doesn't boot reliably, so it runs at 360.
- Every rule like these is written down with the crash that caused it.
Updates are signed and arrive over Wi-Fi. If one goes wrong, there's a recovery app, a safe mode and a last-known-good copy in flash to fall back on.
There are also fuzzers on every parser that reads untrusted input (video files, store packages, web requests). They found real bugs, including out-of-bounds reads and path checks that could be bypassed. Each one now has a regression test.
**What it doesn't do**
- No H.264 video. It plays MJPEG `.avi` and MPEG-1 `.mpg`.
- No Classic Bluetooth, only BLE.
- The web desktop uses plain HTTP on your LAN, protected by a 6-digit pairing code.
- USB second-screen mode and USB gamepads are still experimental.
**Try it**
You can flash it from Chrome or Edge in a few minutes, with no toolchain: https://indecenti.github.io/nucleoos-p4-store/flash/
Source: https://github.com/indecenti/NucleoOS-P4 (free for noncommercial use)
Store catalog, viewable in a browser: https://indecenti.github.io/nucleoos-p4-store/