# @universal-middleware/node

> Node.js utilities for universal middlewares

Latest version **0.2.2** (published 2026-07-22) · MIT license · 0 weekly downloads

## Install

```sh
npm install @universal-middleware/node
pnpm add @universal-middleware/node
yarn add @universal-middleware/node
bun add @universal-middleware/node
```

## Health

**Score 60/100 (C)** — status: active.

Positive: esm support; no vulnerabilities; recently updated; high maintenance score.

Warnings: low downloads; no types; pre 1.0.

## Facts

| | |
|---|---|
| Version | 0.2.2 |
| Published | 2026-07-22 |
| First published | 2026-03-04 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | ESM |
| Dependencies | 1 |
| Unpacked size | 14.8 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 78 |
| Author | Joël Charles <joel.charles91@gmail.com> |
| Maintainers | magne4000, brillout |
| Keywords | node, universal-middleware, middleware, handlers, server-adapters, universal-server, request-handling |

## Links

- npm: https://www.npmjs.com/package/@universal-middleware/node
- Repository: https://github.com/magne4000/universal-middleware
- npm.io page: https://npm.io/package/@universal-middleware/node

## Dependencies (1)

- [@universal-middleware/core](https://npm.io/package/@universal-middleware/core.md) ^0.4.18

## Alternatives

- [@expo/fingerprint](https://npm.io/package/@expo/fingerprint.md) — 6.2M weekly downloads
- [@azure/monitor-opentelemetry-exporter](https://npm.io/package/@azure/monitor-opentelemetry-exporter.md) — 850.0K weekly downloads
- [@azure/monitor-opentelemetry](https://npm.io/package/@azure/monitor-opentelemetry.md) — 624.0K weekly downloads
- [@posthog/ai](https://npm.io/package/@posthog/ai.md) — 423.3K weekly downloads
- [fakefilter](https://npm.io/package/fakefilter.md) — 63.9K weekly downloads

## Recent versions

- 0.2.2 (latest) — 2026-07-22
- 0.2.1 — 2026-06-08
- 0.2.0 — 2026-05-19
- 0.1.0 — 2026-03-04

## README

# `universal-middleware`

Write middlewares and handlers once, target
[srvx](https://github.com/magne4000/universal-middleware/tree/main/packages/adapter-hono),
[Express](https://github.com/magne4000/universal-middleware/tree/main/packages/adapter-express),
[Cloudflare](https://github.com/magne4000/universal-middleware/tree/main/packages/adapter-cloudflare),
[Hattip](https://github.com/magne4000/universal-middleware/tree/main/packages/adapter-hattip),
[Webroute](https://github.com/magne4000/universal-middleware/tree/main/packages/adapter-webroute),
[Fastify](https://github.com/magne4000/universal-middleware/tree/main/packages/adapter-fastify),
[h3](https://github.com/magne4000/universal-middleware/tree/main/packages/adapter-h3),
[Elysia](https://github.com/magne4000/universal-middleware/tree/main/packages/adapter-elysia)
[Vercel](https://github.com/magne4000/universal-middleware/tree/main/packages/adapter-vercel)
, (and more on the way!).

## Documentation

Learn more on the [Documentation](https://universal-middleware.dev/)

## Code example

A middleware that returns an early response if some header is missing.
```ts
// src/middlewares/demo.middleware.ts

import type { Get, UniversalMiddleware } from "@universal-middleware/core";

interface Config {
  header: string;
}

// This middleware will return an early response if given header is missing
const guardMiddleware = ((config) => (request, ctx) => {
  if (!request.headers.has(config.header)) {
    return new Response("Header not present", {
      status: 401,
    });
  }
  // else we do nothing

  // Using `satisfies` to not lose return type
}) satisfies Get<[Config], UniversalMiddleware>;

// export default is mandatory
export default guardMiddleware;
```

After bundling and publishing, this would be used like this:
```ts
// hono-entry.ts

import { Hono } from "hono";
// hattip users would use "some-lib/middlewares/demo-middleware-hattip"
// express users would use "some-lib/middlewares/demo-middleware-express"
// etc.
import demoMiddleware from "some-lib/middlewares/demo-middleware-hono";

const app = new Hono();

app.use(demoMiddleware({ header: 'X-Universal-Demo' }));
app.get("/", () => new Response('ok')));

export default app;
```

---
_Source: https://npm.io/package/@universal-middleware/node · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
