Your web app, shipped as an operating system.
Use web technologies to build a signed, bootable Linux image. Then, use our software to manage your fleet of kiosks remotely.
curl -fsSL https://strux.sh/install.sh | sh
~/projects
Getting started with Strux is easy
Use the Strux CLI to scaffold a project, develop against a QEMU virtual machine or physical hardware, and then build a production image when you're ready.
$ strux init my-kiosk --template vue --arch arm64
Scaffold
my-kiosk/ ├── strux.yaml project configuration ├── main.go Go backend entry point ├── frontend/ your Vite project ├── bsp/qemu/ board profile for dev mode ├── assets/logo.png boot splash ├── overlay/ files copied into the OS ├── strux-update.key signs updates, never committed └── strux-update.pub built into every image
Get started with one command.
Strux projects use Vite web apps and a Go backend. We compile your backend types into frontend-callable code through RPC.
What every file is forYour frontend
Use Vue, React or plain JavaScript. We configure Vite and set up hot-reload on physical devices when you run Strux in dev mode.
Your Go backend
Create a main.go file, and exported fields and methods automatically become callable in the frontend.
WPE WebKit
We ship Strux with a custom version of WPE WebKit, a powerful web engine designed for embedded devices.
Cage
We built a custom Wayland compositor around Cage. Designed to show your frontend in full-screen and nothing else.
Strux runtime and client
Your device ships with the Strux runtime and a strux client that handles the Go to TypeScript Bridge, Hardware APIs, Signed atomic updates, and fleet enrollment.
Debian 13
Based on a reliable minimal root filesystem with the basics needed to get Strux up and running. Supported until 2030.
Kernel and bootloader
Use a custom kernel and bootloader with your own defconfigs, patches, device trees, U-Boot or GRUB.
Your board
Strux supports ARM64, x86_64, or ARMhf. Any board that boots Linux can boot Strux. Describe your board using a board support package or find a community one.
Start with two files, Strux builds the whole operating system.
Start simple with a web app, then write your Go backend. Strux handles the entire build process using board support packages.
A Unified API across all your Strux devices.
The Strux Standard Library defines common APIs and abstracts them over different pieces of hardware. Our board support packages provide an interface to the Strux API so that you can develop for multiple devices at the same time with the same code.
main.go
You write
frontend/src/strux.d.ts
Generated
frontend/src/App.vue
You write
Access the Strux API from the frontend or backend. Green APIs work on every board, Amber APIs are board-specific.
The full runtime reference- strux.boot
- strux.dev
- strux.display
- strux.profiles
- strux.project
- strux.system
- strux.update
- strux.capabilities
- strux.ipc
- strux.audio
- strux.battery
- strux.cellular
- strux.deviceSigning
- strux.network
- strux.wifi
The whole OS, replaced atomically.
Strux devices are automatically dual A/B rootfs capable. This means that you can push an update to a device while it's running and Strux will automatically switch over to your update when the device reboots. If your image fails to boot, Strux automatically rolls back your image.
Stream
Strux updates are streamed and decompressed on the fly and written straight onto your device's idle slot. There's no need to provision extra storage for updates.
Verify
Strux devices only accept the updates you sign. This ensures that your devices remain secure.
Arm
After an image is flashed, Strux automatically instructs the bootloader to try the new image at next boot.
Boot
Strux automatically tries to boot your new image on the next boot. If your image fails to boot three times, Strux automatically switches back to the previous image.
Signing
RSA-PSS, and Signed Builds
Strux updates are self-contained and signed by the keys stored in your project. A device without a valid public key cannot install updates at all.
Compatibility
One bundle per board.
The manifest names the board it was built for, and a device refuses a bundle built for another board.
Recovery
Three tries, then rollback.
We use a custom version of U-Boot that automatically attempts booting your new updates and falls back to older images when your update fails, ensuring you never have a bricked device.
Strux Fleet, coming soon
Manage a Fleet of Strux Devices, Seamlessly.
Publish versions of your Strux image directly to your managed fleets from the CLI. Manage versions, permissions, remote access, and troubleshooting directly from your web browser.
console.strux.sh/rollouts/8f2c1a
Rollout
kiosk-os 1.4.0 to Downtown stores
Desired release set on the Fleet. Devices converge on their next check-in.
Devices
Confirmed
Updating
Rolled back
| Device | Status | Progress |
|---|---|---|
| lobby-kiosk-01 | Confirmed | ████████████████████ |
| lobby-kiosk-02 | Confirmed | ████████████████████ |
| checkout-03 | Confirmed | ████████████████████ |
| checkout-04 | Confirmed | ████████████████████ |
| warehouse-wall-01 | Confirmed | ████████████████████ |
| warehouse-wall-02 | Confirmed | ████████████████████ |
| showroom-01 | Confirmed | ████████████████████ |
| showroom-02 | Confirmed | ████████████████████ |
Enroll
Easily Deploy
Adding Strux Fleet to your Strux devices is as simple as creating an enrollment-enabled image. When your devices first boot, they connect directly to Strux Fleet and enroll themselves.
Desired state
Manage a fleet of devices
Pin a Fleet, a group, or a device to a version of your image, or let it follow a channel. You define your device state, Strux Fleet handles the rest.
Tooling
Remote management made easy
Strux Fleet allows you to access your device's screens and perform device-specific commands that you can define yourself, directly from our web portal.
Strux, Ready for the AI Era
Strux comes with a built-in MCP server. Let your agent take a screenshot, read logs, build an image, and even take control of your device directly. Plus, with built-in documentation, your AI agent can get started with Strux right away.
Strux Local MCP
strux dev
Connects from the dev terminal to
- Claude Code
- Codex CLI
- Cursor
- VS Code
- Claude Desktop
- Gemini CLI
# or register the endpoint by hand
Runs on the boards we ship, and any board Linux boots.
We're launching Strux 0.4 with real hardware, each fully supported by Strux OS and with Strux Standard Library support.
rt101-rk3568
- strux.cellular
- strux.battery
- strux.network
rt101-rk3568 · arm64
Where Strux fits.
Strux is not the only way to put a web app on a screen. However, here is how it compares with the usual routes, in plain terms.
- 01Yocto and Buildroot
- Yocto and Buildroot give you full control over every layer, but with weeks of learning before you get a bootable image. They also stop at the operating system. The application workflow, hot reload, updates, and any remote management or fleet are yours to assemble from scratch and without help. Strux does all of this for you and is purposefully designed for the kiosk use-case.
- 02Electron on desktop Linux
- A full desktop with unnecessary apps underneath a kiosk app. A window manager, a display manager, notifications, bugs, and more that nobody asked for. Strux boots with your splash logo straight into your application on a custom compositor that shows one window and nothing else to break out of.
- 03Android kiosk mode
- Heavy, with Google's update schedule, Google's services, and certified hardware. Don't forget you'll need to lock it down with another paid MDM solution. Strux runs on any board that boots Linux, updates when you say so, and never phones anyone but your own fleet.
Open source, GPLv2, built by Medeiros IT for its own kiosks.
The CLI, the device runtime, and the fleet client are on GitHub. The hosted Fleet is optional, and nothing in the operating system depends on it.
curl -fsSL https://strux.sh/install.sh | sh