UNPKG

12 kBMarkdownView Raw
1<!--
2 -- This file is auto-generated from README_js.md. Changes should be made there.
3 -->
4
5# uuid [![Build Status](https://github.com/uuidjs/uuid/workflows/CI/badge.svg)](https://github.com/uuidjs/uuid/actions)
6
7For the creation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDs
8
9- **Complete** - Support for RFC4122 version 1, 3, 4, and 5 UUIDs
10- **Cross-platform** - Support for ...
11 - CommonJS, [ECMAScript Modules](#ecmascript-modules) and UMD builds
12 - Node 8, 10, 12
13 - Chrome, Safari, Firefox, Edge, IE 11 browsers
14 - Webpack and rollup.js module bundlers
15- **Secure** - Cryptographically-strong random values
16- **Small** - Zero-dependency, small footprint, plays nice with "tree shaking" packagers
17- **CLI** - Includes the [`uuid` command line](#command-line) utility
18
19**Upgrading from uuid\@3?** Your code is probably okay, but check out [Upgrading
20From uuid\@3](#upgrading-from-uuid3) for details.
21
22## Quickstart - Node.js/CommonJS
23
24```shell
25npm install uuid
26```
27
28Once installed, decide which type of UUID you need. RFC4122 provides for four
29versions, all of which are supported here. In order of popularity, they are:
30
31- Version 4 (random) - Created from cryptographically-strong random values
32- Version 1 (timestamp) - Created from the system clock (plus random values)
33- Version 5 (namespace, SHA-1) - Created from user-supplied name and namespace strings
34- Version 3 (namespace, MD5) - Like version 5, above, but with a poorer hash algorithm
35
36**Unsure which one to use?** Use version 4 (random) unless you have a specific need for one of the other versions. See also [this FAQ](https://github.com/tc39/proposal-uuid#faq).
37
38### Create Version 4 (Random) UUIDs
39
40```javascript
41import { v4 as uuidv4 } from 'uuid';
42uuidv4(); // ⇨ '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d'
43```
44
45### Create Version 1 (Timestamp) UUIDs
46
47```javascript
48import { v1 as uuidv1 } from 'uuid';
49uuidv1(); // ⇨ '2c5ea4c0-4067-11e9-8b2d-1b9d6bcdbbfd'
50```
51
52### Create Version 3 or Version 5 (Namespace) UUIDs
53
54&#x26a0;&#xfe0f; Version 3 and Version 5 UUIDs are basically the same, differing
55only in the underlying hash algorithm. Note that per the RFC, "_If backward
56compatibility is not an issue, SHA-1 [Version 5] is preferred_."
57
58&#x26a0;&#xfe0f; If using a custom namespace **be sure to generate your own
59namespace UUID**. You can grab one [here](https://www.uuidgenerator.net/).
60
61```javascript
62import { v5 as uuidv5 } from 'uuid'; // For version 5
63import { v3 as uuidv3 } from 'uuid'; // For version 3
64
65// Using predefined DNS namespace (for domain names)
66uuidv5('hello.example.com', uuidv5.DNS); // ⇨ 'fdda765f-fc57-5604-a269-52a7df8164ec'
67uuidv3('hello.example.com', uuidv3.DNS); // ⇨ '9125a8dc-52ee-365b-a5aa-81b0b3681cf6'
68
69// Using predefined URL namespace (for URLs)
70uuidv5('http://example.com/hello', uuidv5.URL); // ⇨ '3bbcee75-cecc-5b56-8031-b6641c1ed1f1'
71uuidv3('http://example.com/hello', uuidv3.URL); // ⇨ 'c6235813-3ba4-3801-ae84-e0a6ebb7d138'
72
73// Using a custom namespace (See note, above, about generating your own
74// namespace UUID)
75const MY_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341';
76uuidv5('Hello, World!', MY_NAMESPACE); // ⇨ '630eb68f-e0fa-5ecc-887a-7c7a62614681'
77uuidv3('Hello, World!', MY_NAMESPACE); // ⇨ 'e8b5a51d-11c8-3310-a6ab-367563f20686'
78```
79
80## API
81
82### Version 4 (Random)
83
84```javascript
85import { v4 as uuidv4 } from 'uuid';
86
87// Incantations
88uuidv4();
89uuidv4(options);
90uuidv4(options, buffer, offset);
91```
92
93Generate and return a RFC4122 version 4 UUID.
94
95- `options` - (Object) Optional uuid state to apply. Properties may include:
96 - `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values. Takes precedence over `options.rng`.
97 - `rng` - (Function) Random # generator function that returns an Array[16] of byte values (0-255). Alternative to `options.random`.
98- `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.
99- `offset` - (Number) Starting index in `buffer` at which to begin writing.
100
101Returns `buffer`, if specified, otherwise the string form of the UUID
102
103Example: Generate string UUID with predefined `random` values
104
105```javascript
106const v4options = {
107 random: [
108 0x10,
109 0x91,
110 0x56,
111 0xbe,
112 0xc4,
113 0xfb,
114 0xc1,
115 0xea,
116 0x71,
117 0xb4,
118 0xef,
119 0xe1,
120 0x67,
121 0x1c,
122 0x58,
123 0x36,
124 ],
125};
126uuidv4(v4options); // ⇨ '109156be-c4fb-41ea-b1b4-efe1671c5836'
127```
128
129Example: Generate two IDs in a single buffer
130
131```javascript
132const buffer = new Array();
133uuidv4(null, buffer, 0); // ⇨
134 // [
135 // 155, 29, 235, 77, 59,
136 // 125, 75, 173, 155, 221,
137 // 43, 13, 123, 61, 203,
138 // 109
139 // ]
140uuidv4(null, buffer, 16); // ⇨
141 // [
142 // 155, 29, 235, 77, 59, 125, 75, 173,
143 // 155, 221, 43, 13, 123, 61, 203, 109,
144 // 27, 157, 107, 205, 187, 253, 75, 45,
145 // 155, 93, 171, 141, 251, 189, 75, 237
146 // ]
147```
148
149### Version 1 (Timestamp)
150
151```javascript
152import { v1 as uuidv1 } from 'uuid';
153
154// Incantations
155uuidv1();
156uuidv1(options);
157uuidv1(options, buffer, offset);
158```
159
160Generate and return a RFC4122 version 1 (timestamp) UUID.
161
162- `options` - (Object) Optional uuid state to apply. Properties may include:
163 - `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1.
164 - `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used.
165 - `msecs` - (Number) Time in milliseconds since unix Epoch. Default: The current time is used.
166 - `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.
167 - `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`.
168 - `rng` - (Function) Random # generator function that returns an Array[16] of byte values (0-255). Alternative to `options.random`.
169- `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.
170- `offset` - (Number) Starting index in `buffer` at which to begin writing.
171
172Returns `buffer`, if specified, otherwise the string form of the UUID
173
174Note: The default [node id](https://tools.ietf.org/html/rfc4122#section-4.1.6) (the last 12 digits in the UUID) is generated once, randomly, on process startup, and then remains unchanged for the duration of the process.
175
176Example: Generate string UUID with fully-specified options
177
178```javascript
179const v1options = {
180 node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab],
181 clockseq: 0x1234,
182 msecs: new Date('2011-11-01').getTime(),
183 nsecs: 5678,
184};
185uuidv1(v1options); // ⇨ '710b962e-041c-11e1-9234-0123456789ab'
186```
187
188Example: In-place generation of two binary IDs
189
190```javascript
191// Generate two ids in an array
192const arr = new Array();
193uuidv1(null, arr, 0); // ⇨
194 // [
195 // 44, 94, 164, 192, 64,
196 // 103, 17, 233, 146, 52,
197 // 27, 157, 107, 205, 187,
198 // 253
199 // ]
200uuidv1(null, arr, 16); // ⇨
201 // [
202 // 44, 94, 164, 192, 64, 103, 17, 233,
203 // 146, 52, 27, 157, 107, 205, 187, 253,
204 // 44, 94, 164, 193, 64, 103, 17, 233,
205 // 146, 52, 27, 157, 107, 205, 187, 253
206 // ]
207```
208
209### Version 5 (Namespace)
210
211```javascript
212import { v5 as uuidv5 } from 'uuid';
213
214// Incantations
215uuidv5(name, namespace);
216uuidv5(name, namespace, buffer);
217uuidv5(name, namespace, buffer, offset);
218```
219
220Generate and return a RFC4122 version 5 UUID.
221
222- `name` - (String | Array[]) "name" to create UUID with
223- `namespace` - (String | Array[]) "namespace" UUID either as a String or Array[16] of byte values
224- `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.
225- `offset` - (Number) Starting index in `buffer` at which to begin writing. Default = 0
226
227Returns `buffer`, if specified, otherwise the string form of the UUID
228
229Example:
230
231```javascript
232uuidv5('hello world', MY_NAMESPACE); // ⇨ '9f282611-e0fd-5650-8953-89c8e342da0b'
233```
234
235### Version 3 (Namespace)
236
237&#x26a0;&#xfe0f; Note: Per the RFC, "_If backward compatibility is not an issue, SHA-1 [Version 5] is preferred_."
238
239```javascript
240import { v3 as uuidv3 } from 'uuid';
241
242// Incantations
243uuidv3(name, namespace);
244uuidv3(name, namespace, buffer);
245uuidv3(name, namespace, buffer, offset);
246```
247
248Generate and return a RFC4122 version 3 UUID.
249
250- `name` - (String | Array[]) "name" to create UUID with
251- `namespace` - (String | Array[]) "namespace" UUID either as a String or Array[16] of byte values
252- `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.
253- `offset` - (Number) Starting index in `buffer` at which to begin writing. Default = 0
254
255Returns `buffer`, if specified, otherwise the string form of the UUID
256
257Example:
258
259```javascript
260uuidv3('hello world', MY_NAMESPACE); // ⇨ '042ffd34-d989-321c-ad06-f60826172424'
261```
262
263## Command Line
264
265UUIDs can be generated from the command line using `uuid`.
266
267```shell
268$ uuid
269ddeb27fb-d9a0-4624-be4d-4615062daed4
270```
271
272The default is to generate version 4 UUIDS, however the other versions are supported. Type `uuid --help` for details:
273
274```
275$ uuid --help
276
277Usage:
278 uuid
279 uuid v1
280 uuid v3 <name> <namespace uuid>
281 uuid v4
282 uuid v5 <name> <namespace uuid>
283 uuid --help
284
285Note: <namespace uuid> may be "URL" or "DNS" to use the corresponding UUIDs
286defined by RFC4122
287```
288
289## ECMAScript Modules
290
291For usage in the browser `uuid` provides support for [ECMAScript
292Modules](https://www.ecma-international.org/ecma-262/6.0/#sec-modules) (ESM) that enable
293tree-shaking for bundlers, like [rollup.js](https://rollupjs.org/guide/en/#tree-shaking)
294([example](./examples/browser-rollup/)) and [webpack](https://webpack.js.org/guides/tree-shaking/)
295([example](./examples/browser-webpack/)).
296
297```javascript
298import { v4 as uuidv4 } from 'uuid';
299uuidv4(); // ⇨ '1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed'
300```
301
302There is experimental native ESM support for [the browser](./examples/browser-esmodules/) but it
303should not be considered ready for production use and may change or disappear in future releases.
304
305To run the examples you must first create a dist build of this library in the module root:
306
307```
308npm run build
309```
310
311## UMD Builds
312
313If you want to load a minified UMD build directly in the browser you can use one of the popular npm
314CDNs:
315
316```html
317<script src="https://unpkg.com/uuid@latest/dist/umd/uuidv4.min.js"></script>
318<script>
319 alert(uuidv4());
320</script>
321```
322
323or
324
325```html
326<script src="https://cdn.jsdelivr.net/npm/uuid@latest/dist/umd/uuidv4.min.js"></script>
327<script>
328 alert(uuidv4());
329</script>
330```
331
332Available bundles:
333
334- https://unpkg.com/uuid@latest/dist/umd/
335- https://cdn.jsdelivr.net/npm/uuid@latest/dist/umd/
336
337## Upgrading From uuid\@3
338
339"_Wait... what happened to uuid\@4 - uuid\@6?!?_"
340
341In order to avoid confusion with RFC [version 4](#version-4-random) and [version
3425](#version-5-namespace) UUIDs, and a possible [version
3436](http://gh.peabody.io/uuidv6/), releases 4 thru 6 of this module have been
344skipped. Hence, how we're now at uuid\@7.
345
346### Deep Requires Now Deprecated
347
348uuid\@3 encouraged the use of deep requires to minimize the bundle size of
349browser builds:
350
351```javascript
352const uuidv4 = require('uuid/v4'); // <== NOW DEPRECATED!
353uuidv4();
354```
355
356As of uuid\@7 this library now provides ECMAScript modules builds, which allow
357packagers like Webpack and Rollup to do "tree-shaking" to remove dead code.
358Instead, use the `import` syntax:
359
360```javascript
361import { v4 as uuidv4 } from 'uuid';
362uuidv4();
363```
364
365... or for CommonJS:
366
367```javascript
368const { v4: uuidv4 } = require('uuid');
369uuidv4();
370```
371
372### Default Export Removed
373
374uuid\@3 was exporting the Version 4 UUID method as a default export:
375
376```javascript
377const uuid = require('uuid'); // <== REMOVED!
378```
379
380This usage pattern was already discouraged in uuid\@3 and has been removed in uuid\@7.
381
382----
383Markdown generated from [README_js.md](README_js.md) by [![RunMD Logo](http://i.imgur.com/h0FVyzU.png)](https://github.com/broofa/runmd)
\No newline at end of file