Primary keys that sort by creation time
New rows append to the end of the index rather than scattering, which avoids the page splits and write amplification random keys cause on large tables.
Generates and parses Universally Unique Lexicographically Sortable Identifiers (ULID) with millisecond-precision timestamps and random entropy.
—Generates and parses Universally Unique Lexicographically Sortable Identifiers (ULID) with millisecond-precision timestamps and random entropy.
Count: 1
01ARZ3NDEKTSV4RRFFQ69G5FAV (Timestamp: 2026-08-16T20:30:00.000Z)
First 10 characters encode timestamp, last 16 encode randomness.
A 128-bit collision-resistant identifier ordered chronologically by millisecond.
Your input is processed entirely in your browser and never sent to a YAS server.
curl -X POST "https://yas.sh/api/v1/tools/ulid-generator" \
-H "Content-Type: application/json" \
-d '{"count":1}'const res = await fetch("https://yas.sh/api/v1/tools/ulid-generator", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
"count": 1
}),
});
const data = await res.json();import requests
r = requests.post("https://yas.sh/api/v1/tools/ulid-generator", json={"count":1})
data = r.json()| Field | Type | Required | Description |
|---|---|---|---|
| count | integer | No (default 1) | Count to generate (1–50) |
| input | string | No | Optional ULID string to parse |
{ "slug": "ulid-generator", "count": 1, "result": "01ARZ3NDEKTSV4RRFFQ69G5FAV" }Generate sortable 128-bit ULIDs or parse timestamp.
400 VALIDATION_ERROR — invalid input or unsupported option.413 PAYLOAD_TOO_LARGE — input exceeds the 64 KB limit.429 RATE_LIMIT_EXCEEDED — rate limit exceeded (60 req/min).A ULID is 128 bits: a 48-bit millisecond timestamp followed by 80 bits of randomness, rendered as 26 characters in Crockford base32. That encoding excludes I, L, O and U to avoid visual and transcription ambiguity, and the timestamp occupies the leading characters — so lexicographic sorting of the text form matches chronological order, which is the property that makes ULIDs useful as keys.
Within the same millisecond, monotonic implementations increment the random component rather than redrawing it, guaranteeing strictly increasing values in a single process. Across processes there is no coordination, so two nodes generating in the same millisecond produce values whose relative order is arbitrary — ULIDs give you approximate global ordering, not a distributed sequence.
New rows append to the end of the index rather than scattering, which avoids the page splits and write amplification random keys cause on large tables.
Sorting by ID sorts by time, so range scans over a time window need no separate timestamp index.
Multiple services can mint IDs independently and still produce a roughly time-ordered global sequence.
Crockford base32 omits the characters most often confused in transcription, which measurably reduces support errors.
What this tool deliberately does not do, and where it will disagree with other implementations.