Skip to content
Tools

MIME Type Lookup

Find the MIME type for a file extension or discover file extensions associated with a MIME type. Quickly look up common web, image, audio, video, document, archive, font and application MIME types.

What you are looking up

Enter a file extension — with or without the leading dot, in any case.

Popular lookups

Enter a file extension or MIME type to find its corresponding media type.

Everything runs locally in your browser. No files or lookup values are uploaded to our server.

What is a MIME type?

A MIME type is a short string telling software what kind of content it is looking at. image/jpeg. application/json. text/html. Two parts, separated by a slash: a broad category, then the specific format.

The name is a historical accident — MIME stands for Multipurpose Internet Mail Extensions, because the scheme was invented in 1992 to let email carry more than ASCII text. It escaped email almost immediately and is now how every HTTP response declares what it is returning. The current specifications call them media types; MIME type is the name that stuck.

What makes them matter is that they change behaviour rather than just labelling it. A browser decides whether to render, download or refuse a resource almost entirely from its declared type.

What is the MIME type of a file?

Strictly, a file does not have one. A media type is metadata about content, supplied by whatever is serving or sending it — and what a server supplies is nearly always looked up from the filename extension.

Extension to media type
.pdf   →  application/pdf.json  →  application/json.jpg   →  image/jpeg.woff2 →  font/woff2

That arrow is a convention, not a measurement. Rename script.js to photo.jpg and every tool on the chain will now report image/jpeg for a file full of JavaScript. The mapping describes what files with that extension usually are — nothing more.

How to find the MIME type of a file

  • Use the lookup above — type an extension, with or without the dot, in any case. A whole filename works too.
  • Switch modes to go the other way: paste a media type, or a whole Content-Type header with its parameters, and get the extensions back.
  • To find what a file actually contains, read its bytes: file --mime-type name.ext on Unix, or a content-sniffing library on the server. Those inspect the magic number at the start of the file rather than the name — the same signature check the Base64 decoder uses to work out what a decoded blob turned out to be.

It is worth being blunt about the limit. This tool identifies the media type commonly associated with an extension. It does not prove that a file contains that kind of content, because it never sees the file — nothing is uploaded here, and there is no file input to upload with.

MIME type anatomy

Every media type has the same shape:

type/subtype
image/jpeg│     ││     └── subtype — the specific format└──────── top-level type — the broad category

Two more pieces show up regularly.

Suffixes come after a plus sign and name the underlying structure. image/svg+xml is an image that is XML underneath; application/ld+json is linked data that is JSON underneath. A parser that understands the suffix can do something useful even with an unfamiliar subtype.

Parameters come after a semicolon and are not part of the type:

A type with a parameter
text/html; charset=UTF-8└───────┘  └────────────┘ the type    a parameter The type is text/html.charset describes how to decode it — it does not change what it is.

This is why the lookup strips parameters before searching: you can paste an entire Content-Type header and it will find text/html. The two parameters worth knowing are charset on text formats and boundary on multipart bodies. Types and parameter names are case-insensitive; parameter values are not, which is why a multipart boundary has to be preserved exactly as sent.

The nine top-level categories

There are exactly nine, and the list is closed — a new format gets a new subtype, not a new top-level type.

application
The catch-all. Anything meant for a program rather than for direct display — archives, documents, JSON, binaries, WebAssembly.
audio
Sound, on its own. MP3, WAV, Ogg, FLAC, AAC.
font
Typefaces. A late addition — before RFC 8081 in 2018 these lived under application, which is why old servers still send application/x-font-ttf.
image
Still pictures, raster or vector. Animated GIF and animated WebP count too.
message
A whole message as a payload — an email as a file, or an HTTP message. Rare outside mail and protocol tooling.
model
3D geometry and scenes. glTF, STL, USD.
multipart
A body made of several parts, each with its own type. multipart/form-data is how a browser sends a file upload.
text
Human-readable content. Anything here can be opened in an editor and still make sense.
video
Moving pictures, usually with audio muxed in.

Common MIME types

The ones that come up most, straight from the same dataset the lookup uses:

The twelve most common file extensions with their MIME type and category.
ExtensionMIME typeCategory
.htmltext/htmltext
.csstext/csstext
.jstext/javascripttext
.jsonapplication/jsonapplication
.jpgimage/jpegimage
.pngimage/pngimage
.svgimage/svg+xmlimage
.pdfapplication/pdfapplication
.zipapplication/zipapplication
.mp3audio/mpegaudio
.mp4video/mp4video
.woff2font/woff2font

