Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

@forinda/kickjs-cli

CLI for KickJS — project scaffolding, DDD module generation, dev/build/start commands.

Install

# Using the KickJS CLI (recommended — installs as dev dependency)
kick add cli

# Manual install
pnpm add -D @forinda/kickjs-cli

Commands

kick new <name>           # Scaffold a new KickJS project
kick dev                  # Start dev server with Vite HMR
kick build                # Production build via Vite
kick start                # Run production build
kick info                 # Print system and framework info

kick g module <names...>  # Generate one or more DDD modules
kick g scaffold <name>    # Generate CRUD module from field definitions
kick g controller <name>  # Generate controller
kick g service <name>     # Generate service
kick g middleware <name>  # Generate middleware
kick g guard <name>       # Generate auth guard
kick g adapter <name>     # Generate lifecycle adapter
kick g dto <name>         # Generate DTO with Zod schema

kick rm module <names...> # Remove one or more modules
kick add <pkg>            # Install a KickJS package + peers
kick add --list           # Show all available packages

Interactive Project Scaffolding

kick new uses @clack/prompts for a rich interactive experience with colored output:

  • Template selection — REST, GraphQL, DDD, CQRS, Minimal
  • Package manager — pnpm, npm, yarn
  • Repository/ORM — Prisma, Drizzle, In-Memory, Custom
  • Multi-select packages — auth, swagger, otel, ws, queue, cron, mailer, graphql, devtools, notifications, multi-tenant
  • Git init + dependency install confirmations

Selected packages are automatically wired into the generated package.json dependencies and src/index.ts adapter registrations.

All prompts can be skipped with flags for CI/scripting:

kick new my-api --template rest --pm pnpm --repo prisma \
  --packages auth,swagger,otel --no-git --no-install

Generator Flags

kick g module users --no-entity       # Skip entity/value objects
kick g module users --no-tests        # Skip test files
kick g module users --minimal         # Only index.ts + controller
kick g module users --dry-run         # Preview without writing
kick g module users --repo prisma     # Use Prisma repository (working code)
kick g module users --repo drizzle    # Use Drizzle repository (working code)
kick g module users --no-pluralize    # Singular names: src/modules/user/

Repository Types

The --repo flag or defaultRepo config controls the generated repository implementation:

Type File Code
inmemory (default) in-memory-{name}.repository.ts Working Map-based store
drizzle drizzle-{name}.repository.ts Working Drizzle ORM queries
prisma prisma-{name}.repository.ts Working Prisma Client queries
{ name: 'custom' } custom-{name}.repository.ts In-memory stub with TODO markers

Custom repo types accept any string and generate a stub repository with the correct class/file naming:

kick g module user --repo typeorm     # → typeorm-user.repository.ts, TypeormUserRepository
kick g module user --repo mongoose    # → mongoose-user.repository.ts, MongooseUserRepository

Configuration

Configure defaults in kick.config.ts:

import { defineConfig } from '@forinda/kickjs-cli'

export default defineConfig({
  pattern: 'ddd',

  // Module generation settings
  modules: {
    dir: 'src/modules',
    repo: 'prisma',                    // built-in: 'drizzle' | 'inmemory' | 'prisma'
    // repo: { name: 'typeorm' },      // custom ORM
    pluralize: true,                   // set false for singular module names
    schemaDir: 'prisma/',              // schema output directory
  },

  commands: [
    { name: 'db:migrate', description: 'Run migrations', steps: 'npx prisma migrate dev' },
    { name: 'db:seed', description: 'Seed database', steps: 'npx prisma db seed' },
  ],
})

Documentation

Full documentation

License

MIT