snowflake · 64-bit · twitter · local

Mint Snowflake IDs like Twitter

Twitter-style 64-bit time-sortable IDs: 41 bits millisecond timestamp + 10 bits worker + 12 bits sequence. Runs entirely in your browser.

Snowflake ID Generator
Count
0
10 requested
Worker
1
0–1023
Output
0 B
idle
Status
—
epoch: 2010
Count:
input · options
Worker ID (0–1023)

Bit layout: 41 ms timestamp · 10 worker · 12 sequence. Epoch: 2010-11-04 UTC.

Up to 4096 IDs per worker per millisecond before sequence overflow. Worker IDs must be globally unique across your fleet.

output · snowflake (0)

Click Generate to mint Snowflake IDs

Quick Start

How to mint Snowflake IDs

The 64-bit value packs (in MSB order) 41 bits of millisecond timestamp, 10 bits of worker ID, then 12 bits of sequence. Twitter's epoch is 2010-11-04T01:42:54.657Z.

  1. 01

    Assign a worker ID

    0–1023. Must be globally unique across your fleet to prevent collisions.

    Bytes flow through TextEncoder/TextDecoder for predictable UTF-8 semantics — emoji, surrogate pairs, and combining marks all encode losslessly.

    workerUTF-8TextEncoderlosslesslive
    worker · raw bytes1 · UTF-8
    10 bits → 1024 nodes
    loaded · UTF-8MIME · ready
  2. 02

    Generate in bulk

    4096 IDs per worker per millisecond before the sequence rolls over.

    Hash and signature operations call crypto.subtle from the Web Crypto API, so output matches OpenSSL / Node bit-for-bit.

    bulkWeb Cryptosubtledeterministiclive
    rate · options4096/ms · live
    12 bits = 4096
    options applied · livelive
  3. 03

    Sortable by time

    The timestamp is the most significant chunk — sort lexicographically and they sort by time.

    Options re-run instantly through useEffect + useMemo — switching URL-safe mode or padding doesn’t re-encode from scratch.

    sortablememoisedoptionsinstantreactive
    order · encodedasc · ready
    time | worker | seq
    encoded · livelossless
  4. 04

    Copy or download

    Copy all or download as .txt.

    Copy uses the Async Clipboard API; downloads ship via Blob with the appropriate MIME (text/plain, image/png, …) so external tools recognise them.

    exportclipboardblobMIME-correctclient-side
    ok · copiedready · done
    Copied
    shipped · ready to shipsuccess
Pro tips

Encoding without surprises

Always UTF-8 first

Use TextEncoder / TextDecoder for bytes ↔ string conversion. btoa alone breaks on non-ASCII.

URL-safe vs standard Base64

Standard uses +, /, =; URL-safe swaps to -, _, no padding. Don’t mix them.

Hashes aren’t passwords

SHA-256 is fast; that’s good for fingerprints, bad for passwords. Use bcrypt / argon2 for credentials.

Watch padding rules

Some decoders are strict about = padding, others auto-pad. If round-trips fail at exactly 1 or 2 bytes, check padding.

Use Web Crypto for keys

Generate cryptographic keys via crypto.subtle, never Math.random. The latter is predictable.

JWT decode ≠ verify

Decoding a JWT just splits and base64-decodes. Verification needs the issuer’s public key / shared secret.

Use Cases

When to use Snowflake IDs

Distributed counters, social media-style numeric IDs.

Tweet-style numeric IDs

Sortable 64-bit integers that fit in a BIGINT. Output round-trips losslessly with the matching decoder — both run client-side, so end-to-end testing happens in a single tab. Encoding flows through TextEncoder for predictable UTF-8 semantics.

RFC-compliant

High-throughput inserts

Each worker mints up to 4M IDs/sec. Web Crypto's subtle.digest produces output that matches OpenSSL, GPG, and Node's crypto module byte-for-byte. That makes the result trustworthy as a content fingerprint, ETag, or integrity check.

OpenSSL-matched

Multi-shard primary keys

Worker ID baked into the value — no central allocator. Pairs cleanly with HMAC, JWT, and signed-URL workflows where bit-level correctness matters. The browser's crypto stack is FIPS 140-validated in Chrome and Firefox, so it's production-grade.

lossless

Event sequencing

Sortable by time without an extra column. Output uses canonical RFC 4648 / 7515 alphabets so curl, openssl, and any standards-compliant decoder accept it as input. URL-safe variants drop padding for tokens that travel in query strings.

byte-identical

Idempotency tokens

Tiny, sortable, generated everywhere. Heavy hashing runs through useMemo so large inputs don't block typing. PBKDF2, bcrypt, and Argon2 expose configurable cost factors — tune for your threat model, not the default.

spec-grade

Discord/Twitter compat

Drop-in for any 64-bit Snowflake consumer. Same input plus same options always yields identical bytes. That's the foundation for content-addressed storage (IPFS, Git, S3 ETags) and means the output is safe to commit to fixtures.

production-ready
FAQ

Frequently asked questions

It gives ~69 years of room from 2010 before the timestamp wraps. You can change it for a custom service if you control consumers.
Workers must have unique IDs. Within a worker, the sequence increments inside the same millisecond — never repeats.
The generator busy-waits for the next millisecond. In practice this is rare unless you're saturating a single worker.
Strongly recommended. Clock skew between workers can produce out-of-order IDs (still unique, just not perfectly time-sorted).
No. Snowflake IDs are generated locally in your browser — nothing leaves the device, all runs locally.
Suggest a tool

Something missing?

Tell us what you need. We ship the top requests every two weeks.

Sent straight to the maintainers · no account needed
47 in queue·8 shipped this month
Request queued. Thanks!