CLI
JAF has one command you actually need: the scaffolder. It writes a new project and installs its dependencies.
Everything after that - dev server, build, preview, typecheck - runs from your project's own scripts.
Create a Project
Leave the name off and it asks for that too.
Answer the prompts - name,
template, features, package manager, install, git - then cd my-app
and start the dev server:
package.json uses bare binary names
(vite, tsc --noEmit), so nothing in a scaffolded
app is tied to npm, pnpm, yarn or bun.
Templates
Three templates. basic is the default.
| Template | What you get |
|---|---|
blank |
A wired empty project: shell, entry and one page. |
basic |
A home page, an about page, a layout and two sample components. |
full |
A guided tour: data fetching, persisted state, modals, toasts, a dynamic route and a theme toggle. |
Pass --template to skip the question:
Every template also ships JAF's skills library in llm/skills/,
plus an AGENTS.md so your coding assistant writes real JAF.
Common Flags
| Flag | What it does |
|---|---|
--template <id> |
blank, basic or full |
--pm <id> |
Install and print instructions for npm, pnpm,
yarn or bun. Defaults to the manager you ran.
|
--no-git |
Skip git init, which otherwise runs automatically. |
--no-install |
Write the files but do not install dependencies. |
-y |
Skip every prompt and take the defaults. CI and piped input do this on their own, so nothing ever hangs waiting for an answer. |
--flag value and --flag=value both work.
An unknown flag or value stops the run and prints why, rather than guessing.
--help for the full list, including
--tailwind / --no-tailwind and
--tanstack.
The jaf Command
Optional. The @jaf/cli package installs a jaf
binary, and jaf new my-app is the same scaffolder with the same
flags.
You do not need it to build a JAF app.
Day to day, use the four scripts in your project:
| Script | What it does |
|---|---|
dev |
Dev server with hot reloading |
build |
Production build into dist/ |
preview |
Serve the production build locally |
typecheck |
tsc --noEmit across the project |