Set up the repo on your machine
Clone Markless, install it with pnpm on Node 24, and learn the root scripts you run every day.
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.ymluses Node 24. - pnpm 10.33.2. The root
package.jsonpins it inpackageManager. - git. The hooks are shell scripts in
.githooks/. - The
ghCLI, if you push tomain. Thepre-pushhook uses it.
Clone and install
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:
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.
Next: What does one change look like, from branch to merged PR? Your first PR →
