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.
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.
.pdf → application/pdf.json → application/json.jpg → image/jpeg.woff2 → font/woff2That 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-Typeheader with its parameters, and get the extensions back. - To find what a file actually contains, read its bytes:
file --mime-type name.exton 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:
image/jpeg│ ││ └── subtype — the specific format└──────── top-level type — the broad categoryTwo 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:
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:
| Extension | MIME type | Category |
|---|---|---|
| .html | text/html | text |
| .css | text/css | text |
| .js | text/javascript | text |
| .json | application/json | application |
| .jpg | image/jpeg | image |
| .png | image/png | image |
| .svg | image/svg+xml | image |
| application/pdf | application | |
| .zip | application/zip | application |
| .mp3 | audio/mpeg | audio |
| .mp4 | video/mp4 | video |
| .woff2 | font/woff2 | font |
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
| MIME type | Extensions | Description |
|---|---|---|
| application/yaml | .yaml .yml | YAML document |
| application/json | .json .map | JSON data |
| application/ld+json | .jsonld | JSON-LD linked data |
| application/manifest+json | .webmanifest | Web app manifest |
| application/xml | .xml .xsd .xsl .xslt .plist | XML document |
| application/rss+xml | .rss | RSS feed |
| application/atom+xml | .atom | Atom feed |
| application/xhtml+xml | .xht | XHTML document |
| application/wasm | .wasm | WebAssembly module |
| application/sql | .sql | SQL script |
| application/x-www-form-urlencoded | — | URL-encoded form data |
| application/octet-stream | .bin .exe .dll .so .dmg .iso .img | Arbitrary binary data |
| application/pdf | PDF document | |
| application/rtf | .rtf | Rich Text Format document |
| application/epub+zip | .epub | EPUB ebook |
| application/vnd.oasis.opendocument.text | .odt | OpenDocument text document |
| application/vnd.oasis.opendocument.spreadsheet | .ods | OpenDocument spreadsheet |
| application/vnd.oasis.opendocument.presentation | .odp | OpenDocument presentation |
| application/msword | .doc .dot | Microsoft Word 97–2003 document |
| application/vnd.openxmlformats-officedocument.wordprocessingml.document | .docx | Microsoft Word document (OOXML) |
| application/vnd.ms-excel | .xls .xlt .xla | Microsoft Excel 97–2003 spreadsheet |
| application/vnd.openxmlformats-officedocument.spreadsheetml.sheet | .xlsx | Microsoft Excel spreadsheet (OOXML) |
| application/vnd.ms-powerpoint | .ppt .pot .pps | Microsoft PowerPoint 97–2003 presentation |
| application/vnd.openxmlformats-officedocument.presentationml.presentation | .pptx | Microsoft PowerPoint presentation (OOXML) |
| application/zip | .zip | ZIP archive |
| application/gzip | .gz | Gzip archive |
| application/x-tar | .tar | Tar archive |
| application/vnd.rar | .rar | RAR archive |
| application/x-7z-compressed | .7z | 7-Zip archive |
| application/x-bzip2 | .bz2 | Bzip2 archive |
| application/zstd | .zst | Zstandard archive |
| application/vnd.apple.mpegurl | .m3u8 | HLS playlist |
| application/x-httpd-php | .php .phtml | PHP source |
| application/java-archive | .jar .war .ear | Java archive |
| application/x-sh | .sh .bash .zsh | Shell script |
audio9 types
| MIME type | Extensions | Description |
|---|---|---|
| audio/mpeg | .mp3 .mp2 .m2a | MP3 audio |
| audio/wav | .wav .wave | WAV audio |
| audio/ogg | .ogg .oga .spx | Ogg audio |
| audio/opus | .opus | Opus audio |
| audio/mp4 | .m4a .m4b .mp4a | MPEG-4 audio |
| audio/aac | .aac .adts | AAC audio |
| audio/flac | .flac | FLAC lossless audio |
| audio/webm | .weba | WebM audio |
| audio/midi | .mid .midi .kar | MIDI sequence |
font6 types
| MIME type | Extensions | Description |
|---|---|---|
| font/woff | .woff | WOFF font |
| font/woff2 | .woff2 | WOFF2 font |
| font/ttf | .ttf | TrueType font |
| font/otf | .otf | OpenType font |
| font/collection | .ttc | TrueType collection |
| application/vnd.ms-fontobject | .eot | Embedded OpenType font |
image12 types
| MIME type | Extensions | Description |
|---|---|---|
| image/jpeg | .jpg .jpeg .jpe .jfif .pjpeg | JPEG image |
| image/png | .png | PNG image |
| image/gif | .gif | GIF image |
| image/webp | .webp | WebP image |
| image/avif | .avif .avifs | AVIF image |
| image/svg+xml | .svg .svgz | SVG vector image |
| image/x-icon | .ico .cur | Icon image |
| image/bmp | .bmp .dib | Bitmap image |
| image/tiff | .tif .tiff | TIFF image |
| image/heic | .heic .heics | HEIC image |
| image/heif | .heif .heifs | HEIF image |
| image/jxl | .jxl | JPEG XL image |
message1 types
| MIME type | Extensions | Description |
|---|---|---|
| message/rfc822 | .eml .mime | Email message |
model4 types
| MIME type | Extensions | Description |
|---|---|---|
| model/gltf+json | .gltf | glTF 3D scene |
| model/gltf-binary | .glb | Binary glTF 3D scene |
| model/stl | .stl | STL 3D model |
| model/obj | .obj | Wavefront OBJ 3D model |
multipart2 types
| MIME type | Extensions | Description |
|---|---|---|
| multipart/form-data | — | Multipart form submission |
| multipart/byteranges | — | Partial response with multiple ranges |
text17 types
| MIME type | Extensions | Description |
|---|---|---|
| text/html | .html .htm .xhtml | HTML document |
| text/css | .css | Cascading style sheet |
| text/javascript | .js .mjs .cjs | JavaScript source |
| text/plain | .txt .text .log .ini .conf .env .tsx .jsx .vue .svelte | Plain text |
| text/csv | .csv | Comma-separated values |
| text/tab-separated-values | .tsv .tab | Tab-separated values |
| text/markdown | .md .markdown | Markdown document |
| text/calendar | .ics .ifb | iCalendar data |
| text/vcard | .vcf .vcard | vCard contact |
| text/x-python | .py .pyw | Python source |
| text/x-java-source | .java | Java source |
| text/x-c | .c .h | C source or header |
| text/x-c++src | .cpp .cc .cxx .hpp .hxx | C++ source or header |
| text/x-go | .go | Go source |
| text/rust | .rs | Rust source |
| text/x-ruby | .rb | Ruby source |
| text/x-toml | .toml | TOML configuration |
video9 types
| MIME type | Extensions | Description |
|---|---|---|
| video/mp4 | .mp4 .m4p | MPEG-4 video |
| video/webm | .webm | WebM video |
| video/ogg | .ogv .ogx | Ogg video |
| video/quicktime | .mov .qt | QuickTime video |
| video/x-m4v | .m4v | M4V video |
| video/x-msvideo | .avi | AVI video |
| video/x-matroska | .mkv .mk3d | Matroska video |
| video/mp2t | .ts .m2ts .mts | MPEG transport stream |
| video/3gpp | .3gp .3gpp | 3GPP 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 type —
application/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.
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/cssis ignored in standards mode. The page renders unstyled with no error anyone will notice. - A module not sent as
application/wasmis refused byWebAssembly.instantiateStreaming, which will not sniff the bytes as a favour. - A font sent as
application/octet-streammay still load, but a font the server has never heard of —.woff2is missing from plenty of old default configs — often will not. - A document sent as
application/octet-streamdownloads 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-streamwithnosniff, so the browser downloads rather than renders them. - Watch the container formats. A
.docxor an.epubis a ZIP archive underneath, so byte inspection alone saysapplication/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.