What is mime?
The mime npm package is a utility for handling and transforming file MIME types. It provides functionality to lookup the MIME type for a file based on its extension, determine the default extension for a MIME type, and define custom MIME type mappings.
What are mime's main functionalities?
Lookup MIME type by extension
This feature allows you to get the MIME type for a given file extension. In the code sample, we are looking up the MIME type for a '.json' file, which returns 'application/json'.
const mime = require('mime');
const mimeType = mime.getType('json'); // 'application/json'
Lookup extension by MIME type
This feature enables you to find the default file extension for a given MIME type. In the code sample, we are finding the extension for the MIME type 'application/json', which returns 'json'.
const mime = require('mime');
const extension = mime.getExtension('application/json'); // 'json'
Define custom MIME type mappings
This feature allows you to define custom MIME type mappings. In the code sample, we are adding a custom MIME type 'text/x-some-format' with multiple extensions. The second argument 'true' indicates that the custom types should take precedence over the built-in types.
const mime = require('mime');
mime.define({ 'text/x-some-format': ['x-sf', 'x-sft', 'x-sfml'] }, true);
Other packages similar to mime
mime-types
The 'mime-types' package is similar to 'mime' in that it provides MIME type lookup based on file extension and vice versa. It is based on the mime-db dataset, which is a comprehensive dataset of MIME types compiled from various sources. Compared to 'mime', it might offer a more extensive and updated list of MIME types.
file-type
The 'file-type' package goes beyond simple MIME type lookup by extension; it can detect the actual MIME type of a file or a Buffer by checking the file's magic numbers (file signatures). This can be more reliable than 'mime' when dealing with files that have incorrect or missing extensions.
Mime
![Mime CI](https://github.com/broofa/mime/actions/workflows/ci.yml/badge.svg?branch=main)
An API for MIME type information.
- All
mime-db
types - Compact and dependency-free
![mime's badge](https://deno.bundlejs.com/?q=mime&badge)
- 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)
Installation
npm install mime
Quick Start
For the full version (800+ MIME types, 1,000+ extensions):
import mime from 'mime';
mime.getType('txt');
mime.getExtension('text/plain');
Lite Version ![mime/lite's badge](https://deno.bundlejs.com/?q=mime/lite&badge)
mime/lite
is a drop-in mime
replacement, stripped of unofficial ("prs.*
", "x-*
", "vnd.*
") types:
import mime from 'mime/lite';
API
mime.getType(pathOrExtension)
Get mime type for the given file path or extension. E.g.
mime.getType('js');
mime.getType('json');
mime.getType('txt');
mime.getType('dir/text.txt');
mime.getType('dir\\text.txt');
mime.getType('.text.txt');
mime.getType('.txt');
null
is returned in cases where an extension is not detected or recognized
mime.getType('foo/txt');
mime.getType('bogus_type');
mime.getExtension(type)
Get file extension for the given mime type. Charset options (often included in Content-Type headers) are ignored.
mime.getExtension('text/plain');
mime.getExtension('application/json');
mime.getExtension('text/html; charset=utf8');
mime.getAllExtensions(type)
[!Note]
New in mime@4
Get all file extensions for the given mime type.
mime.getAllExtensions('image/jpeg');
Custom Mime
instances
The default mime
objects are immutable. Custom, mutable versions can be created as follows...
new Mime(type map [, type map, ...])
Create a new, custom mime instance. For example, to create a mutable version of the default mime
instance:
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)
mime.define(type map [, force = false])
[!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
.
mime.define({'text/x-abc': ['abc', 'abcd']});
mime.getType('abcd');
mime.getExtension('text/x-abc')
Command Line
Extension -> type
$ mime scripts/jquery.js
text/javascript
Type -> extension
$ mime -r image/jpeg
jpeg