# response-time

> Response time for Node.js servers

Latest version **2.3.4** (published 2025-07-17) · MIT license · 0 weekly downloads

## Install

```sh
npm install response-time
pnpm add response-time
yarn add response-time
bun add response-time
```

## Health

**Score 43/100 (D)** — status: stable.

Positive: has types package; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: stale.

## Facts

| | |
|---|---|
| Version | 2.3.4 |
| Published | 2025-07-17 |
| First published | 2014-02-08 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | separate (@types/response-time) |
| Module format | CommonJS |
| Node | >= 0.8.0 |
| Dependencies | 2 |
| Unpacked size | 9.3 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 497 |
| Author | Jonathan Ong |
| Maintainers | dougwilson, ulisesgascon, fishrock123, tjholowaychuk, jongleberry, defunctzombie |
| Keywords | http, res, response time, x-response-time |

## Links

- npm: https://www.npmjs.com/package/response-time
- Repository: https://github.com/expressjs/response-time
- Homepage: https://github.com/expressjs/response-time#readme
- Issues: https://github.com/expressjs/response-time/issues
- npm.io page: https://npm.io/package/response-time

## Dependencies (2)

- [depd](https://npm.io/package/depd.md) ~2.0.0
- [on-headers](https://npm.io/package/on-headers.md) ~1.1.0

## Alternatives

- [launchdarkly-js-client-sdk](https://npm.io/package/launchdarkly-js-client-sdk.md) — 2.5M weekly downloads
- [@elastic/elasticsearch](https://npm.io/package/@elastic/elasticsearch.md) — 2.1M weekly downloads
- [@c8y/client](https://npm.io/package/@c8y/client.md) — 15.3K weekly downloads
- [@signaldb/maverickjs](https://npm.io/package/@signaldb/maverickjs.md) — 1.7K weekly downloads
- [@bbc/http-transport-cache](https://npm.io/package/@bbc/http-transport-cache.md) — 1.2K weekly downloads

## Recent versions

- 2.3.4 (latest) — 2025-07-17
- 2.3.3 — 2024-10-07
- 2.3.2 — 2016-11-16
- 2.3.1 — 2015-05-14
- 2.3.0 — 2015-02-16
- 2.2.0 — 2014-09-23
- 2.1.0 — 2014-09-17
- 2.0.1 — 2014-08-11
- 2.0.0 — 2014-06-01
- 1.0.0 — 2014-02-08

## README

# response-time

[![NPM Version][npm-version-image]][npm-url]
[![NPM Downloads][npm-downloads-image]][npm-url]
[![Node.js Version][node-image]][node-url]
[![Build Status][ci-image]][ci-url]
[![Test Coverage][coveralls-image]][coveralls-url]

Response time for Node.js servers.

This module creates a middleware that records the response time for
requests in HTTP servers. The "response time" is defined here as the
elapsed time from when a request enters this middleware to when the
headers are written out to the client.

## Installation

This is a [Node.js](https://nodejs.org/en/) module available through the
[npm registry](https://www.npmjs.com/). Installation is done using the
[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):

```sh
$ npm install response-time
```

## API

<!-- eslint-disable no-unused-vars -->

```js
var responseTime = require('response-time')
```

### responseTime([options])

Create a middleware that adds a `X-Response-Time` header to responses. If
you don't want to use this module to automatically set a header, please
see the section about [`responseTime(fn)`](#responsetimefn).

#### Options

The `responseTime` function accepts an optional `options` object that may
contain any of the following keys:

##### digits

The fixed number of digits to include in the output, which is always in
milliseconds, defaults to `3` (ex: `2.300ms`).

##### header

The name of the header to set, defaults to `X-Response-Time`.

##### suffix

Boolean to indicate if units of measurement suffix should be added to
the output, defaults to `true` (ex: `2.300ms` vs `2.300`).

### responseTime(fn)

Create a new middleware that records the response time of a request and
makes this available to your own function `fn`. The `fn` argument will be
invoked as `fn(req, res, time)`, where `time` is a number in milliseconds.

## Examples

### express/connect

```js
var express = require('express')
var responseTime = require('response-time')

var app = express()

app.use(responseTime())

app.get('/', function (req, res) {
  res.send('hello, world!')
})
```

### vanilla http server

```js
var finalhandler = require('finalhandler')
var http = require('http')
var responseTime = require('response-time')

// create "middleware"
var _responseTime = responseTime()

http.createServer(function (req, res) {
  var done = finalhandler(req, res)
  _responseTime(req, res, function (err) {
    if (err) return done(err)

    // respond to request
    res.setHeader('content-type', 'text/plain')
    res.end('hello, world!')
  })
})
```

### response time metrics

```js
var express = require('express')
var responseTime = require('response-time')
var StatsD = require('node-statsd')

var app = express()
var stats = new StatsD()

stats.socket.on('error', function (error) {
  console.error(error.stack)
})

app.use(responseTime(function (req, res, time) {
  var stat = (req.method + req.url).toLowerCase()
    .replace(/[:.]/g, '')
    .replace(/\//g, '_')
  stats.timing(stat, time)
}))

app.get('/', function (req, res) {
  res.send('hello, world!')
})
```

## License

[MIT](LICENSE)

[npm-version-image]: https://badgen.net/npm/v/response-time
[npm-url]: https://npmjs.org/package/response-time
[npm-downloads-image]: https://badgen.net/npm/dm/response-time
[node-image]: https://badgen.net/npm/node/response-time
[node-url]: https://nodejs.org/en/download
[ci-image]: https://badgen.net/github/checks/express/response-time/master?label=ci
[ci-url]: https://github.com/express/response-time/actions/workflows/ci.yml
[coveralls-image]: https://badgen.net/coveralls/c/github/express/response-time/master
[coveralls-url]: https://coveralls.io/r/express/response-time?branch=master

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