Free, open source

Build modern web servers 
with full type safety

Easy to use, fast to write, fully type safe  
web server framework for TypeScript

import { Router } from "petrichorjs";

const router = new Router();

router.get("/").handle(({ request, response }) => {
    response.ok().json({
        message: "Hello World!",
    });
});

const usersRouter = router.group("/users").handle();
usersGroup.get("/").handle(async ({ request, response }) => {
    response.ok().json(await getUsers());
});

router.listen(3332);
import { intParser } from "petrichorjs";

router
    .get("/users/:id")
    .parse({ id: intParser })
    .handle(({ request, response }) => {
        response.ok().json(await getUser(request.params.id));
    });
import vine from "@vinejs/vine";
import { validator } from "@petrichorjs/validator-vinejs";

router
    .post("/users")
    .validate({
        body: validator(
            vine.object({
                id: vine.number().withoutDecimals(),
                email: vine.string().email(),
                profile: vine.object({
                    username: vine.string(),
                }),
            })
        ),
    })
    .handle(async ({ request, response }) => {
        const data = await request.json();
        await createUser(data);

        response.created().json({
            data: {
                id: data.id,
            },
        });
    });
import { trailingSlash } from "petrichorjs";

router.use(trailingSlash());
router.use(async ({ request, response }, next) => {
    console.log(`${request.method} ${request.url}`);
    await next();
});

router
    .get("/users/:id")
    .parse({ id: intParser })
    .before(async (request) => {
        return {
            user: await getUser(request.params.id),
        };
    })
    .handle(({ request, response }) => {
        response.ok().json(request.locals.user);
    });