TypeIDs are a modern, type-safe, globally unique identifier based on the upcoming UUIDv7 standard. They provide a ton of nice properties that make them a great choice as the primary identifiers for your data in a database, APIs, and distributed systems. Read more about TypeIDs in their spec.
The package can be installed from hex by adding typeid_elixir to your list of dependencies in mix.exs:
def deps do
[
{:typeid_elixir, "~> 1.0"}
]
endThe original TypeID spec is defined here.
TypeID implements the Ecto.ParameterizedType behaviour so you can use
TypeIDs as fields in your Ecto schemas.
defmodule MyApp.Accounts.User do
use Ecto.Schema
@primary_key {:id, TypeID, autogenerate: true, prefix: "acct", type: :uuid}
@foreign_key_type TypeID
# ...
endTypeIDs can be stored as either :string or :uuid. :string will store
the entire TypeID including the prefix. :uuid stores only the UUID portion
and requires a :uuid or :uuid column.
The type used can be set globally in the application config.
config :typeid_elixir,
default_type: :uuid