TSDIAPI Documentation
TypeScript API Framework
Type-Safe by Design
Built with TypeScript from the ground up, TSDIAPI provides full type safety for your API endpoints, dependency injection, and data validation.
Modern & Fast
Powered by Fastify and modern TypeScript features, TSDIAPI delivers exceptional performance while maintaining clean, maintainable code.
Developer Experience
Enjoy automatic Swagger documentation, built-in validation via TypeBox, and a powerful CLI for rapid development and code generation.
Quick Start
Create a new TSDIAPI project in seconds:
npm i -g @tsdiapi/cli
tsdiapi create myapi
cd myapi
npm run dev
Add Prisma to your project:
tsdiapi add prisma
npx prisma migrate dev
npm run prisma:generate
Add Plugin to your project:
tsdiapi plugins add jwt-auth
Using the plugin generator:
tsdiapi generate jwt-auth auth
npm run dev
Type-Safe Routes
Write fully type-safe API endpoints:
// src/api/features/user/user.module.ts
import { AppContext, ResponseErrorSchema, ResponseForbidden } from "@tsdiapi/server";
import { Type } from "@sinclair/typebox";
import { usePrisma } from "@tsdiapi/prisma";
import { PrismaClient } from "@generated/prisma/index.js";
import { JWTGuard, useSession } from "@tsdiapi/jwt-auth";
// Auto generated schemas
import { OutputAdminSchema } from "@base/api/typebox-schemas/models/index.js";
export default async function registerMetaRoutes({ useRoute, fastify }: AppContext) {
const prisma = usePrisma<PrismaClient>();
useRoute("users")
.version("v1")
.get("/users/:id")
.params(Type.Object({ id: Type.String() }))
.code(200, OutputAdminSchema)
.code(403, ResponseErrorSchema)
.auth('bearer')
.guard(JWTGuard())
.resolve(async (req) => {
const session = useSession<{ id: string }>(req);
const user = await prisma.user.findUnique({
where: {
id: session.id
}
});
if (user.isDeleted) {
throw new ResponseForbidden("User is deleted");
}
return user;
})
.handler(async (req) => {
// Get resolved data
const user = req.routeData;
return {status: 200, data: user}
})
.build();
}