# Markless > Community docs for Markless, the UI framework with no hydration. Learn the model, build an app, and contribute. ## Docs - [Markless](https://markless.dev/): Write plain components. The compiler plans every update before your app runs, and the same component renders in the browser, on a server, or in tests. ## Start here - [What is Markless?](https://markless.dev/start/what-is-markless): The mental model. The compiler plans every update before your app runs, your component runs once, and the same component renders in many places. - [Use Markless without a server](https://markless.dev/start/browser-only): Run a Markless component in a plain Vite app with five small files, two packages, and no server. - [Quick start](https://markless.dev/start/quick-start): Create a multi-page Markless app with npm create markless, start it, and click the starter counter. - [Your first component](https://markless.dev/start/your-first-component): Build a small grocery list in four steps, from plain markup to state, a list, and an input. - [Project tour](https://markless.dev/start/project-tour): What each file in a new Markless starter app does, from the real create-markless output. ## Writing components - [Why your component runs once](https://markless.dev/components/tsrx-syntax): How a .tsrx component is built, which lines are TypeScript and which are markup, and why the body runs only once. - [Markup and expressions](https://markless.dev/components/markup-and-expressions): How text, attributes, and expressions in .tsrx markup turn into updates that the compiler plans ahead. - [Control flow](https://markless.dev/components/control-flow): How @if, @switch, and keyed @for add, remove, and move real elements on the page. - [Props and children](https://markless.dev/components/props-and-children): How a prop stays current while the child runs once, how a callback prop talks back, and where children go. - [Scoped styles](https://markless.dev/components/styles): How a