Create a project
Requirements
- Node
^22.18.0 || ^24.0.0 - pnpm 12 (the template's
packageManagerispnpm@12.6.0) - Docker, for local Postgres
Scaffold
pnpm create taman my-app
npx create-taman my-app
The CLI prompts for a project folder and an npm scope for workspace packages (default: the folder name). Pass -y to accept defaults without prompting:
pnpm create taman my-app --scope acme -y
That produces a folder my-app whose workspace packages are @acme/web, @acme/api, @acme/db-pg, and so on.
Options
-, ., _; max 214 characters).@ for workspace packages. Accepts acme, @acme, or @acme/. Default: folder name.vinicunca/taman to generate from. Default: create-taman@<this CLI version> so the snapshot matches the CLI you ran.pnpm install after writing files.git init and the first commit.--from <dir> is a hidden flag for local checkouts. It archives HEAD of that repo (committed files only) instead of downloading GitHub. Used by the template smoke test.
There are no optional features. Every generated project is the same stack.
What the CLI does
Refuse a non-empty directory
If dir exists and is not empty, generation stops with an error. A directory the CLI created is removed if generation fails later.
Download the template
By default, giget fetches github:vinicunca/taman#<ref>. The default ref is create-taman@0.1.0 (the published CLI version).
Apply template.manifest.ts
The snapshot's template.manifest.ts is loaded and applied:
- Remove published packages (
taman-core,taman-ui,request,create-taman,internal/**), GitHub/changeset/docs/tasks, Graphify, example gallery views, and the manifest itself. - Workspace drops
internal/*entries frompnpm-workspace.yaml. - Scripts drop
build:docker,check:api-packages,publintfrom the rootpackage.json. - Scope replaces
@taman/with@<scope>/in every text file. - Renames worker name, queue names, Docker container/volume/db, and sample env titles.
- Published deps that left the snapshot (
workspace:on@vinicunca/taman-core, etc.) becomecatalog:entries pinned to the snapshot version.
A glob or workspace entry that matches nothing is a hard error (manifest drift). Leftover @taman/ strings are warnings, not failures.
Copy env files and write README
Every .env*.example is copied to the matching .env (never overwriting). README.md is replaced with a short generated file.
Git and install
Unless --no-git, the CLI runs git init and commits Initial commit from create-taman (--no-verify). If git identity is missing, it uses create-taman@users.noreply.github.com. Git failure does not discard the project.
Unless --no-install, it runs pnpm install in the new folder.
Next steps
The CLI prints:
cd my-app
docker compose up -d
pnpm db-pg:migrate:dev
pnpm dev:api # and in another terminal: pnpm dev:web
Continue with Running locally.