Unicode General Categories
The Unicode Standard assigns every codepoint a General Category — a two-letter abbreviation (e.g. Lu for Uppercase Letter, Nd for Decimal Number) that classifies its basic character type. This dataset lists all 30 normative categories together with their full English names and the seven top-level groups they belong to.
Quick fetch
Stable URL. CORS-enabled. No auth.
curl https://staticdata.dev/v1/unicode-general-categories.json
Or use as a typed import:
import { unicodeGeneralCategories } from "https://staticdata.dev/v1/unicode-general-categories.ts"
Formats
- JSON 2.6 KB
/v1/unicode-general-categories.json
min: 1.9 KB · /v1/unicode-general-categories.min.json
- CSV 840 B
/v1/unicode-general-categories.csv
- TypeScript 2.8 KB
/v1/unicode-general-categories.ts
export const unicodeGeneralCategories
type UnicodeCategory = (typeof unicodeGeneralCategories)[number]
Schema
Each record in the dataset has the following shape.
| Field | Type | Description | Example |
|---|---|---|---|
| abbreviation | string | Two-letter category code (e.g. Lu, Nd) | Lu |
| name | string | Full English name of the category | Uppercase Letter |
| group | string | Top-level group (Letter, Mark, Number, Punctuation, Symbol, Separator, Other) | Letter |
Preview
First 10 records.
| abbreviation | name | group |
|---|---|---|
| Lu | Uppercase Letter | Letter |
| Ll | Lowercase Letter | Letter |
| Lt | Titlecase Letter | Letter |
| Lm | Modifier Letter | Letter |
| Lo | Other Letter | Letter |
| Mn | Nonspacing Mark | Mark |
| Mc | Spacing Mark | Mark |
| Me | Enclosing Mark | Mark |
| Nd | Decimal Number | Number |
| Nl | Letter Number | Number |
Fetch examples
Drop-in snippets in five languages.
curl -sSL https://staticdata.dev/v1/unicode-general-categories.json | jq '.[0]' import type { UnicodeCategory } from "https://staticdata.dev/v1/unicode-general-categories.ts";
const res = await fetch("https://staticdata.dev/v1/unicode-general-categories.min.json");
if (!res.ok) throw new Error(`Fetch failed: ${res.status}`);
const unicodeGeneralCategories: UnicodeCategory[] = await res.json();
console.log(unicodeGeneralCategories[0]); import urllib.request, json
with urllib.request.urlopen("https://staticdata.dev/v1/unicode-general-categories.min.json") as r:
unicodeGeneralCategories = json.load(r)
print(unicodeGeneralCategories[0]) package main
import (
"encoding/json"
"fmt"
"net/http"
)
func main() {
resp, err := http.Get("https://staticdata.dev/v1/unicode-general-categories.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/unicode-general-categories.min.json").call()?.into_string()?;
let data: Vec<Value> = serde_json::from_str(&body)?;
println!("{:?}", data.first());
Ok(())
} Sources and methodology
The Unicode General Category is a normative property defined in the Unicode Character Database (UCD). Every codepoint carries exactly one category value (unassigned codepoints have Cn), expressed as a two-letter code whose first letter indicates the major group (L = Letter, M = Mark, N = Number, P = Punctuation, S = Symbol, Z = Separator, C = Other) and whose second letter further distinguishes subtypes within that group.
This dataset contains all 30 category values as specified in Unicode Standard Annex #44 (UAX #44), General_Category Values table. The records are ordered by group and, within each group, in the same order as that table (e.g. Lu, Ll, Lt, Lm, Lo). The grouping aliases L, M, N, P, S, Z, C (and LC, Cased_Letter) are not records of their own; they are represented by the group field. The group field reflects the seven top-level classes used in regex engines (e.g., \p{L} for any letter) and in Unicode-aware text-processing APIs across most programming languages.
Because General Category values are normative and defined by the Unicode Consortium, this dataset changes only if a new Unicode version introduces a category value — something Unicode’s stability policy rules out for subdivisions of existing values. The list was verified against PropertyValueAliases.txt from Unicode 18.0, current 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
unicode-general-categories changelog for this dataset's history.
Related datasets
More Code datasets
- ansi-colors
- cron-presets
- css-at-rules
- css-functions
- css-named-colors
- css-properties
- css-pseudo-classes
- css-pseudo-elements
- css-units
- data-units
- exit-codes
- file-signatures
- hash-algorithms
- js-array-methods
- js-math-methods
- js-object-methods
- js-string-methods
- json-schema-keywords
- jwt-claims
- mathematical-constants
- measurement-units
- node-builtin-modules
- owasp-top-10
- periodic-table
- physical-constants
- posix-signals
- programming-languages
- regex-flags
- regex-patterns
- roman-numerals
- si-base-units
- si-derived-units
- si-prefixes
- spdx-licenses
- strftime-tokens
- tailwind-colors
- time-units
- unicode-blocks
- unicode-planes
- unix-file-permissions
- xterm-256-colors