Configuration

View Source

Every option below can be set globally under config :uxid, ... and, except where noted, overridden per call or per Ecto field. Per-call options always win over global config.

KeyDefaultPurpose
:case:lowerDefault case of generated IDs (:lower or :upper).
:delimiter"_"Character joining prefix and body. Must not appear in a Base32 body ("_" or "-").
:min_sizenilFloor that upgrades any smaller requested size. Off when nil.
:compact_small_timesfalseAuto-enable compact time for :xs/:xsmall/:s/:small.
:monotonicfalseGlobal monotonic policy: true, false, or a list of sizes.

:case

Controls the default case for generated UXIDs. Lowercase by default; uppercase matches earlier UXID versions.

# config/config.exs
config :uxid, case: :upper

UXID.generate!()               # => "01EMDGJF0DQXQJ8FM78XE97Y3H"
UXID.generate!(case: :lower)   # => "01emdgjf0dqxqj8fm78xe97y3h"  (per-call override)

:delimiter

The character placed between the prefix and the body. It must be a character that cannot appear in a Crockford Base32 body — "_" (the default) or "-" — so that prefix parsing stays unambiguous. An underscore keeps double-click-to-select working. Override per call with delimiter:; a UXID.Registry sets it per registry with delimiter:.

:min_size

Enforces a minimum size regardless of what is requested. Useful in test environments where rapid ID generation can cause duplicate-key violations at small sizes. Any requested size below the floor is upgraded; larger sizes are untouched.

# config/test.exs
config :uxid, min_size: :medium

UXID.generate!(prefix: "usr", size: :small)   # => an 18-char (:medium) body in test

:compact_small_times

Global policy that enables compact time for the small sizes (:xs/:xsmall/:s/:small), trading 8 bits of timestamp for 8 bits of randomness. Override per call or per field with compact_time: true | false.

# config/test.exs
config :uxid, compact_small_times: true

UXID.generate!(size: :small)                    # compact (13-char body)
UXID.generate!(size: :small, compact_time: false) # opt back out for this call
UXID.generate!(size: :large, compact_time: true)  # opt in for a size the policy skips

:monotonic

Global monotonic policy. Accepts true (all sizes), false, or a list of sizes (alias-aware — [:small] matches both :small and :s). Override per call or per field with monotonic:. See the Monotonic IDs guide for the guarantee and its security tradeoff.

# config/config.exs
config :uxid, monotonic: [:small, :medium]

UXID.generate!(size: :small)                  # monotonic (matches policy)
UXID.generate!(size: :small, monotonic: false) # opt out for this call