# Quickstart

Create a Ferrite web app, run it with live reload, verify it, and deploy a preview.

Create a source-deployable Rust web app and open it locally in a few commands.
The generated project includes static content, an API route, server-sent events,
a health route, and a deploy manifest.

## Create the app

```bash
ferrite new webapp hello-ferrite --with-tests
cd hello-ferrite
```

The project is self-contained. It does not depend on a Ferrite source checkout.

```text
hello-ferrite/
├── Cargo.toml
├── ferrite.json
├── site/
│   └── index.html
└── src/
    └── main.rs
```

## Run the development server

```bash
ferrite dev
```

Ferrite prints the local URL first, then reports content and compiler changes:

```text
▲ Ferrite 0.1.0
- Local:        http://127.0.0.1:8787
- Network:      http://192.0.2.10:8787
- Project:      /path/to/hello-ferrite

✓ Starting...
✓ Refreshed web content (1 files) in 0ms
○ Compiling Rust application ...
✓ Compiled Rust application in 1.9s
✓ Ready in 1.9s
```

Open the Local URL. Edit `site/index.html` to see a browser refresh without a
Rust build. Edit `src/main.rs` to see Ferrite rebuild and restart the function
while retaining plane state.

## Check and test

```bash
ferrite check
ferrite test
```

`check` evaluates the deployment spec, application admission rules, and Rust
source. `test` runs the crate’s tests. Add `--json` to `check` or `dev` when an
agent or CI job needs structured lifecycle events.

## Deploy the app

```bash
ferrite login --ephemeral
ferrite deploy
```

Ferrite sends the source through admission and an attested build, then prints
the deployed host after the application is running. For unverified work that
should be isolated and automatically expire, use `ferrite preview` instead.

## What you have now

- A local gateway with API, content, SSE, and live reload.
- Persistent local plane state under `.ferrite/state`.
- A manifest that declares resources, routes, compute, egress, and limits.
- A separate `ferrite preview` path for unverified, throwaway work.
- The same app contract for human CLI use and agent automation.

Next, learn [Ferrite CLI](/developers/cli/), add a [Queue](/developers/queues/),
or make the app [agent-native](/developers/agent-native-apps/).
