# fast-content-type-parse

> Parse HTTP Content-Type header according to RFC 9110

Latest version **4.0.0** (published 2026-09-01) · MIT license · 0 weekly downloads

## Install

```sh
npm install fast-content-type-parse
pnpm add fast-content-type-parse
yarn add fast-content-type-parse
bun add fast-content-type-parse
```

## Health

**Score 65/100 (B)** — status: active.

Positive: has types; no vulnerabilities; recently updated; high maintenance score; high quality score.

Warnings: low downloads; no esm support.

## Facts

| | |
|---|---|
| Version | 4.0.0 |
| Published | 2026-09-01 |
| First published | 2023-01-06 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 37.1 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 8 |
| Author | Aras Abbasi |
| Maintainers | eomm, gurgunday, ivan-tymoshenko, climba03003, jsumners, fdawgs, matteo.collina, uzlopak |
| Keywords | content-type, rfc9110 |

## Links

- npm: https://www.npmjs.com/package/fast-content-type-parse
- Repository: https://github.com/fastify/fast-content-type-parse
- Homepage: https://github.com/fastify/fast-content-type-parse#readme
- Issues: https://github.com/fastify/fast-content-type-parse/issues
- Funding: https://github.com/sponsors/fastify
- npm.io page: https://npm.io/package/fast-content-type-parse

## Recent versions

- 4.0.0 (latest) — 2026-09-01
- 3.0.0 — 2025-03-08
- 2.0.1 — 2025-01-03
- 2.0.0 — 2024-07-13
- 1.1.0 — 2023-09-21
- 1.0.0 — 2023-01-09
- 0.0.1 — 2023-01-06

## README

# fast-content-type-parse

[![NPM version](https://img.shields.io/npm/v/fast-content-type-parse.svg?style=flat)](https://www.npmjs.com/package/fast-content-type-parse)
[![NPM downloads](https://img.shields.io/npm/dm/fast-content-type-parse.svg?style=flat)](https://www.npmjs.com/package/fast-content-type-parse)
[![CI](https://github.com/fastify/fast-content-type-parse/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/fastify/fast-content-type-parse/actions/workflows/ci.yml)
[![neostandard javascript style](https://img.shields.io/badge/code_style-neostandard-brightgreen?style=flat)](https://github.com/neostandard/neostandard)
[![Security Responsible Disclosure](https://img.shields.io/badge/Security-Responsible%20Disclosure-yellow.svg)](https://github.com/fastify/.github/blob/main/SECURITY.md)

Parse HTTP Content-Type header according to [RFC 9110](https://www.rfc-editor.org/rfc/rfc9110#section-8.3.1).

## Installation

```sh
npm install fast-content-type-parse
```

## Usage

```js
const fastContentTypeParse = require('fast-content-type-parse')
```

### fastContentTypeParse.parse(string)

```js
const contentType = fastContentTypeParse.parse('application/json; charset=utf-8')
```

Parse a `Content-Type` header. Throws a `TypeError` if the string is invalid.

It will return an object with the following properties (examples are shown for
the string `'application/json; charset=utf-8'`):

- `type`: The media type (the type and subtype, always lowercase).
   Example: `'application/json'`

- `parameters`: An object of the parameters in the media type (name of parameter
   always lowercase). Example: `{charset: 'utf-8'}`

### fastContentTypeParse.safeParse(string)

```js
const contentType = fastContentTypeParse.safeParse('application/json; charset=utf-8')
```

Parse a `Content-Type` header. It will not throw an Error if the header is invalid.

This will return an object with the following
properties (examples are shown for the string `'application/json; charset=utf-8'`):

- `type`: The media type (the type and subtype, always lowercase).
   Example: `'application/json'`

- `parameters`: An object of the parameters in the media type (name of parameter
   always lowercase). Example: `{charset: 'utf-8'}`

In case the header is invalid, it will return an object
with an empty string `''` as type and an empty Object for `parameters`.

## Grammar

The parser implements the `media-type` grammar of
[RFC 9110 Section 8.3.1](https://www.rfc-editor.org/rfc/rfc9110#section-8.3.1)
exactly, without extensions:

```
media-type      = type "/" subtype parameters
type            = token
subtype         = token
parameters      = *( OWS ";" OWS [ parameter ] )
parameter       = parameter-name "=" parameter-value
parameter-name  = token
parameter-value = ( token / quoted-string )
OWS             = *( SP / HTAB )
```

In particular:

- Only spaces and horizontal tabs (`OWS`) are accepted around the media type
  and the `;` separators. Any other whitespace, including `CR`, `LF` and
  Unicode whitespace, is rejected.
- Empty parameters (`text/html;`, `text/html; ; charset=utf-8`) are accepted,
  as allowed by RFC 9110.
- `type`, `subtype` and parameter names are case-insensitive and are
  lower-cased. Parameter values are returned as-is.
- Quoted-pairs in `quoted-string` values are unescaped.
- When a parameter appears more than once, the first occurrence wins, matching
  `util.MIMEType`, the [WHATWG MIME Sniffing Standard](https://mimesniff.spec.whatwg.org/#parsing-a-mime-type)
  and the `content-type` package.
- `parameters` is a null-prototype object, so parameter names such as
  `__proto__` or `constructor` are ordinary keys.

## Benchmarks

```sh
npm run benchmark

Benchmarking: "application/json; charset=utf-8"
util#MIMEType x 2,637,188 ops/sec ±0.95% (93 runs sampled)
fast-content-type-parse#parse x 5,165,077 ops/sec ±0.75% (95 runs sampled)
fast-content-type-parse#safeParse x 5,189,599 ops/sec ±0.72% (94 runs sampled)
content-type#parse x 4,227,069 ops/sec ±0.79% (96 runs sampled)
busboy#parseContentType x 777,787 ops/sec ±0.75% (91 runs sampled)
Fastest is fast-content-type-parse#safeParse,fast-content-type-parse#parse
```

## Credits

Based on the npm package `content-type`.

## License

Licensed under [MIT](./LICENSE).

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