The full dataset carries 95 media types, 39 of them with alternative spellings that the lookup also resolves. Grouped by top-level type:

application35 types

Every application media type in the dataset, with its extensions.
MIME typeExtensionsDescription
application/yaml.yaml .ymlYAML document
application/json.json .mapJSON data
application/ld+json.jsonldJSON-LD linked data
application/manifest+json.webmanifestWeb app manifest
application/xml.xml .xsd .xsl .xslt .plistXML document
application/rss+xml.rssRSS feed
application/atom+xml.atomAtom feed
application/xhtml+xml.xhtXHTML document
application/wasm.wasmWebAssembly module
application/sql.sqlSQL script
application/x-www-form-urlencodedURL-encoded form data
application/octet-stream.bin .exe .dll .so .dmg .iso .imgArbitrary binary data
application/pdf.pdfPDF document
application/rtf.rtfRich Text Format document
application/epub+zip.epubEPUB ebook
application/vnd.oasis.opendocument.text.odtOpenDocument text document
application/vnd.oasis.opendocument.spreadsheet.odsOpenDocument spreadsheet
application/vnd.oasis.opendocument.presentation.odpOpenDocument presentation
application/msword.doc .dotMicrosoft Word 97–2003 document
application/vnd.openxmlformats-officedocument.wordprocessingml.document.docxMicrosoft Word document (OOXML)
application/vnd.ms-excel.xls .xlt .xlaMicrosoft Excel 97–2003 spreadsheet
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.xlsxMicrosoft Excel spreadsheet (OOXML)
application/vnd.ms-powerpoint.ppt .pot .ppsMicrosoft PowerPoint 97–2003 presentation
application/vnd.openxmlformats-officedocument.presentationml.presentation.pptxMicrosoft PowerPoint presentation (OOXML)
application/zip.zipZIP archive
application/gzip.gzGzip archive
application/x-tar.tarTar archive
application/vnd.rar.rarRAR archive
application/x-7z-compressed.7z7-Zip archive
application/x-bzip2.bz2Bzip2 archive
application/zstd.zstZstandard archive
application/vnd.apple.mpegurl.m3u8HLS playlist
application/x-httpd-php.php .phtmlPHP source
application/java-archive.jar .war .earJava archive
application/x-sh.sh .bash .zshShell script

audio9 types

Every audio media type in the dataset, with its extensions.
MIME typeExtensionsDescription
audio/mpeg.mp3 .mp2 .m2aMP3 audio
audio/wav.wav .waveWAV audio
audio/ogg.ogg .oga .spxOgg audio
audio/opus.opusOpus audio
audio/mp4.m4a .m4b .mp4aMPEG-4 audio
audio/aac.aac .adtsAAC audio
audio/flac.flacFLAC lossless audio
audio/webm.webaWebM audio
audio/midi.mid .midi .karMIDI sequence

font6 types

Every font media type in the dataset, with its extensions.
MIME typeExtensionsDescription
font/woff.woffWOFF font
font/woff2.woff2WOFF2 font
font/ttf.ttfTrueType font
font/otf.otfOpenType font
font/collection.ttcTrueType collection
application/vnd.ms-fontobject.eotEmbedded OpenType font

image12 types

Every image media type in the dataset, with its extensions.
MIME typeExtensionsDescription
image/jpeg.jpg .jpeg .jpe .jfif .pjpegJPEG image
image/png.pngPNG image
image/gif.gifGIF image
image/webp.webpWebP image
image/avif.avif .avifsAVIF image
image/svg+xml.svg .svgzSVG vector image
image/x-icon.ico .curIcon image
image/bmp.bmp .dibBitmap image
image/tiff.tif .tiffTIFF image
image/heic.heic .heicsHEIC image
image/heif.heif .heifsHEIF image
image/jxl.jxlJPEG XL image

message1 types

Every message media type in the dataset, with its extensions.
MIME typeExtensionsDescription
message/rfc822.eml .mimeEmail message

model4 types

Every model media type in the dataset, with its extensions.
MIME typeExtensionsDescription
model/gltf+json.gltfglTF 3D scene
model/gltf-binary.glbBinary glTF 3D scene
model/stl.stlSTL 3D model
model/obj.objWavefront OBJ 3D model

