kysera init
Initialize a new Kysera project with interactive or command-line options.
Usage
kysera init [project-name]
Options
-t, --template <name> Project template (default: basic)
Options: basic, api, graphql, monorepo
-d, --database <dialect> Database dialect (default: postgres)
Options: postgres, mysql, sqlite
-p, --plugins <list> Comma-separated plugin names
Default: timestamps,soft-delete
--package-manager <pm> Package manager (npm/pnpm/yarn/bun)
--typescript Use TypeScript (default: true)
--no-typescript Use JavaScript
--git Initialize git repository (default: true)
--no-git Skip git initialization
--install Install dependencies (default: true)
--no-install Skip dependency installation
Templates
basic
Minimal setup with core packages:
my-app/
├── src/
│ ├── index.ts
│ ├── database.ts
│ └── repositories/
├── migrations/
├── tests/
├── package.json
├── tsconfig.json
├── kysera.config.ts
├── .env.example
├── .gitignore
├── README.md
└── SECURITY.md
api
Express.js REST API setup:
my-app/
├── src/
│ ├── index.ts
│ ├── routes/
│ ├── repositories/
│ └── middleware/
├── migrations/
└── ...
graphql
Apollo GraphQL server:
my-app/
├── src/
│ ├── index.ts
│ ├── schema/
│ ├── resolvers/
│ └── repositories/
└── ...
monorepo
Monorepo directory structure:
my-app/
├── apps/
│ ├── api/
│ └── worker/
├── packages/
│ ├── database/
│ ├── repositories/
│ └── schemas/
└── ...
Workspace tooling (e.g. turbo.json, pnpm-workspace.yaml) is not generated — add your preferred workspace manager afterwards.
Available Plugins
Select during initialization:
timestamps- Automatic created_at/updated_atsoft-delete- Soft delete functionalityaudit- Audit loggingrls- Row-level security
Examples
Interactive Mode
kysera init my-app
# Prompts for all options
Non-Interactive
# API with PostgreSQL
kysera init my-app -d postgres -t api
# GraphQL with MySQL
kysera init my-app -d mysql -t graphql
# With specific plugins
kysera init my-app -p timestamps,audit,rls
# Current directory
kysera init . -d postgres
Generated Files
kysera.config.ts
export default {
database: {
dialect: 'postgres',
host: process.env.DB_HOST || 'localhost',
port: Number(process.env.DB_PORT) || 5432,
database: process.env.DB_NAME || 'myapp',
user: process.env.DB_USER || 'postgres',
password: process.env.DB_PASSWORD || ''
},
migrations: {
directory: './migrations'
},
plugins: {
timestamps: { enabled: true },
softDelete: { enabled: true }
}
}
Migration state is tracked in the default migrations table; set migrations.tableName only if you need a different one.
.env.example
# Database Configuration
DB_HOST=localhost
DB_PORT=5432
DB_NAME=myapp
DB_USER=postgres
DB_PASSWORD=
# Application
NODE_ENV=development
PORT=3000
Copy it to .env and fill in DB_PASSWORD — the CLI loads .env from the working directory automatically (without overriding variables already set in the environment).