No Signals or Subscriptions
Full-tree re-renders on state change, lit-html diffs the DOM. Simple. Predictable. Zero framework overhead.
Full-tree rendering with DOM diffing. Entity-based. No signals. No magic.

Full-tree re-renders on state change, lit-html diffs the DOM. Simple. Predictable. Zero framework overhead.
Each entity type defines its own render() method. Compose UIs by invoking api.render(id) to render entities declaratively.
Types as arrays of behaviors. Add logging, guards, or any cross-cutting concern without wrapper hell or HOCs.
Application state lives in the store; hover, focus and a gesture in progress stay with the browser. No refs, no lifecycle hooks. See [where state lives](/guide/where-state-lives).
Router, forms, and geolocation in Web; UI primitives in [Inglorious UI](https://inglorious.dev/ui)—all entity-based, all customizable, all testable.
Pure JavaScript. No JSX required (though supported). No compiler. No magic. Just functions and events.
Every package ships its own type declarations. Entities, types and the api are checked without casts. See [TypeScript](/guide/typescript).
Web is the framework of the [Inglorious Forge monorepo](https://github.com/IngloriousCoderz/inglorious-forge), next to the store, UI, charts, motion, SSX, generative UI, Supabase and Firebase bindings, and a game engine.