# Ecosystem & packages

> For the complete documentation index, see [llms.txt](/llms.txt)

unotest is a small set of focused packages.

| Package | Role |
| --- | --- |
| [`@unotest/web`](https://www.npmjs.com/package/@unotest/web) | CLI · MCP server · runner · DSL engine (web) |
| [`@unotest/mobile`](https://www.npmjs.com/package/@unotest/mobile) | CLI · MCP server · runner (iOS) |
| [`@unotest/viewer`](https://www.npmjs.com/package/@unotest/viewer) | local results browser (HTTP + WS) |
| [`@unotest/dsl`](https://www.npmjs.com/package/@unotest/dsl) | scenario parser + vocab-agnostic validator |
| [`@unotest/protocol`](https://www.npmjs.com/package/@unotest/protocol) | shared types across runners |

## How they fit

- `@unotest/web` / `@unotest/mobile` are what you install. Each is a CLI **and**
  an MCP server **and** the runner.
- `@unotest/viewer` reads run artifacts and drives runs through a runner adapter
  — today the web adapter.
- `@unotest/dsl` parses and validates scenarios; the web vocab contracts live in
  `@unotest/web`.
- `@unotest/protocol` is pure types — the shared contract that lets the viewer
  drive any runner.

## Links

- Marketing site — [unotest.com](https://unotest.com)
- Playground — [playground.unotest.com](https://playground.unotest.com)
