# raea 0.1.0-canary.2

> The second canary of the raea engine: the `raea` CLI that renders, plays and checks compositions and games written in React and TypeScript, with the SDK, the runtime and the agent skills beside it.

The second canary of the raea engine: the `raea` CLI that renders, plays and checks compositions and games written in React and TypeScript, with the SDK, the runtime and the agent skills beside it. It needs no account and talks to no raea server.

```sh
curl -fsSL https://raea.io/install | sh
```

That installs into `~/.raea`, links `raea` from `~/.local/bin`, and adds the `raea` and `raea-bevy` skills to `~/.claude/skills`, so a coding agent knows how to write, render and play with raea. Then:

```sh
mkdir my-video && cd my-video && raea init
raea render        # a title card until you cut footage in with `raea cut`
```

## What changed since 0.1.0-canary.1

**One CLI and one SDK, both called raea.** The command is `raea` (it was `raea-motion`; the installer moves an old link over), and the SDK is the `raea` package (it was `@raea/motion`).

**The SDK speaks Bevy.** raea draws with Bevy 0.20, and its TypeScript now uses Bevy's names and shapes: `Camera3d`, `StandardMaterial` with Bevy's fields (textures with their samplers, the metallic-roughness map, fog, specular tint, anisotropy, parallax and the rest), `ExtendedMaterial` for custom shaders, and a material's `animate` track keyed by those same fields and checked by TypeScript. `<Canvas3D>` is no longer needed: a `<Camera3d>` can sit in any page element and draws its view in that element's box (a camera on the whole frame draws under the page, as before).

**The page and the 3D world are one app.** A React page (HTML and CSS, laid out and drawn by Blitz) and a Bevy world now share one App: events and input go both ways (a mesh takes `onClick` like any element), page elements can follow world objects, and CSS filters and backdrop-filter, gradients, blend modes and SVG filters (lighting among them) are drawn as Chrome draws them, each checked against Chrome. A Rust plugin can register its own page element, which TSX then uses as a tag.

**Bevy's plugin ecosystem, from TypeScript.** About fifty Bevy plugins are declared in one catalog, built into `raea` and reachable as `raea/plugins/<name>`, typed from their reflected types, or through raea's adapters and calls where a crate has none: physics (avian, rapier 2D and 3D), tilemaps and levels (tilemap, LDtk, Tiled, TrenchBroom), particles (hanabi, enoki), input (enhanced input, leafwing, a virtual gamepad and picking), audio (kira), cameras (pan, orbit), assets (OBJ, MagicaVoxel, Aseprite), easing, navigation and pathfinding (vleue_navigator, bevy_northstar), and more. `raea/bevy`'s `BevyApp` runs a headless App with any of them from a script. Declaring a plugin in `package.json`'s `raea.plugins` is the same for a Bevy crate, a Blitz extension or raea's own.

**Characters move from goals.** `@raea/character/plugin` runs raea's motion engine as an App system: give a character a goal and it performs it, frame by frame.

**Shaders.** A full-frame pass (`FramePass`) and material extensions over `StandardMaterial`, from TSX.

**Linux.** raea builds, renders and plays on Linux (x86_64, Vulkan, glibc 2.39 or newer, so Ubuntu 24.04 and later), and the same install line picks the Linux build. Install `fonts-noto-cjk` for CJK text. Rendering works on a CPU (llvmpipe); live play wants a GPU. Caches and logs follow XDG (`~/.cache/raea`, `~/.local/state/raea`). `raea song` isn't in the Linux build yet. On a minimal system (a container image, say) raea needs `libasound2t64 libfontconfig1 libvulkan1 mesa-vulkan-drivers` (Debian and Ubuntu names).

**A first run that shows something.** `raea init` makes a project whose edit plays a title card until you cut footage in, so the first `raea render` is never black.

## Windows (added 2026-11-05)

raea now runs on Windows 10 and 11 (x86_64): `raea-0.1.0-canary.2-windows-x86_64.zip` below, the same engine, SDK and skills as the macOS and Linux builds, built from canary.2 plus the Windows port's fixes. To install it, in PowerShell:

