CLI Tooling
The lts CLI makes API development a breeze. Initialize projects, generate components, or add features like JWT with simple commands.
- Init:
lts init my-api - Generate:
lts g resource user - Add:
lts add jwt
LightTs is your toolkit for crafting APIs with speed, clarity, and control. Built on standard Node.js libraries, it blends Express’s simplicity with NestJS-inspired structure. Explore the features below to see why it’s the perfect fit for your next project.
CLI Tooling
The lts CLI makes API development a breeze. Initialize projects, generate components, or add features like JWT with simple commands.
lts init my-apilts g resource userlts add jwtNode.js & Express
Powered by express and standard libraries like jsonwebtoken and joi. Get familiar routing and transparent, editable code with no hidden magic.
Flexible Naming
Choose Angular-style (user.service.ts) or standard (user.ts) naming during lts init for a consistent codebase.
Responses & Errors
Use DataResponse and MessageResponse for clean outputs, plus error classes like BadRequestError for consistent handling.
import { DataResponse } from '@/core/responses/data.response';import { Request, Response } from 'express';
export default { get: async (req: Request, res: Response) => { const users = [{ id: 1, name: 'John Doe' }];
return new DataResponse(res, { data: users, message: 'Users fetched like a pro!', statusCode: 200 }); }};import { BadRequestError } from '@/core/errors/bad-request.error';import { Request, Response } from 'express';
export class UserController { createUser(req: Request, res: Response) { if (!req.body.name) throw new BadRequestError('Name is required'); // Create user logic }}Feature Integration
Add JWT, validation, CORS, or TypeORM with one command. Explore options in Add Features.
lts add jwtimport express from 'express';import services from './user.service';import { validateToken } from '@/middleware/auth.middleware';
const router = express.Router();
router.post('/', validateToken(['admin']), services.create);lts add validationimport { Router } from 'express';import validate from '@/middleware/validator.middleware';import validationSchema from '@/modules/user/user.schema';import service from './user.service';
const router = Router();
router.post('/signin', validate(validationSchema.signin), service.signin);Database Support
Seamlessly integrate TypeORM for PostgreSQL, MySQL, MariaDB, or MongoDB, with migrations and seeders.
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
@Entity()export class User { @PrimaryGeneratedColumn() id: number;
@Column() name: string;
@Column() email: string;}Code Quality
Optional setup for ESLint, Prettier, and Husky during lts init to keep your code clean and consistent.
Modular Structure
Organize code into modules with controllers, services, and validators for scalability.
import { DataResponse } from '@/core/responses/data.response';import { Request, Response } from 'express';
export default { get: async (req: Request, res: Response) => { const users = [{ id: req.params.id, name: 'John Doe' }];
return new DataResponse(res, { data: users, message: 'Users fetched like a pro!', statusCode: 200 }); }}import Joi from "joi";
export default { get: Joi.object().keys({ id: Joi.number().required() })};import express from 'express';import services from './user.service';import schema from './user.schema';import validate from '@/middleware/validator.middleware';
const router = express.Router();
router.get('/{id}', validate(schema.get, 'params'), services.get);
export default router;