https://github.com/passidel/hono-timing
Add Server-Timings to your hono server!
https://github.com/passidel/hono-timing
hono metrics performance-monitoring server-timing timing web
Last synced: about 1 month ago
JSON representation
Add Server-Timings to your hono server!
- Host: GitHub
- URL: https://github.com/passidel/hono-timing
- Owner: PassiDel
- License: mit
- Created: 2023-06-29T20:01:30.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2023-07-01T16:41:08.000Z (almost 3 years ago)
- Last Synced: 2025-08-17T08:21:14.851Z (10 months ago)
- Topics: hono, metrics, performance-monitoring, server-timing, timing, web
- Language: TypeScript
- Homepage:
- Size: 69.3 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Server-Timing API for Hono
[](https://github.com/PassiDel/hono-timing/actions)
[](https://github.com/PassiDel/hono-timing/blob/main/LICENSE)

[](https://www.npmjs.com/package/@puazzi/hono-timing)
[](https://www.npmjs.com/package/@puazzi/hono-timing)
This module adds [Server-Timing](https://www.w3.org/TR/server-timing/) to response headers
for [Hono](https://hono.dev/).
This middleware is based on the work of [yosuke-furukawa](https://github.com/yosuke-furukawa/server-timing), thank you!
# Install
```shell
npm install @puazzi/hono-timing
```
# Usage
```ts
import { serve } from '@hono/node-server';
import { Hono } from 'hono';
import { endTime, setMetric, startTime, timing } from "@puazzi/hono-timing";
const app = new Hono();
// add the middleware to your router
app.use('*', timing());
app.get('/', async (c) => {
// add custom metrics
setMetric(c, 'region', 'europe-west3')
// add custom metrics with timing, must be in milliseconds
setMetric(c, 'custom', 23.8, 'My custom Metric')
// start a new timer
startTime(c, 'db');
const data = await db.findMany(...);
// end the timer
endTime(c, 'db');
return c.json({ response: data });
});
serve(app);
```
## Conditionally enabled
```ts
import { Hono } from 'hono';
import { timing } from '@puazzi/hono-timing';
const app = new Hono();
app.use(
'*',
timing({
// c: Context of the request
enabled: (c) => c.req.method === 'POST'
})
);
```
# API
## Config
| **Name** | **Type** | **Default** | **Description** |
| ---------------- | ---------------------------------- | --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| total | boolean | true | Show a total response time. |
| enabled | boolean \| (c: Context) => boolean | true | Whether timings should be added to the headers or not. |
| totalDescription | string | 'Total Response Time' | Description for the total response time. |
| autoEnd | boolean | true | If `startTime()` should end automatically at the end of the request. If disabled, not manually ended timers will not be shown. |
| crossOrigin | boolean \| string | false | The origin this timings header should be readable.
If false, only from current origin.
If true, from all origin.
If string, from this domain(s). Multiple domains must be separated with a comma.
See [docs](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Timing-Allow-Origin). |
# Result
