A comprehensive library for mime-type mapping
npm install mime

An API for MIME type information.
- All mime-db types
- Compact and dependency-free 
- Full TS support
> [!Note]
> mime@4 is now latest. If you're upgrading from mime@3, note the following:
> * mime@4 is API-compatible with mime@3, with ~~one~~ two exceptions:
> * Direct imports of mime properties no longer supported
> * mime.define() cannot be called on the default mime object
> * ESM module support is required. ESM Module FAQ.
> * Requires an ES2020 or newer runtime
> * Built-in Typescript types (@types/mime no longer needed)
``bash`
npm install mime
For the full version (800+ MIME types, 1,000+ extensions):
`javascript
import mime from 'mime';
mime.getType('txt'); // ⇨ 'text/plain'
mime.getExtension('text/plain'); // ⇨ 'txt'
`
mime/lite is a drop-in mime replacement, stripped of unofficial ("prs.", "x-", "vnd.*") types:
`javascript`
import mime from 'mime/lite';
Get mime type for the given file path or extension. E.g.
`javascript
mime.getType('js'); // ⇨ 'text/javascript'
mime.getType('json'); // ⇨ 'application/json'
mime.getType('txt'); // ⇨ 'text/plain'
mime.getType('dir/text.txt'); // ⇨ 'text/plain'
mime.getType('dir\\text.txt'); // ⇨ 'text/plain'
mime.getType('.text.txt'); // ⇨ 'text/plain'
mime.getType('.txt'); // ⇨ 'text/plain'
`
null is returned in cases where an extension is not detected or recognized
`javascript`
mime.getType('foo/txt'); // ⇨ null
mime.getType('bogus_type'); // ⇨ null
Get file extension for the given mime type. Charset options (often included in Content-Type headers) are ignored.
`javascript`
mime.getExtension('text/plain'); // ⇨ 'txt'
mime.getExtension('application/json'); // ⇨ 'json'
mime.getExtension('text/html; charset=utf8'); // ⇨ 'html'
> [!Note]
> New in mime@4
Get all file extensions for the given mime type.
`javascript --run default`
mime.getAllExtensions('image/jpeg'); // ⇨ Set(3) { 'jpeg', 'jpg', 'jpe' }
instancesThe default mime objects are immutable. Custom, mutable versions can be created as follows...$3
Create a new, custom mime instance. For example, to create a mutable version of the default mime instance:
`javascript
import { Mime } from 'mime/lite';
import standardTypes from 'mime/types/standard.js';
import otherTypes from 'mime/types/other.js';
const mime = new Mime(standardTypes, otherTypes);
`
Each argument is passed to the define() method, below. For example new Mime(standardTypes, otherTypes) is synonomous with new Mime().define(standardTypes).define(otherTypes)
> [!Note]
> Only available on custom Mime instances
Define MIME type -> extensions.
Attempting to map a type to an already-defined extension will throw unless the force argument is set to true.
`javascript
mime.define({'text/x-abc': ['abc', 'abcd']});
mime.getType('abcd'); // ⇨ 'text/x-abc'
mime.getExtension('text/x-abc') // ⇨ 'abc'
`
`bash`
$ mime scripts/jquery.js
text/javascript
`bash``
$ mime -r image/jpeg
jpeg