---
title: "create-taman"
description: "CLI that downloads vinicunca/taman, applies template.manifest.ts, and writes a project you own."
canonical_url: "https://vinicunca.dev/taman/packages/create-taman"
---
# create-taman

> CLI that downloads vinicunca/taman, applies template.manifest.ts, and writes a project you own.

Version **0.1.0**. Bin: `create-taman`. Node `>=22.18.0`. See [Create a project](https://vinicunca.dev/taman/getting-started/create-a-project) for the user flow.

## Library exports

The package's `"."` export is `src/index.ts` (the generate API). The CLI entry is `dist/bin.mjs`.

From `packages/create-taman/src`:

```ts
parseCliArgs(argv: string[]): CliArgs
defaultRef(): string                    // `create-taman@${packageJson.version}`
main(argv?: string[]): Promise<void>

generateProject(options: {
  dir: string
  names: GenerateNames
  source: { type: 'github'; ref: string } | { type: 'local'; repo: string }
  git: boolean
}): Promise<{ warnings: string[] }>

validateName(value: string, label: string): string | undefined
normalizeScope(value: string): string   // strips @ and trailing /
toNames(name: string, scope: string): GenerateNames
```

`GenerateNames`: `{ name, scope, nameSnake }` where `nameSnake` is `name.replace(/[^a-z0-9]+/g, '_')`.

Template repo constant: `github:vinicunca/taman`. GitHub fetch uses giget `force` + `forceClean`. Local `--from` uses `git archive HEAD`.

## Manifest (`template.manifest.ts`)

```ts
interface TemplateManifest {
  remove: Array<string>;
  workspacePackages: Array<string>;
  scripts: Array<string>;
  scopeFrom: string; // '@taman/'
  rename: Array<{ file: string; from: string; to: string }>;
}
```

`to` may contain `{{name}}`, `{{scope}}`, `{{nameSnake}}`. Explicit renames run **before** the scope rename. Unmatched remove globs or missing workspace package entries abort generation.

## Name rules

`/^[a-z0-9][\w.-]*$/` and no uppercase. Max 214 characters. Empty is rejected.

## Git commit

`git init -q`, `git add -A`, `git commit -q --no-verify -m 'Initial commit from create-taman'`. If `user.email` is unset, `-c user.name=create-taman -c user.email=create-taman@users.noreply.github.com`. Failures become warnings; the project stays.

---

- [GitHub](https://github.com/vinicunca/taman/tree/main/packages/create-taman)
- [npm](https://www.npmjs.com/package/create-taman)


## Sitemap

See the full [sitemap](https://vinicunca.dev/sitemap.md) for all pages.
