Collision-resistant ids, in Elixir
Latest commit bdc076d May 4, 2015 @duailibe reorganizing
Failed to load latest commit information.
config initial commit May 2, 2015
lib reorganizing May 4, 2015
test using GenServer + docs May 3, 2015
.gitignore 0.1.0 May 3, 2015
LICENSE initial commit May 2, 2015 0.1.0 May 3, 2015
mix.exs 0.1.0 May 3, 2015
mix.lock 0.1.0 May 3, 2015


Collision-resistant ids optimized for horizontal scaling and sequential lookup performance, written in Elixir.

For full rationale behind CUIDs refer to the main project site.


Add Cuid as a dependency in your mix.exs file:

defp deps do:
    [{:cuid, "~> 0.1.0"}]

Run mix deps.get to fetch and compile Cuid. It works as a process

{:ok, pid} = Cuid.start_link
Cuid.generate(pid)  # => ch72gsb320000udocl363eofy

Each CUID is made by the following groups: c - h72gsb32 - 0000 - udoc - l363eofy

  • c identifies this as a cuid, and allows you to use it in html entity ids. The fixed value helps keep the ids sequential.
  • h72gsb32 is a timestamp
  • 0000 is a counter
  • udoc is a fingerprint. The first two characters are based on the process ID and the next two are based on the hostname. This is the same method used in the Node implementation
  • l363eofy random (uses :random.uniform)


  • Optimize (it takes 15s to run 200000 generations in my MBP)