Skip to content
Generate RFC-compliant UUIDs in JavaScript
JavaScript Shell
Branch: master
Clone or download
ctavan fix: add deep-require proxies for local testing and adjust tests (#365)
* fix: add deep-require proxies for local testing

In the examples we reference the .local/ directory as local module. It
should match the structure

* docs: remove deprecated deep requires from examples
Latest commit 7fedc79 Feb 17, 2020
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github/workflows build: replace bundlesize with bundlewatch Feb 10, 2020
.local fix: add deep-require proxies for local testing and adjust tests (#365) Feb 17, 2020
examples fix: add deep-require proxies for local testing and adjust tests (#365) Feb 17, 2020
scripts feat: add UMD build to npm package (#357) Jan 27, 2020
src feat: remove insecure fallback random number generator Jan 27, 2020
test docs: deprecated deep requiring of the different algorithm versions (#… Feb 13, 2020
.babelrc.js chore: install prettier Dec 3, 2019
.eslintignore chore: run eslint on examples as well Dec 3, 2019
.eslintrc.json test: add browser tests for webpack and rollup builds Jan 15, 2020
.gitignore chore: remove editor/os specific gitignore rules Feb 10, 2020
.npmrc chore: transition dev dependencies to exact versions Jan 21, 2020
.prettierignore chore: install prettier Dec 3, 2019
AUTHORS import defunctzombie/uuid fork @ version 2.0.3 Nov 18, 2016
CHANGELOG.md docs: fix changelog Jan 20, 2020
CONTRIBUTING.md build: set up and document build and release scripts Jan 21, 2020
LICENSE.md update license.md Nov 18, 2016
README.md docs: prefer esmodule import syntax in README (#363) Feb 17, 2020
README_js.md docs: prefer esmodule import syntax in README (#363) Feb 17, 2020
bundlewatch.config.json build: replace bundlesize with bundlewatch Feb 10, 2020
package-lock.json chore: upgrade all devDependencies (#366) Feb 17, 2020
package.json chore: upgrade all devDependencies (#366) Feb 17, 2020
prettier.config.js chore: install prettier Dec 3, 2019
rollup.config.js feat: add UMD build to npm package (#357) Jan 27, 2020
v1.js docs: deprecated deep requiring of the different algorithm versions (#… Feb 13, 2020
v3.js docs: deprecated deep requiring of the different algorithm versions (#… Feb 13, 2020
v4.js docs: deprecated deep requiring of the different algorithm versions (#… Feb 13, 2020
v5.js docs: deprecated deep requiring of the different algorithm versions (#… Feb 13, 2020

README.md

uuid Build Status

Simple, fast generation of RFC4122 UUIDs.

Features:

  • Support for version 1, 3, 4 and 5 UUIDs
  • Cross-platform: CommonJS build for Node.js and ECMAScript Modules for the browser.
  • Uses cryptographically-strong random number APIs
  • Zero-dependency, small footprint

⚠️⚠️⚠️ This is the README of the upcoming major version of this library. You can still access the README of the current stable version. ⚠️⚠️⚠️

Upgrading from v3.x of this Module

In v3.x of this library we were promoting the use of deep requires to reduce bundlesize for browser builds:

const uuidv4 = require('uuid/v4');
uuidv4();

As of v7.x this library has been converted to ECMAScript Modules and deep requires are now deprecated and may be removed in a future major version of this library.

Since all modern bundlers like rollup or Webpack support tree-shaking for ECMAScript Modules out of the box we now encourage you to use modern import syntax instead, see ECMAScript Modules / ESM:

import { v4 as uuidv4 } from 'uuid';
uuidv4();

For use as CommonJS module with Node.js you can use:

const { v4: uuidv4 } = require('uuid');
uuidv4();

Quickstart - Node.js/CommonJS

npm install uuid

Then generate a random UUID (v4 algorithm), which is almost always what you want ...

Version 4 (random):

import { v4 as uuidv4 } from 'uuid';
uuidv4(); // ⇨ '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d'

Or generate UUIDs with other algorithms of your choice ...

Version 1 (timestamp):

import { v1 as uuidv1 } from 'uuid';
uuidv1(); // ⇨ '2c5ea4c0-4067-11e9-8b2d-1b9d6bcdbbfd'

Version 3 (namespace):

import { v3 as uuidv3 } from 'uuid';

// ... using predefined DNS namespace (for domain names)
uuidv3('hello.example.com', uuidv3.DNS); // ⇨ '9125a8dc-52ee-365b-a5aa-81b0b3681cf6'

// ... using predefined URL namespace (for, well, URLs)
uuidv3('http://example.com/hello', uuidv3.URL); // ⇨ 'c6235813-3ba4-3801-ae84-e0a6ebb7d138'

// ... using a custom namespace
//
// Note: Custom namespaces should be a UUID string specific to your application!
// E.g. the one here was generated using this modules `uuid` CLI.
const MY_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341';
uuidv3('Hello, World!', MY_NAMESPACE); // ⇨ 'e8b5a51d-11c8-3310-a6ab-367563f20686'

Version 5 (namespace):

import { v5 as uuidv5 } from 'uuid';

// ... using predefined DNS namespace (for domain names)
uuidv5('hello.example.com', uuidv5.DNS); // ⇨ 'fdda765f-fc57-5604-a269-52a7df8164ec'

// ... using predefined URL namespace (for, well, URLs)
uuidv5('http://example.com/hello', uuidv5.URL); // ⇨ '3bbcee75-cecc-5b56-8031-b6641c1ed1f1'

// ... using a custom namespace
//
// Note: Custom namespaces should be a UUID string specific to your application!
// E.g. the one here was generated using this modules `uuid` CLI.
const MY_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341';
uuidv5('Hello, World!', MY_NAMESPACE); // ⇨ '630eb68f-e0fa-5ecc-887a-7c7a62614681'

Supported Platforms

  • Node.js: All LTS, i.e. 8.x, 10.x, 12.x
  • Browsers (with bundlers like webpack/rollup):
    • Chrome: >= 49
    • Safari: >= 10
    • Firefox: >= 44
    • Edge: >= 15
    • IE: 11

ECMAScript Modules / ESM

For usage in the browser uuid provides support for ECMAScript Modules (ESM) that enable tree-shaking for bundlers, like rollup.js (example) and webpack (example).

import { v4 as uuidv4 } from 'uuid';
uuidv4(); // ⇨ '1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed'

There is experimental native ESM support for the browser but it should not be considered ready for production use and may change or disappear in future releases.

To run the examples you must first create a dist build of this library in the module root:

npm run build

API

Version 4 (Random)

import { v4 as uuidv4 } from 'uuid';

// Incantations
uuidv4();
uuidv4(options);
uuidv4(options, buffer, offset);

Generate and return a RFC4122 v4 UUID.

  • options - (Object) Optional uuid state to apply. Properties may include:
    • random - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values. Takes precedence over options.rng.
    • rng - (Function) Random # generator function that returns an Array[16] of byte values (0-255). Alternative to options.random.
  • buffer - (Array | Buffer) Array or buffer where UUID bytes are to be written.
  • offset - (Number) Starting index in buffer at which to begin writing.

Returns buffer, if specified, otherwise the string form of the UUID

Example: Generate string UUID with predefined random values

const v4options = {
  random: [
    0x10,
    0x91,
    0x56,
    0xbe,
    0xc4,
    0xfb,
    0xc1,
    0xea,
    0x71,
    0xb4,
    0xef,
    0xe1,
    0x67,
    0x1c,
    0x58,
    0x36,
  ],
};
uuidv4(v4options); // ⇨ '109156be-c4fb-41ea-b1b4-efe1671c5836'

Example: Generate two IDs in a single buffer

const buffer = new Array();
uuidv4(null, buffer, 0); //
  // [
  //   155, 29, 235,  77,  59,
  //   125, 75, 173, 155, 221,
  //    43, 13, 123,  61, 203,
  //   109
  // ]
uuidv4(null, buffer, 16); //
  // [
  //   155,  29, 235,  77,  59, 125,  75, 173,
  //   155, 221,  43,  13, 123,  61, 203, 109,
  //    27, 157, 107, 205, 187, 253,  75,  45,
  //   155,  93, 171, 141, 251, 189,  75, 237
  // ]

Version 1 (Timestamp + Node)

⚠️⚠️⚠️ Please make sure to check whether you really need the timestamp properties of Version 1 UUIDs before using them. In many cases, Version 4 random UUIDs are the better choice. This FAQ covers more details. ⚠️⚠️⚠️

import { v1 as uuidv1 } from 'uuid';

// Incantations
uuidv1();
uuidv1(options);
uuidv1(options, buffer, offset);

Generate and return a RFC4122 v1 (timestamp-based) UUID.

  • options - (Object) Optional uuid state to apply. Properties may include:
    • node - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1.
    • clockseq - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used.
    • msecs - (Number) Time in milliseconds since unix Epoch. Default: The current time is used.
    • nsecs - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if msecs is unspecified. Default: internal uuid counter is used, as per 4.2.1.2.
    • random - (Number[16]) Array of 16 numbers (0-255) to use for initialization of node and clockseq as described above. Takes precedence over options.rng.
    • rng - (Function) Random # generator function that returns an Array[16] of byte values (0-255). Alternative to options.random.
  • buffer - (Array | Buffer) Array or buffer where UUID bytes are to be written.
  • offset - (Number) Starting index in buffer at which to begin writing.

Returns buffer, if specified, otherwise the string form of the UUID

Note: The default node id (the last 12 digits in the UUID) is generated once, randomly, on process startup, and then remains unchanged for the duration of the process.

Example: Generate string UUID with fully-specified options

const v1options = {
  node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab],
  clockseq: 0x1234,
  msecs: new Date('2011-11-01').getTime(),
  nsecs: 5678,
};
uuidv1(v1options); // ⇨ '710b962e-041c-11e1-9234-0123456789ab'

Example: In-place generation of two binary IDs

// Generate two ids in an array
const arr = new Array();
uuidv1(null, arr, 0); //
  // [
  //    44,  94, 164, 192,  64,
  //   103,  17, 233, 146,  52,
  //    27, 157, 107, 205, 187,
  //   253
  // ]
uuidv1(null, arr, 16); //
  // [
  //    44, 94, 164, 192,  64, 103,  17, 233,
  //   146, 52,  27, 157, 107, 205, 187, 253,
  //    44, 94, 164, 193,  64, 103,  17, 233,
  //   146, 52,  27, 157, 107, 205, 187, 253
  // ]

Version 3 (Namespace)

import { v3 as uuidv3 } from 'uuid';

// Incantations
uuidv3(name, namespace);
uuidv3(name, namespace, buffer);
uuidv3(name, namespace, buffer, offset);

Generate and return a RFC4122 v3 UUID.

  • name - (String | Array[]) "name" to create UUID with
  • namespace - (String | Array[]) "namespace" UUID either as a String or Array[16] of byte values
  • buffer - (Array | Buffer) Array or buffer where UUID bytes are to be written.
  • offset - (Number) Starting index in buffer at which to begin writing. Default = 0

Returns buffer, if specified, otherwise the string form of the UUID

Example:

uuidv3('hello world', MY_NAMESPACE); // ⇨ '042ffd34-d989-321c-ad06-f60826172424'

Version 5 (Namespace)

import { v5 as uuidv5 } from 'uuid';

// Incantations
uuidv5(name, namespace);
uuidv5(name, namespace, buffer);
uuidv5(name, namespace, buffer, offset);

Generate and return a RFC4122 v5 UUID.

  • name - (String | Array[]) "name" to create UUID with
  • namespace - (String | Array[]) "namespace" UUID either as a String or Array[16] of byte values
  • buffer - (Array | Buffer) Array or buffer where UUID bytes are to be written.
  • offset - (Number) Starting index in buffer at which to begin writing. Default = 0

Returns buffer, if specified, otherwise the string form of the UUID

Example:

uuidv5('hello world', MY_NAMESPACE); // ⇨ '9f282611-e0fd-5650-8953-89c8e342da0b'

Command Line

UUIDs can be generated from the command line with the uuid command.

$ uuid
ddeb27fb-d9a0-4624-be4d-4615062daed4

$ uuid v1
02d37060-d446-11e7-a9fa-7bdae751ebe1

Type uuid --help for usage details

UMD Build

If you want to load a minified UMD build directly in the browser you can use one of the popular npm CDNs:

<script src="https://unpkg.com/uuid@latest/dist/umd/uuidv4.min.js"></script>
<script>
  alert(uuidv4());
</script>

or

<script src="https://cdn.jsdelivr.net/npm/uuid@latest/dist/umd/uuidv4.min.js"></script>
<script>
  alert(uuidv4());
</script>

Available bundles:


Markdown generated from README_js.md by RunMD Logo

You can’t perform that action at this time.