CUID generator
Copy a fresh CUID2, or switch to CUID v1 if you are matching a legacy system. Need more than one? The bulk generator makes up to 100 at once.
Generate an ID
Generating
CUID2 hashes its inputs, so nothing can be read back out of the string. It always starts with a letter.
CUID2 or CUID v1?
Use CUID2 unless an existing system already depends on the CUID v1 format.
| Property | CUID2Current | CUID v1Legacy |
|---|---|---|
| Length | 24 characters by default, 2 to 32 if you choose | Always 25 characters |
| First character | Any lowercase letter | Always c |
| Readable timestamp | No | Yes, characters 2 to 9 |
| Package | @paralleldrive/cuid2, maintained | cuid, deprecated |
| Use it for | New record IDs | Matching IDs an existing system already uses |
Both are record identifiers, not secrets. Enforce uniqueness in your database and check access permissions separately.
More tools
Each tool does one job and explains what its result can and cannot tell you.
Check an ID
Read an ID
Latest articles
All articles and updatesCUID2 3.3.0: checking a TypeScript upgrade
What the January release fixes, how to check its exports, and where an upgrade from version 2 needs extra care.
CUID2 in PostgreSQL: the schema beyond the ID
A runnable schema with format constraints, foreign keys, and a separate index for chronological queries.
Change your CUID generator without breaking old links
Work through a mixed-ID rollout with an executable example that preserves records, relationships, and lookup URLs.