staticdata.dev
Menu
Datasets About Contact

Unicode Planes

The Unicode standard divides its 1,114,112 codepoints into 17 planes of 65,536 codepoints each, numbered 0 through 16. Plane 0 is the Basic Multilingual Plane (BMP), covering virtually all modern scripts; Planes 1–3 hold supplementary and historic characters; Planes 4–13 are currently unassigned; Plane 14 holds special-purpose tags; and Planes 15–16 are reserved for private use.

v1.0.0 MIT 17 records Updated 2026-10-05 stable Source:  Unicode Standard, Chapter 2 — General Structure

Quick fetch

Stable URL. CORS-enabled. No auth.

bash
curl https://staticdata.dev/v1/unicode-planes.json

Or use as a typed import: import { unicodePlanes } from "https://staticdata.dev/v1/unicode-planes.ts"

Formats

  • JSON 3.4 KB

    /v1/unicode-planes.json

    Open

    min: 2.9 KB · /v1/unicode-planes.min.json

  • CSV 2.2 KB

    /v1/unicode-planes.csv

    Open
  • TypeScript 3.6 KB

    /v1/unicode-planes.ts

    export const unicodePlanes

    type UnicodePlane = (typeof unicodePlanes)[number]

    Open

Schema

Each record in the dataset has the following shape.

Schema
Field Type Description Example
plane number Plane number (0–16) 0
name string Official name of the plane Basic Multilingual Plane
range string Codepoint range in U+XXXX..U+XXXX notation U+0000..U+FFFF
description string Brief description of the plane's contents and purpose Contains characters for almost all modern languages and many symbols.

Preview

First 10 records.

Data preview
planenamerangedescription
0Basic Multilingual PlaneU+0000..U+FFFFContains characters for almost all modern languages and many symbols; the most widely used Unicode plane.
1Supplementary Multilingual PlaneU+10000..U+1FFFFHistoric scripts, musical notation, mathematical alphanumerics, emoji, and other modern-use supplementary characters.
2Supplementary Ideographic PlaneU+20000..U+2FFFFCJK Unified Ideographs Extensions B–F and I, plus the CJK Compatibility Ideographs Supplement: rare and historic Chinese, Japanese, and Korean characters.
3Tertiary Ideographic PlaneU+30000..U+3FFFFCJK Unified Ideographs Extensions G, H, and J (rare and archaic sinographs) and, since Unicode 18.0, the Seal script block.
4Unassigned Plane 4U+40000..U+4FFFFCurrently unassigned; reserved for future Unicode use.
5Unassigned Plane 5U+50000..U+5FFFFCurrently unassigned; reserved for future Unicode use.
6Unassigned Plane 6U+60000..U+6FFFFCurrently unassigned; reserved for future Unicode use.
7Unassigned Plane 7U+70000..U+7FFFFCurrently unassigned; reserved for future Unicode use.
8Unassigned Plane 8U+80000..U+8FFFFCurrently unassigned; reserved for future Unicode use.
9Unassigned Plane 9U+90000..U+9FFFFCurrently unassigned; reserved for future Unicode use.

Showing 10 of 17. View full data:  JSON · CSV

Fetch examples

Drop-in snippets in five languages.

curl
curl -sSL https://staticdata.dev/v1/unicode-planes.json | jq '.[0]'
JavaScript
import type { UnicodePlane } from "https://staticdata.dev/v1/unicode-planes.ts";

const res = await fetch("https://staticdata.dev/v1/unicode-planes.min.json");
if (!res.ok) throw new Error(`Fetch failed: ${res.status}`);
const unicodePlanes: UnicodePlane[] = await res.json();
console.log(unicodePlanes[0]);
Python
import urllib.request, json

with urllib.request.urlopen("https://staticdata.dev/v1/unicode-planes.min.json") as r:
    unicodePlanes = json.load(r)

print(unicodePlanes[0])
Go
package main

import (
	"encoding/json"
	"fmt"
	"net/http"
)

func main() {
	resp, err := http.Get("https://staticdata.dev/v1/unicode-planes.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])
}
Rust
use serde_json::Value;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let body = ureq::get("https://staticdata.dev/v1/unicode-planes.min.json").call()?.into_string()?;
    let data: Vec<Value> = serde_json::from_str(&body)?;
    println!("{:?}", data.first());
    Ok(())
}

Sources and methodology

The Unicode codespace spans U+0000 to U+10FFFF — exactly 1,114,112 codepoints — divided into 17 planes of 65,536 codepoints each. Each plane is identified by its number (0–16) and a hexadecimal prefix that forms the high bits of every codepoint it contains.

Plane 0, the Basic Multilingual Plane (BMP), covers the vast majority of characters needed for modern computing: Latin, Greek, Cyrillic, Arabic, Hebrew, CJK ideographs, punctuation, and general symbols. Planes 1–3 extend coverage to historic scripts (Linear B, cuneiform, Egyptian hieroglyphs, and — since Unicode 18.0 — Seal script in Plane 3), musical and mathematical notation, emoji, and the enormous body of rare CJK ideographs. Planes 4–13 are currently unassigned and reserved for future standardization. Plane 14 holds language tags and variation selectors used as invisible metadata. Planes 15 and 16 are designated Supplementary Private Use Areas, available for private agreements between implementers.

This dataset is curated from the authoritative Unicode Standard documentation. The codepoint ranges are fixed by the standard and will not change; the assigned/unassigned status of planes 4–13 reflects Unicode 18.0, the current version as of October 2026, and may change in future Unicode versions. The names “Unassigned Plane 4” … “Unassigned Plane 13” are descriptive labels, not official Unicode names.

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-planes changelog for this dataset's history.

Related datasets

More Code datasets