A full CRUD app with validation, inline updates, and per-session data. Zero JavaScript.
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"
Each visitor gets their own todo list. A hidden _session_id field stamps ownership on each item.
filter="_session_id=#session.id#"
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">
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">
The app uses two files:
site/demo/apps/todo.html
— form, layout, documentation
partials/todo-list.html
— todo list loop, inline swappable