# PyWeft > A Python UI framework. Components are `.weft` files: an XML template, > a Python code block and scoped CSS. Apps run in the browser (Python on > WebAssembly via Pyodide) or as a desktop window, from one codebase. > `pyweft-ui` adds themeable, keyboard-accessible controls. PyWeft is new, so don't assume Vue, React, Blazor or Jinja syntax: control flow is ``/`` elements, templates are XML, and a component's code block is a plain Python class body. Read the guide for coding assistants first; it lists the mistakes generated code usually makes. After changing an app, run `uv run pyweft check APP`: it reports mistakes with file, line and the name probably meant, without a browser. ## Docs - [Guide for coding assistants](https://prassanthn.github.io/PyWeft/agents.md): the file format, directives, components, async, routing, data, common traps, the controls - [Full documentation as one text file](https://prassanthn.github.io/PyWeft/llms-full.txt): the assistant guide, the framework guide and the pyweft-ui reference and guide - [Using AI coding assistants](https://prassanthn.github.io/PyWeft/ai/): AGENTS.md, pyweft check and these files - [Tutorial](https://prassanthn.github.io/PyWeft/tutorial/): a small app, step by step - [Guide](https://prassanthn.github.io/PyWeft/guide/): install, components, templates, composing components, apps and building, testing without a browser ## Controls - [pyweft-ui reference](https://prassanthn.github.io/PyWeft/controls/): every control's fields and events - [pyweft-ui guide](https://prassanthn.github.io/PyWeft/controls/guide/): forms and validation, layout, dialogs, tables, trees, themes, accessibility - [Live gallery](https://prassanthn.github.io/PyWeft/live/gallery/): every control, running ## Optional - [Changelog](https://prassanthn.github.io/PyWeft/changelog/) - [Source on GitHub](https://github.com/prassanthn/PyWeft) - [pyweft on PyPI](https://pypi.org/project/pyweft/), [pyweft-ui on PyPI](https://pypi.org/project/pyweft-ui/)