```powershell
irm https://raea.io/install.ps1 | iex
```

The installer checks the zip's checksum, puts raea under `~\.raea`, adds its `bin` to your PATH and installs the agent skills. To do the same by hand:

```powershell
$v = "0.1.0-canary.2"; $zip = "raea-$v-windows-x86_64.zip"
$url = "https://github.com/shinyobjectz/raea/releases/download/v$v/$zip"
Invoke-WebRequest $url -OutFile $zip; Invoke-WebRequest "$url.sha256" -OutFile "$zip.sha256"
if ((Get-FileHash $zip -Algorithm SHA256).Hash -ne ((Get-Content "$zip.sha256") -split '\s+')[0]) { throw "checksum mismatch" }
$tmp = Join-Path $env:TEMP "raea-$v"; Expand-Archive $zip -DestinationPath $tmp -Force
Remove-Item "$HOME\.raea\bin", "$HOME\.raea\share" -Recurse -Force -ErrorAction SilentlyContinue
New-Item -ItemType Directory -Force "$HOME\.raea" | Out-Null
Move-Item "$tmp\raea\bin", "$tmp\raea\share" "$HOME\.raea"
[Environment]::SetEnvironmentVariable("Path", "$HOME\.raea\bin;" + [Environment]::GetEnvironmentVariable("Path", "User"), "User")
```

Open a new terminal, then `mkdir my-video; cd my-video; raea init` as on the other platforms. For a coding agent, copy the folders in `~\.raea\share\raea\skills` into `~\.claude\skills`.

- It needs the **Microsoft Visual C++ Redistributable (x64)**, which most machines already have. If raea won't start, install it from https://aka.ms/vs/17/release/vc_redist.x64.exe (or `winget install Microsoft.VCRedist.2015+.x64`).
- It draws with a **DirectX 12 or Vulkan GPU driver**. With no GPU (a VM or a server), WARP, Windows' own software DirectX, crashes compiling one of Bevy's shaders, so use Mesa's lavapipe (software Vulkan) with `WGPU_BACKEND=vulkan`. That is how the zip was checked on GitHub's Windows runners, where it rendered, ran the plugin catalog and installed from the zip alone. It hasn't been tested on a Windows machine with a real GPU yet: reports welcome.
- Not in this build: `raea song` (its beat model's runner is macOS only so far).

## Known missing

- **React parity is the next release.** React apps render on the page (raea's own app passes all 15 of its review screens against Chrome, and 261 of the 265 parity cases pass; the four left draw video frames, seek video, read video back through a canvas and downscale an image), but most of the web platform isn't yet proved against Chrome item by item: 625 of the 3,812 most-used React, CSS, event, text, form, media, accessibility and platform features have a passing case.
- **A composition that cuts between two 3D scenes draws a model's screens (a page shown on a mesh) only in the first one.** Render each scene on its own and join them until this is fixed.
- **Exports aren't signed.** Content credentials come from raea's service, which this free build leaves out.
- **Three plugins are compiled in without a TypeScript API yet:** bevy_asset_loader, iyes_progress and moonshine-save, which are Rust-side libraries. Saving and loading from TypeScript is next.
- Next: a project layout by feature (`raea init --layout feature`, with assets/ found from anywhere in the project).
- macOS needs Apple Silicon; Windows needs x86_64 (no Arm build yet).
- Canary: it changes often, and parts of it are rough.

### Web module (added 2026-11-06)
raea_shape_web.js and raea_shape_web_bg.wasm: this release's core/shape (its shape language: box, sphere, minus, hull, extrude, text3d with its bundled faces) compiled to wasm with engine/shape-web's wrapper, for @raea/r3f's loadShapes() (docs/r3f.feature R3F5). SHA256SUMS-web holds their hashes. Serve both files with your app (GitHub sends them as downloads, no CORS). This release has no raea-web module: engine/web came after it.
