mime-types rewrite in TypeScript with ESM and CommonJS targets

Usage no npm install needed!

<script type="module">
  import esMimeTypes from '';



Top language Vulnerabilities Version Node Version Last commit

mime-types rewrite in TypeScript compiled to ESM

The ultimate javascript content-type utility.

Similar to the mime@1.x module, except:

  • No fallbacks. Instead of naively returning the first available type, mime-types simply returns false, so do const type = mime.lookup('unrecognized') || 'application/octet-stream'.
  • No new Mime() business, so you could do var lookup = require('mime-types').lookup.
  • No .define() functionality
  • Bug fixes for .lookup(path)

Otherwise, the API is compatible with mime 1.x.


pnpm i es-mime-types

Adding Types

All mime types are based on mime-db, so open a PR there if you'd like to add mime types.


import { lookup, contentType, extension, charset, types } from 'es-mime-types'

All functions return false if input is invalid or not found.


Lookup the content-type associated with a file.

lookup('json') // 'application/json'
lookup('.md') // 'text/markdown'
lookup('file.html') // 'text/html'
lookup('folder/file.js') // 'application/javascript'
lookup('folder/.htaccess') // false
lookup('cats') // false


Create a full content-type header given a content-type or extension. When given an extension, lookup is used to get the matching content-type, otherwise the given content-type is used. Then if the content-type does not already have a charset parameter, charset is used to get the default charset and add to the returned content-type.

contentType('markdown') // 'text/x-markdown; charset=utf-8'
contentType('file.json') // 'application/json; charset=utf-8'
contentType('text/html') // 'text/html; charset=utf-8'
contentType('text/html; charset=iso-8859-1') // 'text/html; charset=iso-8859-1'

// from a full path
contentType(path.extname('/path/to/file.json')) // 'application/json; charset=utf-8'


Get the default extension for a content-type.

extension('application/octet-stream') // 'bin'


Lookup the implied default charset of a content-type.

charset('text/markdown') // 'UTF-8'


A map of extensions by content-type.


MIT © v1rtl