API Reference

Programmatic usage and API documentation for integrating Kickstart Express into your tools and workflows.

Node.js API

While Kickstart Express is primarily a CLI tool, you can also use it programmatically in Node.js applications.

Installation

npm install kickstart-express

Basic Usage

const { generateProject } = require('kickstart-express');

// Generate a project programmatically
await generateProject({
  name: 'my-api',
  language: 'ts',
  docker: true,
  src: true,
  structured: true,
  outputDir: './projects'
});

Configuration Object

The configuration object used for programmatic project generation.

ProjectConfig Interface

interface ProjectConfig {
  name: string;                    // Project name (required)
  language: 'ts' | 'js';          // Programming language
  docker?: boolean;               // Include Docker files
  src?: boolean;                  // Use src folder structure
  structured?: boolean;           // Use structured architecture
  outputDir?: string;             // Output directory (default: current)
  packageManager?: 'npm' | 'pnpm' | 'yarn'; // Package manager
  installDependencies?: boolean;  // Auto-install dependencies
}

Configuration Properties

name

Type: string (required)
Description: The name of the project. Used as directory name and in package.json.

language

Type: 'ts' | 'js'
Default: 'ts'
Description: Programming language for the project.

docker

Type: boolean
Default: false
Description: Include Dockerfile and docker-compose.yml files.

src

Type: boolean
Default: false
Description: Create src folder structure instead of root-level files.

structured

Type: boolean
Default: false
Description: Use structured architecture with controllers, services, routes. Automatically enables src.

outputDir

Type: string
Default: process.cwd()
Description: Directory where the project will be created.

packageManager

Type: 'npm' | 'pnpm' | 'yarn'
Default: 'pnpm'
Description: Package manager to use for dependency installation.

installDependencies

Type: boolean
Default: true
Description: Automatically install dependencies after project generation.

API Methods

generateProject()

Main method to generate a new Express.js project.

async function generateProject(config: ProjectConfig): Promise<GenerationResult>

Parameters:

  • config - ProjectConfig object with project configuration

Returns:

Promise<GenerationResult>

interface GenerationResult {
  success: boolean;
  projectPath: string;
  message: string;
  error?: string;
}

Example:

const result = await generateProject({ name: 'my-awesome-api', language: 'ts', docker: true, structured: true }); if (result.success) { console.log(`Project created at: ${result.projectPath}`); } else { console.error(`Error: ${result.error}`); }

validateConfig()

Validate a project configuration before generation.

function validateConfig(config: Partial<ProjectConfig>): ValidationResult

Returns:

interface ValidationResult {
  valid: boolean;
  errors: string[];
  warnings: string[];
}

Example:

const validation = validateConfig({
  name: 'my-api',
  language: 'ts'
});

if (!validation.valid) {
  console.error('Configuration errors:', validation.errors);
}

getTemplateInfo()

Get information about available templates and their features.

function getTemplateInfo(): TemplateInfo[]
interface TemplateInfo {
  name: string;
  description: string;
  features: string[];
  language: 'ts' | 'js' | 'both';
  complexity: 'simple' | 'medium' | 'advanced';
}

Integration Examples

Build Tool Integration

Integrate with build tools like Gulp, Webpack, or custom scripts.

// gulpfile.js const { generateProject } = require('kickstart-express'); gulp.task('create-service', async () => { const serviceName = process.env.SERVICE_NAME || 'new-service'; await generateProject({ name: serviceName, language: 'ts', docker: true, structured: true, outputDir: './services' }); console.log(`Service ${serviceName} created!`); });

CI/CD Pipeline

Use in continuous integration pipelines for automated project creation.

// create-service.js const { generateProject } = require('kickstart-express'); async function createService() { const config = { name: process.argv[2], language: 'ts', docker: true, structured: true, outputDir: process.env.SERVICES_DIR || './services' }; try { const result = await generateProject(config); if (result.success) { console.log(`✅ Service created: ${result.projectPath}`); process.exit(0); } else { console.error(`❌ Failed: ${result.error}`); process.exit(1); } } catch (error) { console.error('Unexpected error:', error); process.exit(1); } } createService();

Custom CLI Tool

Build your own CLI tool on top of Kickstart Express.

#!/usr/bin/env node
const { generateProject, validateConfig } = require('kickstart-express');
const { program } = require('commander');

program
  .command('api <name>')
  .description('Create a new API service')
  .option('--lang <language>', 'Programming language', 'ts')
  .option('--no-docker', 'Skip Docker configuration')
  .action(async (name, options) => {
    const config = {
      name,
      language: options.lang,
      docker: options.docker,
      structured: true,
      src: true
    };

    const validation = validateConfig(config);
    if (!validation.valid) {
      console.error('Invalid configuration:', validation.errors);
      return;
    }

    const result = await generateProject(config);
    console.log(result.message);
  });

program.parse();

Express.js Middleware

Create an endpoint in your existing Express app to generate new projects.

const express = require('express');
const { generateProject } = require('kickstart-express');

const app = express();
app.use(express.json());

app.post('/api/projects', async (req, res) => {
  try {
    const { name, language, features } = req.body;
    
    const config = {
      name,
      language: language || 'ts',
      docker: features?.includes('docker'),
      structured: features?.includes('structured'),
      outputDir: './generated-projects'
    };

    const result = await generateProject(config);
    
    if (result.success) {
      res.json({
        success: true,
        message: 'Project created successfully',
        path: result.projectPath
      });
    } else {
      res.status(400).json({
        success: false,
        error: result.error
      });
    }
  } catch (error) {
    res.status(500).json({
      success: false,
      error: 'Internal server error'
    });
  }
});

Error Handling

Common Errors

PROJECT_EXISTS

Project directory already exists

Error: Directory 'my-api' already exists

INVALID_NAME

Invalid project name format

Error: Project name must be a valid npm package name

PERMISSION_DENIED

Insufficient permissions to create project

Error: Permission denied writing to directory

DEPENDENCY_INSTALL_FAILED

Failed to install project dependencies

Error: Failed to install dependencies with pnpm

Error Handling Example

async function createProjectSafely(config) { try { // Validate configuration first const validation = validateConfig(config); if (!validation.valid) { throw new Error(`Invalid config: ${validation.errors.join(', ')}`); } // Check if project already exists const projectPath = path.join(config.outputDir || '.', config.name); if (fs.existsSync(projectPath)) { throw new Error(`Project '${config.name}' already exists`); } // Generate project const result = await generateProject(config); if (!result.success) { throw new Error(result.error); } return result; } catch (error) { console.error('Failed to create project:', error.message); // Cleanup on failure if (fs.existsSync(projectPath)) { fs.removeSync(projectPath); } throw error; } }

TypeScript Support

Kickstart Express includes full TypeScript definitions for type-safe development.

Type Definitions

// Install types (included automatically)
npm install @types/kickstart-express

// Import with full type support
import { 
  generateProject, 
  validateConfig, 
  ProjectConfig, 
  GenerationResult 
} from 'kickstart-express';

// Type-safe configuration
const config: ProjectConfig = {
  name: 'typed-api',
  language: 'ts',
  docker: true,
  structured: true
};

// Type-safe result handling
const result: GenerationResult = await generateProject(config);