MIME Types
A curated list of 148 media types covering the formats you actually encounter — JSON variants, common application types, the common web image and video formats, audio, fonts, archives, and the most common Office and OpenDocument types — each with the file extensions associated with it and a one-line description of what the format is.
Quick fetch
Stable URL. CORS-enabled. No auth.
curl https://staticdata.dev/v1/mime-types.json
Or use as a typed import:
import { mimeTypes } from "https://staticdata.dev/v1/mime-types.ts"
Formats
- JSON 26.4 KB
/v1/mime-types.json
min: 19.5 KB · /v1/mime-types.min.json
- CSV 9.7 KB
/v1/mime-types.csv
- TypeScript 26.6 KB
/v1/mime-types.ts
export const mimeTypes
type MimeType = (typeof mimeTypes)[number]
Schema
Each record in the dataset has the following shape.
| Field | Type | Description | Example |
|---|---|---|---|
| type | string | Top-level type | application |
| subtype | string | Subtype | json |
| fullName | string | Full type/subtype string | application/json |
| extensions | string[] | File extensions associated with the type (without leading dot) | ["json"] |
| description | string | Human-readable description | JSON data |
Preview
First 10 records.
| type | subtype | fullName | description |
|---|---|---|---|
| application | json | application/json | JSON data |
| application | ld+json | application/ld+json | JSON-LD (Linked Data) document |
| application | manifest+json | application/manifest+json | Web App Manifest |
| application | xml | application/xml | XML document |
| application | xhtml+xml | application/xhtml+xml | XHTML document |
| application | atom+xml | application/atom+xml | Atom syndication feed |
| application | rss+xml | application/rss+xml | RSS syndication feed |
| application | javascript | application/javascript | JavaScript program (obsolete per RFC 9239; use text/javascript) |
| application | ecmascript | application/ecmascript | ECMAScript program (obsolete per RFC 9239; use text/javascript) |
| application | wasm | application/wasm | WebAssembly binary |
Fetch examples
Drop-in snippets in five languages.
curl -sSL https://staticdata.dev/v1/mime-types.json | jq '.[0]' import type { MimeType } from "https://staticdata.dev/v1/mime-types.ts";
const res = await fetch("https://staticdata.dev/v1/mime-types.min.json");
if (!res.ok) throw new Error(`Fetch failed: ${res.status}`);
const mimeTypes: MimeType[] = await res.json();
console.log(mimeTypes[0]); import urllib.request, json
with urllib.request.urlopen("https://staticdata.dev/v1/mime-types.min.json") as r:
mimeTypes = json.load(r)
print(mimeTypes[0]) package main
import (
"encoding/json"
"fmt"
"net/http"
)
func main() {
resp, err := http.Get("https://staticdata.dev/v1/mime-types.min.json")
if err != nil { panic(err) }
defer resp.Body.Close()
var data []map[string]any
if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
panic(err)
}
fmt.Println(data[0])
} use serde_json::Value;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let body = ureq::get("https://staticdata.dev/v1/mime-types.min.json").call()?.into_string()?;
let data: Vec<Value> = serde_json::from_str(&body)?;
println!("{:?}", data.first());
Ok(())
} Sources and methodology
The IANA registry contains thousands of types, including a long tail of vendor-specific (vnd.*) entries that exist only because a single product registered them. This dataset focuses on the types you’d plausibly need in a content-type lookup or file-extension router.
The mapping between extensions and types is many-to-many: a single extension can be associated with multiple types (.ts is both TypeScript source and MPEG Transport Stream), and a single type can have multiple extensions (.jpg/.jpeg/.jpe). When implementing extension-to-type lookup, you must resolve ambiguity using context.
The extensions array can be empty for types that have no associated file extension (e.g., application/x-www-form-urlencoded, multipart/*).
Not every entry is in the IANA registry: widely used but unregistered types (x- types such as application/x-tar, plus de-facto types like audio/wav, video/webm and text/event-stream) are included because real servers send them. Where a legacy or unregistered spelling coexists with a registered one for the same format (application/x-font-ttf vs. font/ttf, application/x-rar-compressed vs. application/vnd.rar, video/x-matroska vs. video/matroska, application/javascript vs. text/javascript), both entries are included so legacy lookups continue to work; the description notes which is current. Registration status is as of October 2026.
Versioning
URLs under /v1/ are stable: field names and types will not change in a way
that breaks consumers. Values can be corrected or records added when the upstream source
changes; schema-incompatible updates ship under a new version path. See the
mime-types changelog for this dataset's history.
Related datasets
More Web datasets
- aria-attributes
- aria-roles
- character-encodings
- csp-directives
- credit-card-types
- dns-record-types
- dom-events
- emoji
- emoji-shortcodes
- html-elements
- html-entities
- html-attributes
- input-types
- http-auth-schemes
- http-cache-directives
- http-content-codings
- http-headers
- http-methods
- http-versions
- iframe-sandbox-tokens
- ip-protocol-numbers
- keyboard-event-codes
- link-relations
- media-type-suffixes
- oauth-grant-types
- ports
- referrer-policies
- ip-special-blocks
- svg-elements
- tcp-flags
- tlds
- tls-cipher-suites
- tls-versions
- uri-schemes
- well-known-uris