Table of Contents
Express TypeScript Starter is a premium, production-ready boilerplate designed for building scalable and robust RESTful APIs. It combines the power of Express 5, TypeScript, and Prisma ORM with a strict focus on security, observability, and clean architecture.
Whether you're building a small service or a complex enterprise application, this starter provides the foundation you need to launch with confidence.
- 🛡️ Enhanced Security: Pre-configured with Helmet, HPP, CORS, and Rate Limiting.
- ⚡ Performance: Built on Express 5 with optimized asynchronous handling.
- 🦾 Strict Validation: Zod-based validation for request bodies, params, and even environment variables at startup.
- 🔄 Lifecycle Management: Graceful shutdown and health monitoring integrated via
@godaddy/terminus. - 📊 Observable Logging: Structured JSON logging using Pino and
pino-http. - 🏗️ Layered Architecture: Clean separation of concerns (Controllers, Services, Repositories).
- 🧪 Testing Ready: Pre-configured with Jest for unit and integration testing.
Project Layout
src/
├── __tests__/ # Automated unit and integration tests (Jest)
├── checks/ # System health monitoring (Database, Memory)
├── configs/ # Centralized configurations (Env, Logger, Prisma)
├── controllers/ # Request orchestration and HTTP logic
├── middlewares/ # Security, Auth, Logging and Error handlers
├── repositories/ # Data access layer (Prisma abstraction)
├── routers/ # API endpoint definitions
├── services/ # Core business logic implementation
├── types/ # TypeScript interfaces and shared types
├── utils/ # Global utility functions (JWT, Formatters)
├── validations/ # Zod schemas for request validation
└── index.ts # Main entry point with Terminus integrationThis project is built using the following premium stack:
- TypeScript: A typed superset of JavaScript for rock-solid code.
- Express 5: The legendary web framework, updated for the future.
- Prisma: Next-generation Node.js and TypeScript ORM.
- PostgreSQL: The world's most advanced open-source database.
- Zod: TypeScript-first schema declaration and validation.
- Pino: Super fast, low-overhead Node.js logger.
- Terminus: Graceful shutdown and health checks for Node.js.
- Jest: Delightful JavaScript Testing Framework.
- Helmet: Secure Express apps by setting various HTTP headers.
Follow these steps to get your project running locally.
- Node.js (v18+)
- PostgreSQL (running instance)
- NPM or Yarn
Step 1: Clone the Repo
git clone https://github.com/leapwithluvi/express-typescript-starter.git
cd express-typescript-starterStep 2: Install Dependencies
npm installStep 3: Setup Environment
cp .env.example .env
# Edit .env with your DATABASE_URL and JWT secretsStep 4: Database Migration
npx prisma migrate dev# Development mode with hot-reload
npm run dev
# Production build
npm run build
npm start| Script | Action |
|---|---|
npm run dev |
Starts local dev server with tsx watch |
npm run build |
Compiles TS to production JS (dist/) |
npm start |
Runs the production build |
npm test |
Executes tests using Jest |
npm run lint |
Runs ESLint for code quality |
npm run prisma:generate |
Generates the Prisma client |
The application uses strict validation—if these are missing or invalid, the app will refuse to start.
DATABASE_URL="postgresql://user:pass@localhost:5432/db"
PORT=3000
NODE_ENV="development" # or "production"
# JWT
JWT_SECRET="your-super-secret"
JWT_REFRESH_SECRET="your-refresh-secret"
JWT_ACCESS_EXPIRES_IN="15m"
JWT_REFRESH_EXPIRES_IN="7d"
# Rate Limiting
RATE_LIMIT_WINDOW_MS=900000
RATE_LIMIT_MAX=100The API provides a built-in health check endpoint managed by Terminus:
- Endpoint:
GET /health - Checks:
- Database: Verifies connectivity to PostgreSQL.
- Memory: Monitors Heap and RSS usage against thresholds.
If any check fails, the endpoint returns a 503 Service Unavailable with detailed error info.
This project is open-source and licensed under the MIT License. See LICENSE for more details.
Made by leapwithluvi