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
ferrite new webapp hello-ferrite --with-tests
cd hello-ferrite
The project is self-contained. It does not depend on a Ferrite source checkout.
hello-ferrite/
├── Cargo.toml
├── ferrite.json
├── site/
│ └── index.html
└── src/
└── main.rs
Run the development server
ferrite dev
Ferrite prints the local URL first, then reports content and compiler changes:
▲ 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
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
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 previewpath for unverified, throwaway work. - The same app contract for human CLI use and agent automation.
Next, learn Ferrite CLI, add a Queue, or make the app agent-native.