# zerolith > A full frontend framework with clear patterns for you and your agent: fine-grained signals, HTML templates that need no compiler, typed routing, forms, server rendering, i18n, and tooling that works wherever the app is served. Every page below is Markdown. The [home page](/index.md) summarizes the framework, the tutorial builds an app step by step, the guides teach one pattern per concept, the reference lists every export, and every diagnostic code has its own page. ## Tutorial - [Build a packing list](/learn.md): The zerolith tutorial: start a project, then build a packing list page one idea at a time, from signals and lists to storage, styles, tests, and a deployed build. - [Add a page](/learn/page.md): Write a component, give it a route, and link to it from the navigation. - [State and lists](/learn/state.md): Hold the items in a signal, render one row per item with each, and learn the one rule that keeps a page live. - [Events and updates](/learn/events.md): Listen to clicks and form submits with @ bindings, and change state by setting a new array. - [Components](/learn/components.md): Split the page into a row and a form, pass props, and see why a component runs once. - [Derived state and conditions](/learn/derived.md): Count what is packed, filter the rows, and show a note when the filter leaves nothing. - [Saving with effects](/learn/effects.md): Load the list from the browser's storage and save every change with an effect. - [Styles](/learn/styles.md): Give a component its own styles with the css tag, scoped so they never leak into the rest of the page. - [Testing](/learn/testing.md): Write a browser test that mounts the page, clicks through it, and checks it for accessibility defects. - [Build and ship](/learn/ship.md): Build the packing list for production, check the build locally, and put it on a host. ## Guide - [Introduction](/guide.md): What zerolith is, how its packages fit together, how to start a project, the one rule to learn first, and a map of the guides. - [Application structure](/guide/structure.md): The layout a zerolith application uses, what each file owns, the conventions the tooling relies on, and the AGENTS.md that lets a coding agent work in it. - [Signals](/guide/signals.md): The reactive graph: signals for state, computed values, effects, untracked reads, batching, ownership, and async values with resource. - [Templates](/guide/templates.md): How html templates render and update, components, the five binding forms, keyed lists, conditions, JSX, raw markup, and what the renderer refuses. - [Styles](/guide/styles.md): Scoped component styles, in a css literal or a stylesheet file imported with ?scoped, built on constructable stylesheets and the @scope rule, with no shadow DOM. - [Routing](/guide/routing.md): The typed route table, plain anchors, loaders, head metadata, and the outlet. - [Forms](/guide/forms.md): Native forms submitted with fetch, with pending state, RFC 9457 field errors, and validation written once for the browser and the server. - [Typed client](/guide/client.md): Generate a route table and types from an OpenAPI document, call operations with checked inputs, and read failures as problems, against any backend. - [Server rendering](/guide/server-rendering.md): Rendering views to HTML with no DOM, with the same escaping and URL rules as the browser, hydrating them in place, and serving a routed application. - [Custom elements](/guide/elements.md): Mount a zerolith view inside a page or a tree another framework owns, through a custom element whose attributes and properties are signals. - [Internationalization](/guide/i18n.md): Locale negotiation and state on Intl with nothing shipped, formatters that follow the locale signal, and MessageFormat 2 catalogs compiled into one module per locale. - [Accessibility](/guide/accessibility.md): The primitives every component library rebuilds, as functions over the DOM: focus trap, roving tabindex, live announcer, focus origin, visually hidden text, and media query signals. - [Command line](/guide/command-line.md): The Rust command line: a dev server that resolves packages itself, production builds bundled with Rolldown, a preview server, import maps with integrity hashes, and project checks. - [Building and serving](/guide/deploying.md): What zerolith build writes and how to serve it: static hosts, web servers, a backend's own static files, a path under a domain, caching, and a backend next to the dev server. - [Vite](/guide/vite.md): For projects that use Vite: the plugin brings zerolith's build passes into Vite and adds hot module replacement that swaps components in place and keeps named signal state. - [Testing](/guide/testing.md): Mount views with automatic cleanup, settle async work, check that a component hydrates its own server markup, and catch the accessibility defects a test can see. - [Dev tools](/guide/dev-tools.md): The in-page inspector, the development hook it reads, named signals, and Performance panel tracks, all independent of how the app is served. - [Diagnostics](/guide/diagnostics.md): The one record every error and warning uses, stable codes, documentation URLs, listeners, and production builds. - [Observability](/guide/observability.md): Spans for navigations, hydration, and requests through the OpenTelemetry API, with the tracer and the SDK left to the application. - [Coding agents](/guide/agents.md): Set up a coding agent for a zerolith app: the project's AGENTS.md and the zerolith skill, and what the docs and diagnostics give it besides. ## Reference - [zerolith](/reference/zerolith.md): API reference for zerolith: 50 exports, generated from the source. - [zerolith/ssr](/reference/zerolith-ssr.md): API reference for zerolith/ssr: 4 exports, generated from the source. - [zerolith/element](/reference/zerolith-element.md): API reference for zerolith/element: 3 exports, generated from the source. - [zerolith/internal](/reference/zerolith-internal.md): API reference for zerolith/internal: 14 exports, generated from the source. - [zerolith/jsx-runtime](/reference/zerolith-jsx-runtime.md): API reference for zerolith/jsx-runtime: 6 exports, generated from the source. - [@zerolith/router](/reference/zerolith-router.md): API reference for @zerolith/router: 20 exports, generated from the source. - [@zerolith/router/server](/reference/zerolith-router-server.md): API reference for @zerolith/router/server: 2 exports, generated from the source. - [@zerolith/devtools](/reference/zerolith-devtools.md): API reference for @zerolith/devtools: 4 exports, generated from the source. - [@zerolith/vite](/reference/zerolith-vite.md): API reference for @zerolith/vite: 27 exports, generated from the source. - [@zerolith/vite/runtime](/reference/zerolith-vite-runtime.md): API reference for @zerolith/vite/runtime: 6 exports, generated from the source. - [@zerolith/forms](/reference/zerolith-forms.md): API reference for @zerolith/forms: 18 exports, generated from the source. - [@zerolith/client](/reference/zerolith-client.md): API reference for @zerolith/client: 12 exports, generated from the source. - [@zerolith/client/generate](/reference/zerolith-client-generate.md): API reference for @zerolith/client/generate: 10 exports, generated from the source. - [@zerolith/client/port](/reference/zerolith-client-port.md): API reference for @zerolith/client/port: 5 exports, generated from the source. - [@zerolith/test](/reference/zerolith-test.md): API reference for @zerolith/test: 9 exports, generated from the source. - [@zerolith/a11y](/reference/zerolith-a11y.md): API reference for @zerolith/a11y: 15 exports, generated from the source. - [@zerolith/i18n](/reference/zerolith-i18n.md): API reference for @zerolith/i18n: 10 exports, generated from the source. - [@zerolith/i18n/compile](/reference/zerolith-i18n-compile.md): API reference for @zerolith/i18n/compile: 6 exports, generated from the source. - [@zerolith/otel](/reference/zerolith-otel.md): API reference for @zerolith/otel: 4 exports, generated from the source. ## Diagnostics - [Diagnostics](/e.md): Every diagnostic code zerolith can emit, with its cause and fix. - [binding_in_comment](/e/binding_in_comment.md): An expression appears inside an HTML comment. - [binding_in_raw_text](/e/binding_in_raw_text.md): An expression appears inside an element whose content is raw text. - [binding_in_tag_position](/e/binding_in_tag_position.md): An expression appears where a tag or attribute name is expected. - [binding_not_single](/e/binding_not_single.md): A boolean attribute, property, or event binding has more than one expression or extra text. - [button_without_name](/e/button_without_name.md): A