beztack
v0.0.9
Published
Beztack initialization and module management CLI
Downloads
294
Readme
beztack
CLI to create and configure Beztack monorepo projects.
Features
- 🚀 Project scaffolding: Create new Beztack projects from template
- 🎯 Optional modules: Select only the modules you need
- �️ Interactive UI: Beautiful CLI interface with
@clack/prompts - 🧹 Auto cleanup: Removes unused dependencies, files, and code
- 🔄 Codemods: Automatically updates imports and references
- 📦 Smart install: Single
pnpm installat the end
Usage
Create a new project
# Using pnpm create (recommended)
pnpm create beztack
# Or directly with the CLI
pnpm dlx beztack createConfigure modules in existing project
pnpm dlx beztack initShow help
pnpm dlx beztack helpCommands
| Command | Description |
|---------|-------------|
| create | Create a new Beztack project (default) |
| init | Configure modules in an existing project |
| help | Show help message |
Available Modules
| Module | Required | Description | |--------|----------|-------------| | auth | ✅ | Authentication with Better Auth | | payments | ❌ | Payment processing with Polar | | email | ❌ | Email sending with Resend and React Email | | ai | ❌ | AI integration with Vercel AI SDK | | ocr | ❌ | Optical Character Recognition with Tesseract.js | | state | ❌ | URL state management with nuqs |
How it works
beztack create
- Prompts for project name and configuration
- Clones the Beztack template repository
- Customizes project files with your settings
- Installs dependencies
- Runs
beztack initto configure modules - Initializes Git repository (optional)
beztack init
- Shows interactive module selector
- Removes unselected modules:
- Deletes package directories
- Cleans dependencies from package.json
- Removes related files
- Runs codemods to clean imports
- Regenerates entrypoints (routes, API modules)
- Runs
pnpm installonce
Development
# Build
pnpm build
# Watch mode
pnpm dev
# Type check
pnpm typecheckProject Structure
src/
├── cli.ts # CLI entry point with commands
├── create.ts # Project creation logic
├── index.ts # Public exports
├── modules.ts # Module definitions
├── init-project.ts # Module initialization logic
├── remove-module.ts # Module removal logic
├── generate-entrypoints.ts # Entrypoint file generation
├── utils/
│ ├── workspace.ts # Workspace utilities
│ ├── remove-deps.ts # Dependency cleanup
│ └── get-nx-project-roots.ts # Nx project detection
└── codemods/
├── shared.ts # Shared utilities
└── remove-*-imports.ts # Module-specific codemodsAdding a New Module
- Add definition in
src/modules.ts:
{
name: "my-module",
label: "My Module",
description: "Short description",
required: false,
packageDir: "packages/my-module",
npmDeps: ["@beztack/my-module"],
nxProjects: ["api", "ui"],
hasApiModule: true,
hasUiFeature: true,
fileGlobs: [
"apps/api/server/modules/my-module/**/*",
"apps/ui/src/features/my-module/**/*",
],
codemods: ["remove-my-module-imports"],
}- Create codemod in
src/codemods/remove-my-module-imports.ts:
import { removeImportsForPackage } from "./shared.js";
export async function run() {
await removeImportsForPackage("@beztack/my-module");
}- Create module files:
apps/api/server/modules/my-module/index.tsapps/ui/src/features/my-module/routes.tsx
License
MIT
