name: create-saleor-package description: Scaffold a new shared package in the saleor-apps monorepo under ./packages/. Use when asked to "create a package", "add a new package", "scaffold a package", "new shared library", or any task that involves creating a new reusable package in the saleor-apps monorepo. Handles all boilerplate - package.json, tsconfig, eslint, vitest, turbo, lint-staged configs, and src/index.ts.
Create Saleor Package
Scaffold a new package in packages/ with all standard monorepo boilerplate.
Workflow
Get the package name - If not provided, ask the user. Need two values:
- Directory name: kebab-case folder name under
packages/(e.g.my-utils) - npm name: Scoped package name (e.g.
@saleor/my-utils). Default:@saleor/<directory-name>
- Directory name: kebab-case folder name under
Run the scaffold script:
bash .claude/skills/create-saleor-package/scripts/scaffold.sh <dir-name> <npm-name>Run
pnpm installfrom the monorepo root to link the new package into the workspace.Add subpath exports if the user requested specific modules. Update
package.jsonexports:"exports": { "./module-name": { "import": "./src/module-name.ts", "types": "./src/module-name.ts" } }Create corresponding
src/module-name.tsfiles.Add runtime dependencies to
package.jsonif needed. Usecatalog:for versions managed inpnpm-workspace.yaml, orworkspace:*for internal packages.
What the Script Creates
| File | Purpose |
|---|---|
package.json |
type: module, scripts (check-types, lint, test), devDeps for eslint/ts/vitest |
tsconfig.json |
Extends @saleor/typescript-config-apps/base.json |
eslint.config.js |
Flat config extending @saleor/eslint-config-apps |
vitest.config.ts |
jsdom environment, css disabled, shuffle enabled |
turbo.json |
Extends root turbo config |
lint-staged.config.js |
Extends root + eslint/prettier for JS/TS |
CHANGELOG.md |
Empty changelog for changesets |
src/index.ts |
Entry point with export {} placeholder |
Naming Conventions
Existing packages use two patterns:
@saleor/apps-<name>for core shared packages (logger, otel, shared, trpc, ui, domain)@saleor/<name>for standalone utilities (errors, webhook-utils, sentry-utils)
Follow the user's preference. When unclear, use @saleor/<dir-name>.