You write the interface once — on a regular computer. Then you flash the board. Same app on screen, updates over the network, nothing to pay per device for the engine.
60 fps on a Raspberry Pi 4. Image around 150 MB. One product instead of a GUI toolkit, an image builder and an OTA vendor.
A typical kiosk stack is glued together. Each piece costs money and can fail on its own.
GUI toolkit, Yocto image, OTA vendor, device console — four contracts, four support lines, and often a royalty on every unit you ship.
Commercial UI stacks bill per device. Closed kiosks struggle with LGPL rules. If you need a stack you can actually audit, that combination falls apart.
A Chromium kiosk sits on about a gigabyte of RAM and crawls on Pi-class boards. Android needs gigabytes and half a minute to boot. A compositor eats a third of the frame before your UI draws.
One path from a desktop app to a fleet of boards. No extra embedded toolchain. No Docker on the device.
Build and debug the same app on Windows, Linux or macOS with the Xenolith SDK.
Get a bootable image: system, kernel, your program. No six-month Yocto project.
One native binary draws straight on the screen. No window manager, no browser, no container.
Push a new app without rebooting the board. Push a new system image with a spare slot and automatic rollback.
What you ran on the computer is what runs on the board. Not a port.
The board boots a locked-down system: only what it needs, a check that nothing was tampered with, and the picture goes straight to the panel. About 150 MB. Cheap flash is enough.
Vulkan draws on the display itself. No X11, no Wayland, no extra compositor between your UI and the glass.
The system is read-only and checked on boot. Your app and fleet data live on a separate volume.
Hardware graphics on Pi 4, Zero 3E and Rock 5C. If the GPU driver is missing, we draw on the CPU.
The kiosk is a single Xenolith program, not a browser or a container. Replacing it is copying a file.
The interface does not change when you change the kernel. Linux with a GPU is what we use in production. Embox and NuttX are there when you need a real-time kernel.
Picture goes to the screen. Hardware graphics on Raspberry Pi 4, Radxa Zero 3E and Rock 5C. Software render if there is no GPU driver.
The same kiosk on HDMI — Raspberry Pi 4, Zero 3E and Rock 5C — on a real-time kernel.
The kiosk already runs in QEMU and on a Raspberry Pi 4. We are still finishing this path.
For shipping devices today, use Linux with a GPU.
Where the GPU driver is ready, we use it. Where it is not, we draw on the CPU. One image per board.
| Board | GPU | CPU draw |
|---|---|---|
| Raspberry Pi 4 (VideoCore VI) | ||
| Radxa Zero 3E (Mali-G52) | ||
| Radxa Rock 5C (Mali-G610) |
| Board | GPU | CPU draw |
|---|---|---|
| Raspberry Pi 5 (VideoCore VII) | ||
| VisionFive 2 Lite (PowerVR BXE-4-32) |
| Board | GPU | CPU draw |
|---|---|---|
| Rockchip RK3399 (Mali-T860) | ||
| NXP i.MX 8 QuadMax (Vivante) | ||
| Other 64-bit ARM boards |
GPU means hardware graphics. CPU draw means software rendering. Pi 4, Zero 3E and Rock 5C are tested on real hardware.
An agent on each board and a console in the browser: bring a device online, watch it, update it, open a terminal if something breaks.
Put a new program on the data partition and restart the kiosk. The board does not reboot. You do not rebuild the image.
Write the new image to a spare slot, reboot, check. If boot fails, the board rolls back by itself.
Devices report in. The console shows what is alive, stale or broken.
A web page with the device list, update actions and a remote terminal for diagnosis.
The program you debug on a PC is the program on the board. You do not rewrite it for the kiosk.
After the first flash, copy a new file over SSH or from a USB stick. Rebuild the whole image only when the system itself changes.
System, kernel and app become a bootable SD or USB image in minutes.
Build and flash instructions ship with the stack, so an agent can follow them without a separate briefing.
Optional: the terminal only shows pixels. Logic and sensitive data never leave the server — for payments, ATMs, medical kiosks.
The picture can already stream over a secure link. Rolling this out to a fleet is available on request.
UI, image and updates in one product. The picture goes to the display. You can change the kernel.
| Xenolith Origin | Qt / Boot to Qt | Chromium kiosk | Android + MDM | balena / Torizon | |
|---|---|---|---|---|---|
| UI | Native Vulkan on the panel | Qt + compositor | Browser | Android UI | App in a container |
| Image size | ~120–150 MB | Gigabytes, Yocto | Gigabytes | 2–4 GB+ | Container layers |
| Engine royalty | $0 | Per device / seat | $0 | $0 | n/a |
| Fleet / OTA | Built in | Add Mender and friends | DIY / MDM | MDM subscription | Strong |
| Desktop = device | Yes | No | No | No | Partly |
| Kernel | Linux, Embox, NuttX | Linux only | Linux | Android | Linux + containers |
Kiosks and municipal machines that need a snappy screen on a cheap ARM board.
HMI and SCADA where the picture and a stack you can trust matter more than a desktop OS.
Playback that does not leak memory and need a nightly restart.
Outdoor machines where board cost, flash size and time-to-screen are tight.
The thin client keeps user data off the terminal entirely.
Own compiler, GOST cryptography in the SDK, no Qt license and no extra platform SDKs.
On real boards today — and what we are still building.
Raspberry Pi 4 at 60 fps, Radxa Zero 3E and Rock 5C. Bootable images, HDMI kiosk, tested on hardware.
A new program from the console, or over SSH while you develop. The system image stays put.
The same three boards, a real-time kernel, software rendering on HDMI.
Device list, status, app and system updates, a web console. Several devices in QEMU. Still being hardened for production.
Runs in QEMU and on a Raspberry Pi 4. Same app, different kernel.
Raspberry Pi 5, VisionFive 2, staged updates, a quicker start from power-on.
If you build kiosks, operator panels or signage and you are tired of paying four vendors — write to us. The engine is open. Origin is the image, the updates and the console.