# {{NAME}}
A generated Frame application: a Rust composition host, a Gleam component
compiled to BEAM bytecode, and a browser page — one binary, one config, one
command.
## Prerequisites
- Rust 1.89+
- Gleam 1.17.0+ and Erlang/OTP (the Gleam toolchain is checked before every
component build; a missing toolchain fails loudly with an install link)
- Node 20+
## Run it
```sh
npm --prefix page install
npm --prefix page run build
cargo run -p app-host
```
Open the URL the host prints. The page fetches its runtime configuration,
joins the running messaging server directly as a participant, and shows:
your component's real lifecycle (registered, starting, running), the entity
your host just stored, and a receipt for any message you send from the page.
## Verify it
```sh
cargo test --workspace
npm --prefix page run e2e
```
`cargo test --workspace` needs the page built first (its full-stack boot test
serves the real `page/dist`). `npm --prefix page run e2e` builds the page,
boots the host, and drives a real, installed Chrome through the same proof.
## What's here
- `host/` — the Rust composition host. It declares the component's identity
in code (no manifest file format is invented), reconciles durable state
before starting anything, and hands its component and stated runtime
policy to Frame's embedding seam, which boots the component, the embedded
messaging server, and the page server together. Stopping the host
preserves storage — nothing here deletes an entity.
- `component/` — the Gleam project, compiled to BEAM bytecode and embedded
into the host binary at build time.
- `page/` — the browser page: fetches its config, joins the messaging server
directly (no fallback feed — a bad config or a dead connection is a loud,
typed, in-page error), and renders the host's real events as they happen.
- `frame.toml` — the one file describing the whole stack: the page server,
the embedded messaging server, and its browser-facing endpoint. Every
value is stated; none is defaulted.
## Learn more
- Building applications on Frame: https://github.com/ablative-io/frame/blob/main/docs/guides/BUILDING-APPS.md
- Frame vocabulary: https://github.com/ablative-io/frame/blob/main/docs/NOMENCLATURE.md