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, "~> 0.5.0"}
]
end
The 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: :binary_id}
@foreign_key_type TypeID
# ...
end
TypeID
s can be stored as either :string
or :binary_id
. :string
will
store the entire TypeID including the prefix. :binary_id
stores only the
UUID portion and requires a :uuid
or :binary
column.
The type used can be set globally in the application config.
config :typeid_elixir,
default_type: :binary_id