MIME Types
A curated subset of the IANA media type registry covering the formats you actually encounter — JSON variants, common application types, every web image and video format, 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, immutable 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 25.0 KB
/v1/mime-types.json
min: 18.4 KB · /v1/mime-types.min.json
- CSV 9.0 KB
/v1/mime-types.csv
- TypeScript 25.2 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 (legacy; prefer text/javascript) |
| application | ecmascript | application/ecmascript | ECMAScript program |
| 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/*).
Where the IANA registry has both a deprecated and a current spelling for the same format (application/x-font-ttf vs. font/ttf), both entries are included so legacy lookups continue to work; the description notes which is current.
Versioning
URLs under /v1/ are immutable. The data they return will not change in a way
that breaks consumers. Schema-incompatible updates ship under a new version path. See the
mime-types changelog for this dataset's history.