Have ideas to improve npm?Join in the discussion! »


0.2.1 • Public • Published


A tiny, secure, URL-friendly, unique string ID generator for ReasonML/OCaml, inspired by ai/nanoid.

open NanoId
let id = nanoid(); // "V1StGXR8_Z5jdHi6B-myT"W

Why re-nanoid?

Fast. It's 16% faster than UUID package.

Safe. It uses cryptographically strong random APIs and guarantees a proper distribution of symbols.

Compact. It uses a larger alphabet than UUID (A-Za-z0-9_-) and has a similar number of unique IDs in just 21 symbols instead of 36.

See ai/nanoid's excellent documentation for more background about random identifier generation and comparisons with UUID v4.



$ yarn add @dylanirlbeck/re-nanoid

Then add @dylanirlbeck/re-nanoid to your bs-dependencies in bsconfig.json

   "bs-dependencies": ["@dylanirlbeck/re-nanoid"]


Coming soon...


As of now, the following examples work for BuckleScript. The Native library will be released soon.


The main module uses URL-friendly symbols (A-Za-z0-9_-) and returns an ID with 21 characters by default, though this size is variable (see below).

open NanoId;
let id = nanoid(); // "V1StGXR8_Z5jdHi6B-myT"

If you want to reduce the ID size (and increase collision probability), you can pass the size as an argument. You can also increase the ID size (to a maximum of 36).

open NanoId;
let id = nanoid(~size=10, ()); // "1s_t232nj_"

Custom length or alphabet

Likewise, if you want to use a different alphabet, you can use the customAlphabet function. Note that this function also takes a size parameter.

open NanoId;
let alphabet = "#$@jasssfaª•¶";
let size = 7;
let nanoid = customAlphabet(~size, ~alphabet, ());
let id = nanoid(); // "jfa##$·"

Note the use of the () as the last parameter of the function call.

Custom random bytes generator

Note that this function might not work yet.

customRandom allows you to create a nanoid and replace the default random bytes generator.

open NanoId;
let rbg = size: int => {
  // Put generator logic here
let nanoid = customRandom(~alphabet="abcdef", ~size=10, rbg, ());
let id = nanoid(); // "fbaefaadeb"


Pull requests are welcome!


BucklesScript - Jest

In order to run the tests as they stand currently, open a new terminal window and run yarn watch to re-compile upon Reason file changes. In yet another window, run yarn test to watch for changes to compiled files and re-run the tests if changes are detected.

Native - Rely

Native tests do not yet exist, but they should be present soon.


re-nanoid is MIT licensed.


This library was born out of a project at HackIllinois 2020. See our Devpost submission here!


npm i @dylanirlbeck/re-nanoid

DownloadsWeekly Downloads






Unpacked Size

240 kB

Total Files


Last publish


  • avatar