---
title: Every Markless package
description: Each Markless package, its npm name, what it does, and whether you can install it from npm today.
sidebar: { label: Packages }
---

You know how to improve a page now. This last section is for looking things up, and it starts with the package list.

All packages share one version. The repo is at `0.5.0`. On npm, the latest release is `0.4.0`. The "On npm" column comes from `npm view` on 2026-10-06.

## Packages you install

These are the packages an app author touches. A Node or Bun app from `npm create markless` lists `core`, `router`, `typescript-plugin`, and `analyzer`.

| npm name | What it does | On npm |
| --- | --- | --- |
| `@markless/core` | The authoring APIs `state`, `computed`, `shared`, `element`, and `storage`. Also `render()` for the browser, `renderToString()` for a server, and the Vite plugin at `@markless/core/vite`. | `0.4.0` |
| `@markless/router` | Multi-page apps: file routes in `pages/`, `Html`, `Link`, and the Vite plugin at `@markless/router/vite`. It builds through Nitro, which deploys to many hosts. | `0.4.0` |
| `@markless/typescript-plugin` | Editor support for `.tsrx` files. See [Editor setup](/tooling/editor-setup). | `0.4.0` |
| `@markless/ui` | Headless, accessible UI components. See [UI components](/ui/overview). | `0.4.0` |
| `@markless/vitest-browser` | Browser test helpers `render()` and `renderSSR()`. Experimental. See [Testing](/tooling/testing). | `0.4.0` |
| `@markless/analyzer` | Browser checks for a running app: console errors, network requests, event wiring, and JavaScript budgets that you set. Optional Playwright driver at `@markless/analyzer/playwright`. | `0.4.0` |
| `create-markless` | Creates a new app. See [CLI](/reference/cli). | `0.4.0` |

## Packages the others use

You don't import these yourself. The packages above depend on them.

| npm name | What it does | On npm |
| --- | --- | --- |
| `@markless/compiler` | The TSRX compiler. At build time, it plans the state, the updates, and which code runs on which event. | `0.4.0` |
| `@markless/bundler` | Build plugins for Rolldown and Vite. | `0.4.0` |
| `@markless/runtime` | The state runtime: reads, writes, and computed updates. | `0.4.0` |
| `@markless/serializer` | The format for state and page data that travel with rendered HTML. | `0.4.0` |
| `@markless/web` | The render code behind `render()` in the browser and `renderToString()` for HTML. | `0.4.0` |
| `@markless/icons` | Iconify icon packs as `<pack.icon />` tags, inlined at build time. | not published |
| `@markless/ui-tools` | Build tools for the `@markless/ui` design system. | not published |

In the repo, `@markless/ui` `0.5.0` depends on `@markless/icons` and `@markless/ui-tools`. The `0.4.0` release on npm depends only on `@markless/core`.

`markless-sr-app` is private. It serves the app for the screen-reader test lanes, and it never goes to npm.

:::warning[Why does a new app say ^0.4.0 when the repo says 0.5.0?]
The CLI pins `@markless/*` to its own version, with a `^` in front. The `0.5.0` packages are not on npm yet. So `npm create markless@latest` writes `^0.4.0` today.
:::

**Next:** What do words like "container" and "chunk" mean here? [Glossary →](/reference/glossary)
