npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@express-kit/validator

v0.5.1

Published

A lightning-fast, express validator using zod (body, query, params)

Readme

@express-kit/validator

A lightning-fast, express validator using Zod for body, query, and params validation. It provides full TypeScript support with automatic type inference for your request handlers.

Features

  • Automatic Type Inference: appRoute automatically infers types for req.body, req.query, and req.params.
  • Zod-Powered: Leverage the full power of Zod for schema validation.
  • Structured Error Responses: Returns clear, detailed error messages for validation failures.
  • Lightweight: Zero dependencies other than Zod and Express types.
  • Flexible: Use as a route wrapper (appRoute) or as standard middleware (validateRequest).

Installation

npm install @express-kit/validator zod

Quick Start

1. Using appRoute (Recommended)

appRoute is a higher-order function that wraps your request handler. It validates the request and provides full type inference for req.body, req.query, and req.params.

import express from 'express';
import { z } from 'zod';
import { appRoute } from '@express-kit/validator';

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

const schemas = {
  body: z.object({
    name: z.string('Name is required'),
    age: z.number('Age is required'),
    address: z.object(
      {
        city: z.string('City is required'),
        street: z.string('Street is required'),
      },
      'Address is required',
    ),
  }),
  query: z.object({
    search: z.string('Search is required'),
    page: z.coerce.number('Page is required'),
  }),
  params: z.object({
    id: z.string('ID is required'),
  }),
};

app.post(
  '/items/:id',
  appRoute(schemas)((req, res) => {
    // req.body, req.query, and req.params are fully typed!
    const { name, age, address } = req.body;
    const { id } = req.params;
    const { search, page } = req.query;

    res.json({
      message: `Item ${name} (ID: ${id}) found with search: ${search}, page: ${page}`,
      address,
    });
  }),
);

app.listen(3000);

2. Using validateRequest (Middleware)

If you prefer using standard Express middleware, you can use validateRequest.

import { validateRequest } from '@express-kit/validator';

const bodySchema = z.object({
    name: z.string('Name is required'),
    age: z.number('Age is required'),
    address: z.object(
      {
        city: z.string('City is required'),
        street: z.string('Street is required'),
      },
      'Address is required',
    ),
  }),

  const querySchema = z.object({
    search: z.string('Search is required'),
    page: z.coerce.number('Page is required'),
  })

 const paramsSchema = z.object({
    id: z.string('ID is required'),
  }),


  app.post('/login', validateRequest({ body: bodySchema, query: querySchema, params: paramsSchema}), (req, res) => {
    // Manual type casting might be needed here for full TS support
    const body = req.body as z.infer<typeof bodySchema>
    console.log(body);
    res.json({ message: 'Valid request!' });
  });

Validation Error Format

When validation fails, @express-kit/validator returns a 400 Bad Request with a structured JSON response:

{
  "error": "Validation failed",
  "errors": {
    "body": {
      "name": "Name is required",
      "age": "Age is required",
      "address": { "street": "Street is required" }
    },
    "query": {
      "page": "Expected number, received string"
    }
  }
}

API

appRoute(schemas)

Wraps an Express request handler.

  • schemas: An object containing Zod schemas for body, query, and params.
  • Returns a function that accepts your request handler and returns a standard Express RequestHandler.

validateRequest(schemas)

A standard Express middleware.

  • schemas: An object containing Zod schemas for body, query, and params.
  • Returns a standard Express RequestHandler.

License

MIT