ulidx
ULID generator for NodeJS and the browser
ULID generator library, based off of the original ulid for NodeJS and the browser. ULIDs are Universally Unique Lexicographically Sortable Identifiers. This library adheres to this specification.
The original ulid is no longer maintained, and has several outstanding compatibility-related issues that were never addressed. This library aims to address those and remain compatible in a larger range of environments.
Installation
Install using npm by running: npm install ulidx --save
.
ulidx
provides types and is written entirely in Typescript. It provides both ESM and CommonJS outputs.
Usage
Import ulid
to generate new ULIDs:
import { ulid } from "ulidx";
ulid();
Time seed
You can also provide a time seed which will consistently give you the same string for the time component.
This is useful for migrating to ulid.
ulid(1469918176385);
Monotonic ULID factory
To generate monotonically increasing ULIDs, create a monotonic counter using the factory:
import { monotonicFactory } from "ulidx";
const ulid = monotonicFactory();
ulid(150000);
ulid(150000);
ulid(150000);
ulid(150000);
ulid(150000);
ulid(100000);
Decode ULID Time
Import decodeTime
to extract the timestamp embedded in a ULID:
import { decodeTime } from "ulidx";
decodeTime("01ARYZ6S41TSV4RRFFQ69G5FAV");
Validate ULID
Import isValid
to check if a string is a valid ULID:
import { isValid } from "ulidx";
isValid("01ARYZ6S41TSV4RRFFQ69G5FAV");
isValid("01ARYZ6S41TSV4RRFFQ69G5FA");
Crockford's Base32 (Typos tolerance and Hyphened ULIDs)
Import fixULIDBase32
to fix typos and remove hyphens in a ULID:
import { fixULIDBase32 } from "ulidx";
fixULIDBase32("oLARYZ6-S41TSV4RRF-FQ69G5FAV");
Pseudo-Random Number Generation (PRNG)
ulidx
will attempt to locate a suitable cryptographically-secure random number generator in the environment where it's loaded. On NodeJS this will be crypto.randomBytes
and in the browser it will be crypto.getRandomValues
.
Math.random()
is not supported: The environment must have a suitable crypto random number generator.
Compatibility
ulidx
is compatible with the following environments:
- NodeJS 16 and up
- Browsers with working
crypto
/ msCrypto
libraries
- React-Native ¹
ulidx
is not compatible with Cloudflare Workers due to their problematic stance on getting the current time.
¹ React-Native is supported if crypto.getRandomValues()
is polyfilled. react-native-get-random-values
is one such library that should work well with ulidx
. It should be imported before ulidx
is used.
Web
ulidx
is not currently bundled for web - you can do this yourself using a tool like Webpack or Rollup. You should absolutely disable polyfills for crypto
in this case, as ulidx
will use the built-in crypto
global API rather than any polyfilled crypto anyway. Including a polyfill for crypto will just bloat your application.