multipart2 types

Every multipart media type in the dataset, with its extensions.
MIME typeExtensionsDescription
multipart/form-dataMultipart form submission
multipart/byterangesPartial response with multiple ranges

text17 types

Every text media type in the dataset, with its extensions.
MIME typeExtensionsDescription
text/html.html .htm .xhtmlHTML document
text/css.cssCascading style sheet
text/javascript.js .mjs .cjsJavaScript source
text/plain.txt .text .log .ini .conf .env .tsx .jsx .vue .sveltePlain text
text/csv.csvComma-separated values
text/tab-separated-values.tsv .tabTab-separated values
text/markdown.md .markdownMarkdown document
text/calendar.ics .ifbiCalendar data
text/vcard.vcf .vcardvCard contact
text/x-python.py .pywPython source
text/x-java-source.javaJava source
text/x-c.c .hC source or header
text/x-c++src.cpp .cc .cxx .hpp .hxxC++ source or header
text/x-go.goGo source
text/rust.rsRust source
text/x-ruby.rbRuby source
text/x-toml.tomlTOML configuration

video9 types

Every video media type in the dataset, with its extensions.
MIME typeExtensionsDescription
video/mp4.mp4 .m4pMPEG-4 video
video/webm.webmWebM video
video/ogg.ogv .ogxOgg video
video/quicktime.mov .qtQuickTime video
video/x-m4v.m4vM4V video
video/x-msvideo.aviAVI video
video/x-matroska.mkv .mk3dMatroska video
video/mp2t.ts .m2ts .mtsMPEG transport stream
video/3gpp.3gp .3gpp3GPP video

MIME type vs file extension

They describe the same thing and are supplied by different people.

  • A file extension.pdf — is part of a filename. It travels with the file, and anyone who can rename the file can change it.
  • A MIME typeapplication/pdf — is metadata sent alongside the content, asserted by whatever is serving it.

The difference matters when they disagree. A browser downloading report.pdf served as text/plain will show you the raw bytes; the same file served as application/pdf opens in the viewer. Same file, different behaviour, and the extension had no say in it.

What neither one does is prove the content. An extension is a naming convention and a MIME type is a claim. Only reading the bytes settles the question.

MIME types in HTTP

The Content-Type header carries the media type of a message body — on responses, saying what is being returned; on requests, saying what is being sent. An API that will not accept the type you declared says so with 415 Unsupported Media Type.

A response header
HTTP/1.1 200 OKContent-Type: application/jsonX-Content-Type-Options: nosniff {"ok":true}

Getting it wrong has specific, unhelpful consequences:

  • A stylesheet not sent as text/css is ignored in standards mode. The page renders unstyled with no error anyone will notice.
  • A module not sent as application/wasm is refused by WebAssembly.instantiateStreaming, which will not sniff the bytes as a favour.
  • A font sent as application/octet-stream may still load, but a font the server has never heard of — .woff2 is missing from plenty of old default configs — often will not.
  • A document sent as application/octet-stream downloads instead of opening, which is sometimes the bug and sometimes exactly what you wanted.

Historically browsers papered over these by sniffing — inspecting the bytes and overriding a type that looked wrong. That was helpful and exploitable in equal measure, so X-Content-Type-Options: nosniff exists to turn it off. Set it, and a mislabelled resource is blocked rather than guessed at. The trade-off is that your types then have to be right, because the safety net is gone.

When a server sends the wrong type, the cause is almost always a missing entry in its extension map — conf/mime.types for Nginx, mime.types and AddType for Apache. Newer formats are the usual casualties.

MIME types for file uploads

When a browser uploads a file it sends multipart/form-data, and gives each part its own Content-Type — worked out from the file extension.

Do not rely only on a client-provided MIME type for security-sensitive file validation. That value is derived from a filename the user chose, and anyone sending the request directly can put whatever they like in it. A file named invoice.pdf containing a script will arrive announcing application/pdf, and both the extension and the header will agree with each other and be wrong.

What actually holds up:

  • Inspect the bytes on the server — check the magic number against the format you expect, with a library rather than by hand.
  • Keep an allowlist of accepted formats. A denylist is a list of the attacks you have already thought of.
  • Store uploads outside the web root, or on a separate origin, so nothing that slips through executes in yours.
  • Serve untrusted files as application/octet-stream with nosniff, so the browser downloads rather than renders them.
  • Watch the container formats. A .docx or an .epub is a ZIP archive underneath, so byte inspection alone says application/zip — you have to look inside.
  • Treat SVG as active content. It is XML — open one in an XML formatter and the script tags are right there — so an uploaded SVG served from your own origin is an XSS vector.

