Skip to Content
docsmiddlewarebuiltinTiming

Last Updated: 3/9/2026


Server-Timing Middleware

The Server-Timing  Middleware provides performance metrics in the response headers.

::: info Note: On Cloudflare Workers, the timer metrics may not be accurate, since timers only show the time of last I/O . :::

Import

import { Hono } from 'hono' import { timing, setMetric, startTime, endTime, wrapTime, } from 'hono/timing' import type { TimingVariables } from 'hono/timing'

Usage

// Specify the variable types to infer the `c.get('metric')`: type Variables = TimingVariables const app = new Hono<{ Variables: Variables }>() // 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'); // ...or you can also just wrap a Promise using this function: const data = await wrapTime(c, 'db', db.findMany(...)); return c.json({ response: data }); });

Conditionally enabled

const app = new Hono() app.use( '*', timing({ // c: Context of the request enabled: (c) => c.req.method === 'POST', }) )

Result

Options

total: boolean

Show the total response time. The default is true.

enabled: boolean | (c: Context) => boolean

Whether timings should be added to the headers or not. The default is true.

totalDescription: boolean

Description for the total response time. The default is Total Response Time.

autoEnd: boolean

If startTime() should end automatically at the end of the request. If disabled, not manually ended timers will not be shown.

crossOrigin: boolean | string | (c: Context) => boolean | string

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.

The default is false. See more docs .