Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

slugid

taskcluster156.3kMIT5.0.1TypeScript support: included

URL-safe base64 UUID encoder for generating 22 character slugs

readme

slugid - Compressed UUIDs for Node.js

A node.js module for generating v4 UUIDs and encoding them into 22 character URL-safe base64 slug representation (see RFC 4648 sec. 5).

Slugs are url-safe base64 encoded v4 uuids, stripped of base64 = padding. They are generated with the uuid package which is careful to use a cryptographically strong random number generator on platforms that make one available.

There are two methods for generating slugs - slugid.v4() and slugid.nice().

The slugid.v4() method returns a slug from a randomly generated v4 uuid. The slugid.nice() method returns a v4 slug which conforms to a set of "nice" properties. At the moment the only "nice" property is that the slug starts with [A-Za-f], which in turn implies that the first (most significant) but of its associated uuid is set to 0.

The purpose of the slugid.nice() method is to support having slugids which can be used in more contexts safely. Regular slugids can safely be used in urls, and for example in AMQP routing keys. However, slugs beginning with - may cause problems when used as command line parameters.

In contrast, slugids generated by the slugid.nice() method can safely be used as command line parameters. This comes at a cost to entropy (121 bits vs 122 bits for regular v4 slugs).

Slug consumers should consider carefully which of these two slug generation methods to call. Is it more important to have maximum entropy, or to have slugids that do not need special treatment when used as command line parameters? This is especially important if you are providing a service which supplies slugs to unexpecting tool developers downstream, who may not realise the risks of using your regular v4 slugs as command line parameters, especially since this would arise only as an intermittent issue (one time in 64).

Generated slugs take the form [A-Za-z0-9_-]{22}, or more precisely:

  • slugid.v4() slugs conform to [A-Za-z0-9_-]{8}[Q-T][A-Za-z0-9_-][CGKOSWaeimquy26-][A-Za-z0-9_-]{10}[AQgw]

  • slugid.nice() slugs conform to [A-Za-f][A-Za-z0-9_-]{7}[Q-T][A-Za-z0-9_-][CGKOSWaeimquy26-][A-Za-z0-9_-]{10}[AQgw]

RFC 4122 defines the setting of 6 bits of the v4 UUID which determines these regular expressions.

const slugid = require('slugid');

// Generate "nice" URL-safe base64 encoded UUID version 4 (random)
const slug = slugid.nice(); // a8_YezW8T7e1jLxG7evy-A

Encode / Decode

const slugid = require('slugid');

// Generate URL-safe base64 encoded UUID version 4 (random)
const slug = slugid.v4();

// Get UUID on the form xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
const uuid = slugid.decode(slug);

// Compress to slug again
assert(slug == slugid.encode(uuid));

License

The slugid library is released on the MIT license, see the LICENSE for complete license.

changelog

Changelog for slugid

v3.1.0 (2022-09-05)

v3.0.0 (2021-08-06)

  • Drop support for node 4 (Node v6.17.1 is the earliest tested release)
  • Add support for node 12, 14, and 16
  • Remove unmaintained uuid-parse
  • Update to uuid 8.3.2, which now includes UUID parsing functions (again)
  • Use Buffer.from(bytes) instead of the insecure new Buffer(bytes)
  • Switch from TravisCI to Taskcluster for testing pull requests
  • Add Code of Conduct, Contributing Guide, and Changelog

v2.0.0 (2018-05-07)

  • Drop support for node 0.10, 0.11
  • Add support for node 4, 6, 8, and 10
  • Update to uuid 3.2.1
  • Add uuid-parse 1.0.0 to parse UUIDs (instead of uuid)

v1.1.0 (2015-08-27)

  • Add slugid.nice(), which ensures the first letter of the slug begins with a letter, allowing it to be used in more contexts
  • Update to uuid 2.0.1

v1.0.3 (2014-10-06)

  • Remove extra files not needed for the browser variant built with Browserify

v1.0.2 (2014-08-19)

  • Add a variant that runs in a browser using Browserify 5.9.1

v1.0.1 (2014-03-28)

  • Add index.js with proper exports.

v1.0.0 (2014-03-27)

  • Initial release of code ported from Taskcluster