---
title: Set up the repo on your machine
description: Clone Markless, install it with pnpm on Node 24, and learn the root scripts you run every day.
sidebar: { label: Dev setup }
---

Last page, you saw the stack of packages. Now get all of them to build on your machine.

One `pnpm install` sets up every package. It also turns on the git hooks, so your first commit runs CI's fast checks.

## What you need

- **Node 24.** Every job in `.github/workflows/ci.yml` uses Node 24.
- **pnpm 10.33.2.** The root `package.json` pins it in `packageManager`.
- **git.** The hooks are shell scripts in `.githooks/`.
- **The `gh` CLI**, if you push to `main`. The `pre-push` hook uses it.

## Clone and install

```bash
git clone https://github.com/compiled-run/markless.git
cd markless
corepack enable
pnpm install
```

`pnpm install` runs the root `prepare` script. That script runs `git config core.hooksPath .githooks`.

Some tests start real browsers. CI installs them with this command:

```bash
pnpm --dir packages/vitest-browser exec playwright install chromium webkit
```

You can also run `pnpm ci:local --install`. It runs each job's setup steps before its checks, and the Playwright install is one of them.

## The scripts you will use

| Command | What it does |
| --- | --- |
| `pnpm run typecheck` | Runs the `.tsrx`-aware checker, `packages/typescript-plugin/src/tsc.ts`, on the root `tsconfig.json` |
| `pnpm ci:local --fast` | Runs CI's fast jobs with the exact commands from `ci.yml` |
| `pnpm exec vp test <file>` | Runs one test file |
| `pnpm test:compiler` | Runs `packages/compiler/test/*.test.ts` |
| `pnpm test:headless` | Runs the `ui` test project, the `@markless/ui` browser tests |
| `pnpm lint` | Runs `vp lint` |
| `pnpm check` | Runs `vp check` |
| `pnpm fmt` | Runs `vp fmt` |
| `pnpm build` | Packs the packages with `vp pack`, plus CommonJS builds of `router` and `typescript-plugin` |
| `pnpm test` | Runs the long local suite: completion matrix, every test project, benchmark guard, box tests, perf guards |
| `pnpm rules` | Regenerates the agent files from `.ruler/` |

`vp` is the Vite+ command line. The repo installs it as the `vite-plus` dev dependency.

The root `vite.config.ts` defines three test projects: `node`, `browser` and `ui`. Pass `--project <name>` to run one.

:::warning[Is pnpm test the same as CI?]
No. `pnpm test` runs a different set of commands from `ci.yml`. Use `pnpm ci:local` to run what CI runs.
:::

:::tip[Where does my editor get .tsrx support?]
The TypeScript plugin adds completions and errors in `.tsrx` files. Set it up with [Editor setup](/tooling/editor-setup).
:::

**Next:** What does one change look like, from branch to merged PR? [Your first PR →](/contributing/your-first-pr)