Frequently asked questions

What is a MIME type?

A short string that tells software what kind of content it is dealing with — image/jpeg, application/json, text/html. It is written as type/subtype: a broad category, then the specific format. Originally invented for email attachments (MIME stands for Multipurpose Internet Mail Extensions), it is now what every HTTP response uses to say what it is returning. The modern spec calls them media types; MIME type is the name that stuck.

How do I find the MIME type of a file?

Use the lookup above: type the extension and it returns the media type commonly mapped to it. That is a mapping, not an inspection — the tool reads the extension you typed, not the file. To find out what a file actually contains you need to read its bytes, with `file` on Unix, or a content-sniffing library on the server.

What is the MIME type for .jpg?

image/jpeg — the same for .jpg, .jpeg and .jpe. There is no image/jpg; it is a common guess and servers do not recognise it, so a resource sent with it may be refused or downloaded rather than displayed.

What is the MIME type for .png?

image/png. Animated PNG has its own type, image/apng, but the file extension is still .png and browsers detect the animation from the bytes rather than from the header.

What is the MIME type for .pdf?

application/pdf. It sits under application rather than text because a PDF is a binary container, not something an editor could usefully open.

What is the MIME type for .json?

application/json. Worth knowing: JSON has no charset parameter — the specification requires UTF-8 — so application/json; charset=UTF-8 is redundant rather than wrong. For JSON-LD the type is application/ld+json, and for a web app manifest it is application/manifest+json.

What is the MIME type for .html?

text/html, normally sent with a charset: text/html; charset=UTF-8. If the charset is missing the browser guesses, and a wrong guess turns non-ASCII characters into mojibake.

What is the MIME type for .css?

text/css. This one has to be right: a browser in standards mode refuses a stylesheet served as anything else, so a misconfigured server produces a page with no styles at all and no obvious error.

What is the MIME type for JavaScript?

text/javascript. RFC 9239 made that the standard value in 2022 and marked application/javascript obsolete. Both still work in every browser, so existing configuration is not broken — but new configuration should use text/javascript. The same value covers .js, .mjs and .cjs.

What is application/json?

The media type for JSON data. Sending it tells the recipient to parse the body as JSON; most HTTP clients will then decode it automatically, and most APIs will reject a request body that arrives without it. It is also what a fetch call needs in its Content-Type header when posting JSON.

What is text/html?

The media type for an HTML document. It is what makes a browser render markup rather than display it as text — send the same bytes as text/plain and you see the tags instead of the page.

What is image/jpeg?

The media type for a JPEG image, covering the .jpg, .jpeg and .jpe extensions. image is the top-level type and jpeg is the subtype, so anything that can handle images generally knows what to do with it even if it cannot decode the specific format.

What is the difference between a MIME type and a file extension?

An extension is part of a filename — a convention for humans and for operating systems deciding which application to open. A MIME type is metadata sent alongside the content, which is how software and network protocols describe it. The important difference is who supplies it: an extension travels with the file and anyone can rename it, while a MIME type is asserted by whatever is serving the content. Neither proves what is actually inside.

What does Content-Type mean?

The HTTP header carrying the media type of a message body. On a response it tells the client what is being returned; on a request it tells the server what is being sent. It is the single most consequential header for how a browser treats a resource — get it wrong and the browser may download something it should render, refuse a stylesheet, or reject a WebAssembly module outright.

Can one extension have multiple MIME types?

Yes, and .ts is the example that catches people out. It is registered to MPEG transport stream — video/mp2t — which is what a default web server sends for it, and it is also the extension every TypeScript project uses. TypeScript has no registered media type at all. Other cases are milder: .ogg can be audio or video depending on what is in the container.

Can one MIME type have multiple extensions?

Routinely. image/jpeg covers .jpg, .jpeg and .jpe; text/html covers .html and .htm; audio/mp4 covers .m4a and .m4b. The media type describes the format, and a format can be spelled several ways in a filename.

Are MIME types case-sensitive?

