Skip to content
Fastest UUID with good RNG for JS
Branch: master
Clone or download
Pull request Compare This branch is 16 commits behind jchook:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
CHANGELOG
LICENSE.txt
README.md
benchmark.js
index.js
package.json
snowflake.js
test.html
test.js
uuid-random.min.js

README.md

uuid-random

Generate RFC-4122 compliant random UUIDs with better statistical dispersion than Math.random().

Install

npm install uuid-random

Features

  • 0.3k minified + gzipped
  • Uses better RNG when possible
  • Works in browser or node with zero external dependencies
  • Very fast!

Performance

This is the fastest pure javascript UUID v4 generator I have found, over 5x faster than comparable libraries. After inspecting and/or testing every JS UUID package I could find (there are a ton), these were the fastest:

npm package performance
node-uuid 370k ops/sec
portable-uuid 260k ops/sec
uuid 370k ops/sec
uuid-random 2M ops/sec

What is UUID v4?

Universally Unique IDentifiers transcend many constraints of traditional incremental integer IDs, especially in distributed systems. With version 4, we (essentially) generate a random 128-bit value.

We do sacrifice guaranteed uniqueness for extremely probable uniqueness (you would need to do-loop uuid() at max speed for 73,067 years for a 50% chance of one collision). But for that slight cost, we may now generate valid, unique, persistent IDs on any node of a distributed system (e.g. intermittently offline or high-latency clients).

Example Usage

Babel

import uuid from 'uuid-random';
uuid(); // 'f32dc9ae-7ca8-44ca-8f25-f258f7331c55'

Node

var uuid = require('uuid-random');
uuid(); // '0b99b82f-62cf-4275-88b3-de039020f14e'

Browser

<script src="uuid-random.min.js"></script>
<script>
  uuid(); // 'b96ab5e6-f1e8-4653-ab08-4dd82ea65778'
</script>

Is UUID?

uuid.test('0b99b82f-62cf-4275-88b3-de039020f14e'); // true

Rationale

Random (v4) UUIDs are often better than clock-based (v1), but Math.random() sucks for uuid generation.

After digging through npm I settled on using node-uuid to take advantage of better RNG when possible. It's a great lib, but seemed too large and featured after using that neat oneliner-ish solution. So, I combined ideas from the better implementations and researched a much faster, more focused and compact uuid generator that used the best RNG available.

This library does one thing very well: generate UUID version 4.

License

MIT

You can’t perform that action at this time.