platform

One React app. Every platform.

WAID takes your built Vite dist and packages it into native artifacts for Web, Desktop, iOS, and Android, each embedding the detir runtime that renders it natively.

build flow

What happens when you build

WAID does not compile or transform your app. It stages the dist you already built and embeds it in a platform shell alongside the runtime that renders it.

Vite distReact · Tailwindwaid buildstages dist → web/embeds runtimeBrowserstatic distno runtimeDesktoppackaged bundle+ detir runtimeiOS.ipa+ detir runtimeAndroid.apk+ detir runtime
One dist in, four artifacts out. Only the browser target ships without the runtime - there is nothing to embed when the browser is already the renderer.

targets

How each target renders and ships

PlatformRenderingDelivery
macOS · Linux · Windowsdetir-scene (wgpu)cargo-packager bundle embedding the dist + prebuilt detir-scene binary
iOSdetir-scene via detir-ffi (Metal)generated app embedding the dist + DetirFFI.xcframework
Androiddetir-scene via detir-ffi (Vulkan / GLES)generated JNI app embedding the dist + runtime .so
Browsernative webstatic hosting (CDN, nginx…), the dist needs no runtime

native, not a webview

Rendered by a real GPU engine, everywhere.

On native targets your app renders through detir-scene, a wgpu pipeline, so visual fidelity and performance don’t depend on whatever WebView the OS shipped this year.

The web target stays a standard static bundle: real DOM, real SEO, real DevTools.

  • GPU-rendered by detir-scene (wgpu / Metal / Vulkan), not the system webview
  • Pixel-consistent across operating systems and OS versions
  • No WebView fragmentation, no Chromium bundled per app
  • The browser target is a plain static dist, no runtime shipped

bundle & deploy

Build the dist. Package the platform. Ship.

waid build runs your Vite build and embeds the dist alongside the runtime. waid deploy puts it on a connected device.

$ waid build --src . --mode production

→ .waid/build/web-package/web/, deploy the dist to any static host

what you ship

Artifacts per platform

Every target produces something you can hand to a store or a user today. No cross-building sleight of hand - where a host OS is required, it says so.

Artifacts produced by each waid build target, with the JavaScript engine used and the host required to build it.
targetyou shipjs enginebuilds on
desktopadapts to the host OS.app + .dmgsetup.exe.deb / AppImageV8any host
macos.app.dmgV8macOS
windowsNSIS setup.exeV8Windows
linux.debAppImagepacmanV8Linux
android.apkV8host + Android SDK
iosXcode projectdev build → .ipaJSCmacOS + Xcode
(none)staged web dist-any host

capabilities

Declaring what your app needs

Capabilities are declared in waid.config.json and enforced at build time. A target that cannot honour one fails the build rather than shipping an app that asks for a permission it never uses.

The ten capability groups a WAID app can declare, with their configuration keys.
groupgrants
hostNative APIs the app may call12 keys
mediaAudio and video playback, camera and microphone4 keys
photosRead the device photo library2 keys
storageFile access beyond the app’s own directories1 key
contactsRead and write the address book2 keys
telephonyPlace calls and read call state3 keys
messagingSend, read and receive SMS4 keys
launcherAct as the device home screen3 keys
alarmSchedule work that wakes the device1 key
hapticsVibration feedback1 key

Ship one codebase to every platform.

Design partners get hands-on help wiring their app to all four targets.