No. The type, the subtype and parameter names are all case-insensitive, so Text/HTML and text/html are the same. Convention is lowercase and every tool writes them that way. Parameter *values* are a different matter — a multipart boundary is case-sensitive and must be preserved exactly, which is why this tool lowercases the type but leaves parameter values alone.

What does a MIME type consist of?

A top-level type, a slash and a subtype: image/jpeg is the image type and the jpeg subtype. There are nine top-level types — application, audio, font, image, message, model, multipart, text and video. Subtypes can carry a prefix (vnd. for vendor-specific, x- for unregistered) and a suffix after a plus sign that names the underlying structure, which is what image/svg+xml and application/ld+json are telling you.

What are MIME type parameters?

Extra name=value pairs after a semicolon, as in text/html; charset=UTF-8. The parameter is not part of the type — the type is text/html, and charset describes how to decode it. The two common ones are charset on text formats and boundary on multipart bodies. This tool splits parameters off before looking anything up, which is why pasting a whole Content-Type header works.

Can MIME types be trusted for file upload security?

No. The Content-Type on an uploaded file is supplied by the browser, derived from the file extension, and trivially forged by anyone sending the request directly. A file named invoice.pdf carrying a script inside will arrive claiming application/pdf. Validate on the server by reading the actual bytes, keep an allowlist of accepted formats, store uploads outside the web root or on a separate origin, and never let the client decide what a file is.

Why is the correct MIME type important for browsers?

Because it decides behaviour, not just labelling. A stylesheet sent as text/plain is ignored in standards mode. A WebAssembly module sent as anything but application/wasm is refused by instantiateStreaming. A PDF sent as application/octet-stream downloads instead of opening. And with X-Content-Type-Options: nosniff set — which it should be — the browser stops second-guessing a wrong type and simply blocks the resource.

What is X-Content-Type-Options: nosniff?

A response header telling the browser not to guess a resource's type from its content when the declared type looks wrong. Without it, browsers sniff, and sniffing is exploitable — a file uploaded as an image but containing HTML could be executed as HTML. With it, a mislabelled resource is refused instead. The trade-off is that your MIME types then have to be correct, because there is no longer a safety net.

What is application/octet-stream?

Arbitrary binary data — bytes with no declared meaning. It is the universal fallback, and browsers download it rather than trying to render it. That makes it the safe type for serving untrusted user uploads: whatever is inside, the browser will not execute it in your origin.

Why does my server send the wrong MIME type?

Almost always a missing entry in its extension map. Nginx reads conf/mime.types, Apache reads mime.types plus AddType directives, and both fall back to a default — often application/octet-stream — for anything unlisted. Newer formats are the usual casualties: .webmanifest, .wasm, .avif and .woff2 are all missing from older default configs, which is why a font or a manifest silently fails to load.

Is this MIME Type Lookup free?

Yes. Both lookup directions, the search, the reference table and the copy actions are free, with no account and no limit.

Does this tool upload my files?

No — it never touches files at all. There is no file input; you type an extension or a media type and the lookup runs against a dataset bundled with the page. Everything runs locally in your browser and no lookup value is sent to our server.

How accurate are MIME type mappings?

The values here are the ones worth sending: standards-based where a standard exists, and the de facto value where that won the argument. But mappings genuinely differ between operating systems, browsers, web servers, registries and applications — .ico is image/x-icon almost everywhere and image/vnd.microsoft.icon in the IANA registry, and both are correct. Where a format has more than one value in circulation, this tool lists them all rather than picking one and hiding the rest.

What is the difference between text/xml and application/xml?

They describe the same content. RFC 7303 prefers application/xml, because a text/* type implies the body is readable as plain text, which XML generally is not — and because a text/* type without a charset parameter defaults to US-ASCII, which breaks any XML using another encoding. text/xml still works and is still widely sent.

Why do some MIME types start with x-?

The x- prefix historically marked an unregistered, experimental type: image/x-icon, application/x-tar, text/x-python. RFC 6648 deprecated the convention in 2012 because so many x- types became permanent that the prefix stopped meaning anything. Plenty are still in daily use, which is why this tool resolves them rather than pretending they are gone.

Does the MIME type tell me what a file really contains?

No. A MIME type lookup identifies the media type commonly associated with an extension. It does not prove that a file contains that kind of content — renaming script.js to photo.jpg changes the extension and the type any tool would report, and changes nothing about the bytes. For anything security-sensitive, inspect the content server-side.

Popular tools

↑ ↓NavigateOpenEscClose