One binary.
Native reach.

ArdaPlayer is the runtime that turns a Linux box into your product. It boots, verifies and decrypts your application package, paints it full screen through WebKit, and hands the page a controlled door into the hardware underneath.

Single static binaryWebKit renderingKiosk by defaultEncrypted app loadingHardware bridgeAuto-reconnecting control channel
01 / Cold start

What happens
when it boots.

There is no desktop, no window manager to fight and no browser chrome for a customer to poke at. The machine powers on and the application is simply there.

  1. 01
    IdentityDerives a stable device ID from the machine — the same value across reboots, different on every unit.
  2. 02
    Package loadVerifies the Ed25519 signature, decrypts the bundle in memory and refuses to continue if either fails.
  3. 03
    SurfaceOpens a full-screen WebKit surface with the application's own content security policy applied.
  4. 04
    BridgeInjects the arda.* namespace, scoped to the capabilities the manifest declared.
  5. 05
    Dial homeOpens the outbound control channel and reports identity, version and a hardware snapshot.
  6. 06
    RunHands over to your code — and keeps the socket alive, reconnecting forever if it drops.
tty1boot
[ 0.00 ] ardaplayer 0.1.1 linux/amd64 [ 0.01 ] device a1b2c3d4e5f6a1b2c3d4e5f6 [ 0.03 ] package app.arda · 1.84 MB [ 0.06 ] signature ed25519 ✓ [ 0.09 ] decrypt aes-256-gcm ✓ [ 0.12 ] manifest caps: db, printer, usb, net [ 0.14 ] surface webkit2gtk · 1920x1080 · kiosk [ 0.31 ] bridge arda.* injected [ 0.34 ] control dialling wss://…/ws [ 0.52 ] control connected · init sent [ 0.55 ] sysinfo 4 cpu · 3716 MB · 2 usb [ 0.61 ] app running
arda-device-014ONLINE
02 / Positioning

Conceptually like Electron.
Built for a different job.

Electron is an excellent way to ship a desktop application to people who own their computers. An appliance in a shop is a different problem, and the trade-offs go the other way.

ConcernTypical Electron appArdaPlayer
Rendering enginePrivate Chromium bundled per applicationSystem WebKit, updated by the distribution
Application codeASAR archive — readable and extractableSigned, encrypted .arda, decrypted at load
Native accessFull Node.js API surface in the main processNarrow, capability-scoped arda.* bridge
Target hardwareDeveloper and consumer machinesLow-power terminals, panel PCs and ARM boards
Window modelDesktop window, menus, multiple windowsOne full-screen surface, no chrome, no escape
UpdatesPer-application updater the user consents toFleet-wide, hash-verified, operator-driven
Fleet managementNot in scopeRegistry, telemetry, console and remote shell built in
i
Not a competition ArdaPlayer is not a drop-in Electron replacement and doesn't try to be. It has no desktop integration, no multi-window model and no Node.js in the page. If you're shipping a desktop app, use Electron. If you're shipping a device, keep reading.
// arda.json — declared at build time
{
  "name":    "counter-kiosk",
  "version": "1.4.0",
  "entry":   "dist/index.html",

  "capabilities": [
    "db",
    "sync",
    "printer",
    "usb:read",
    "net:status"
  ],

  "kiosk": {
    "cursor":    false,
    "blankAfter": 0
  },

  "bind": "installation"
}
03 / The bridge

A narrow door,
not an open one.

The page has no network stack of its own and no filesystem. Everything it can reach passes through the bridge, and the bridge only exposes what the package's manifest asked for at build time.

That cuts both ways: it limits what a compromised page can do on the device, and it limits what a careless dependency can do to your customer's hardware. A third-party analytics script bundled into your app cannot quietly open a socket, because there is no socket to open.

04 / Where it runs

Hardware
independence.

The same package model targets very different machines. If Linux boots on it and WebKit paints on it, ArdaPlayer is designed to run on it.

x86-64

Mini PCs, industrial box PCs, repurposed point-of-sale terminals and low-power Celeron/Atom hardware.

amd64Working

ARM64

Single-board computers, panel PCs and embedded modules running a 64-bit Debian-family userland.

arm64In progress

Raspberry Pi

The reference board for GPIO work — Pi 4 and Pi 5 with an official or third-party touchscreen.

rpiIn progress

Touch terminals

Capacitive and resistive touchscreens, customer-facing second displays, cash drawers and thermal printers.

peripheralsIn progress
1Binary to installNo runtime to provision
0Inbound portsOutbound control channel only
GoRuntime languageStatic build, no interpreter
WebKitRendering engineSystem-provided, distro-updated
Next

See what your
page can reach.

Storage, synchronisation, networking, printers, cameras, USB devices, GPIO and system control — all from ordinary JavaScript.