Create a random id of any length with characters 0-9,A-Z,a-z using the browser's crypto.getRandomValues interface.
npm install crypto-idCreate cryptographically secure random alphanumeric IDs and sortable identifiers using the browser crypto API.
``bash`
npm install crypto-id
- ๐ Cryptographically secure - Uses crypto.getRandomValues()
- ๐ Universal - Works in browsers and Node.js
- ๐ URL-safe - Base 62 encoding (0-9, A-Z, a-z)
- โก Fast - Efficient rejection sampling for uniform distribution
- ๐ Sortable IDs - Timestamp-based IDs with lexicographical sorting
- ๐ฆ Lightweight - No dependencies
Creates a cryptographically secure random ID of any length.
`typescript
import { createId } from 'crypto-id';
createId(); // "RJPoz4veOGn9nbDI" (16 chars, ~4.7e28 possibilities)
createId(12); // "GS7rPnA0mmbv" (~3.22e21 possibilities)
createId(4); // "vMH6" (~14.7M possibilities)
`
Parameters:
- length (optional): Length of the ID (default: 16)
Returns: Random alphanumeric string
The number of possible IDs is 62^length.
Creates a sortable identifier that's lexicographically ordered by creation time.
`typescript
import { createSortableId } from 'crypto-id';
createSortableId(); // "0UmdJLiDuEbwhJfL" (16 chars, sortable by time)
createSortableId(); // "0UmdJLiDuEbwhJfM" (increments if same millisecond)
`
Returns: 16-character sortable identifier
Our sortable IDs use the format: TTTTTTTTRRRRRRRR
- 8 characters: Timestamp (base 62 encoded milliseconds, good until year 8888)
- 8 characters: Random component
``
Example: 0UmdJLiDuEbwhJfL
โฌโโโโโโโโฌโโโโโโโ
โ โโ Random (8 chars)
โโโโโโโโโ Timestamp (8 chars)
This ensures:
- โ
Lexicographical sorting matches chronological order
- โ
No collisions within the same millisecond
- โ
Optimal database indexing performance
Sortable IDs handle multiple generations within the same millisecond:
`typescript
// Same millisecond - automatic increment
const id1 = createSortableId(); // "0UmdJLiDuEbwhJfL"
const id2 = createSortableId(); // "0UmdJLiDuEbwhJfM"
const id3 = createSortableId(); // "0UmdJLiDuEbwhJfN"
// Different millisecond - fresh random component
// (after delay)
const id4 = createSortableId(); // "0UmdJLiEX87wJp4H"
`
This ensures:
- โ
Lexicographical sorting matches chronological order
- โ
No collisions within the same millisecond
- โ
Optimal database indexing performance
- createId: Pure random generation, fastest
- createSortableId: Timestamp + monotonicity handling, minimal overhead
Both functions use efficient rejection sampling for uniform distribution and batch random byte generation for optimal performance.
Works seamlessly in both environments:
- Browser: Uses crypto.getRandomValues()crypto.webcrypto.getRandomValues()
- Node.js: Uses
Full TypeScript support included with comprehensive type definitions.
`typescript
import { createId, createSortableId } from 'crypto-id';
const randomId: string = createId(12);
const sortableId: string = createSortableId();
`
This package includes a comprehensive test suite that covers all functionality:
`bashRun tests
npm test
The test suite verifies:
- โ
Correct ID lengths and formats
- โ
Base 62 character set usage
- โ
Uniqueness and collision resistance
- โ
Sortable ID monotonicity and ordering
- โ
Timestamp progression over time