Date-relative UUIDs

Usage no npm install needed!

<script type="module">
  import druuid from 'https://cdn.skypack.dev/druuid';



Date-relative (and relatively universally unique) UUID generation.


$ npm install druuid


Druuid generates 64-bit, time-sortable IDs inspired by Snowflake and Instagram.

A druuid comprises:

  • A 41-bit timestamp (which has millisecond precision for over 69 years after a defined epoch); and

  • 23 random bits.

For example, a druuid generated at midnight on February 4, 2012, may look something like 11142943683383068069. In binary:

Timestamp Randomness
10011010101000111011000000111110000000000 01110110000010110100101

This ID can be displayed compactly in base 36: 2cnpvvfkm56ed.


  • 64-bit IDs can be stored in BIGINT database columns, which are generally more efficient to index (and index uniquely) than VARCHAR.

  • The timestamp component allows for efficient date-based queries and easy cursor-based pagination.


  • 23 bits of randomness contains much less entropy than traditional, 128-bit UUIDs, so precautions must be taken to avoid collisions between druuids generated in the same millisecond (e.g., a database constraint). The probability, within a millisecond, can be calculated with the Birthday problem (where n is the number of IDs generated per millisecond and 23 represents the number of random bits):


    IDs generated in different milliseconds cannot collide, but at a rate of 10 IDs per millisecond (10,000 IDs per second), the probability a collision will occur within any given millisecond approaches 0.000596%, which is about once every few minutes if that rate is constant.


var druuid = require('druuid');
// druuid.epoch = Date.UTC(1970, 0); // change the default (Unix) epoch

var uuid = druuid.gen();
// => <BigInt 11142943683383068069>
// => Sat Feb 04 2012 00:00:00 GMT-0800 (PST)