Skip to content
forma.
v3.0
☰

Learn by changing things

Small steps.
Real understanding.

Start with a signal, build an inventory interaction, then follow data across the TypeScript–Rust boundary. Each lesson gives you something concrete to change and verify.

The path: first update temporary browser state, then render request data in Rust, then add explicit saves in Field Notes. These are separate steps: a working signal does not automatically save to the server.

What you need: basic JavaScript and HTML. The first five lessons run in your browser. Native lessons use a running Rust example; local scaffolding requires Node 22+ and Rust 1.85+.

Lesson 01

Make state visible

Create a signal and connect it to a real DOM node.

Explore
Lesson 02

Give behavior a home

Compose a small interface and keep state ownership clear.

Explore
Lesson 03

Derive, don’t synchronize

Compute a price from state without maintaining a second mutable total.

Explore
Lesson 04

Keep identity in a list

Let a row keep its DOM when the collection changes order.

Explore
Lesson 05

Build the inventory interaction

Update one item by key while preserving the row and the user’s input.

Explore
Lesson 06

Make HTML on the server

Follow declared TypeScript props into a typed Rust response.

Explore
Lesson 07

Activate what needs interaction

Keep the server’s DOM and attach behavior at declared island boundaries.

Explore
Lesson 08

Make the inventory durable

Take a stock edit through native rendering, a validated request, a conflict check and local persistence.

Explore
Lesson 09

Take the application with you

Build the matching assets and Rust binary, then deploy the rendering mode you chose.

Explore

Find your next answer.

Search Forma 3.0 documentation, guides and examples.