HypenHypen
Platforms

Platforms Overview

Every platform Hypen renders to, and how the adapters work

Platforms

An adapter is the piece that turns Hypen's patch stream into real UI on a given platform. The engine produces Create / SetProp / RemoveProp / Insert / Move / Remove patches; the adapter applies them to that platform's native widget tree. Nothing about your module changes between platforms — the adapter is the only layer that differs.

Supported platforms

PlatformPackageRenders toStatus
Web@hypen-space/webDOM elements or 2D CanvasStable
Desktophypen-renderer-desktopNative window (winit + wgpu + Vello)Stable
Androidspace.hypen:hypen-rendererJetpack ComposeStable
iOSHypenSwiftSwiftUIStable
Rusthypen-serverEmbedded engine, no WASMStable

Two ways to run

Every adapter above supports both of these. The choice is a deployment decision, not a code change — the same module and the same .hypen template work either way.

Local

The engine runs in-process on the device. The adapter instantiates your module directly, dispatches actions to it, and applies the patches it emits. No network, no server.

// Desktop, local — the engine is embedded in the binary
DesktopApp::new()
    .module(Arc::new(instance))
    .run();

Remote

The engine runs on your server. The adapter opens a WebSocket, receives the initial tree plus a stream of patches, and sends actions back. Clients stay thin — they never load WASM or run your business logic.

// Desktop, remote — same renderer, streamed from a server
DesktopApp::new()
    .connect("ws://localhost:3000", "App")
    .run();

See Server SDKs for the server half, and Remote UI for what this makes possible.

Choosing an adapter

  • Shipping a website or web app → Web. DOM mode gives you real HTML elements (accessible, inspectable, SEO-friendly); Canvas mode gives you pixel-identical output across browsers.
  • Shipping a native desktop app → Desktop. One binary on macOS, Linux, and Windows — no Electron, no WebView.
  • Shipping to phones → Android and iOS. Both render to the platform's own component toolkit, so your UI inherits native scrolling, text input, and accessibility.
  • Embedding Hypen in a Rust service → Rust. The engine links in directly, with no WASM boundary to cross.

Component parity

Not every component is implemented identically on every platform yet. The component gallery tracks the current state per platform and is regenerated as adapters change — check it before relying on a component in production.

See Also

  • Native Rendering — why Hypen targets native components instead of a WebView
  • Multi-Platform — what stays shared and what is genuinely platform-specific
  • Server SDKs — TypeScript, Go, Kotlin, Swift, and Rust
  • Cloudflare — deploy the server half to Workers + Durable Objects