title: "Todo App" page: todo fetch.todos = "local:todos" fetch.todos.filter = "_session_id=#session.id#"

Todo App

A full CRUD app with validation, inline updates, and per-session data. Zero JavaScript.

How It Works

Inline Updates

Forms use w-target and w-swap to replace the todo list in-place without a full page reload.

w-target="#todo-list" w-swap="innerHTML"

Per-Session Data

Each visitor gets their own todo list. A hidden _session_id field stamps ownership on each item.

filter="_session_id=#session.id#"

Validation

The w-validate attribute enables client-side validation. Rules are declared with HTML attributes like w-required.

<input w-required w-min="1" w-max="200">

Server Partials

Action handlers render a partial template and return HTML directly. The client swaps it into the target element.

<input type="hidden" name="w-partial" value="todo-list">

Source Code

The app uses two files:

Page site/demo/apps/todo.html — form, layout, documentation
Partial partials/todo-list.html — todo list loop, inline swappable