O que é ULID e como usar em seus projetos

Se você trabalha com desenvolvimento de software, banco de dados ou arquitetura de sistemas, já deve ter esbarrado em identificadores únicos. O UUID é o mais famoso deles, mas nos últimos anos um novo formato vem ganhando espaço: o ULID. Mas o que exatamente é um ULID, por que ele foi criado e quando faz sentido usá-lo no lugar do UUID? É isso que você vai descobrir neste artigo.

O que é ULID?

ULID é a sigla para Universally Unique Lexicographically Sortable Identifier, ou seja, um identificador universalmente único que pode ser ordenado lexicograficamente. Em termos práticos, é uma sequência de 26 caracteres gerada de forma aleatória, mas com uma diferença crucial em relação ao UUID: os primeiros 10 caracteres carregam um timestamp em milissegundos.

Isso significa que, ao contrário de um UUID puro, um ULID gerado agora virá antes de um ULID gerado daqui a 5 minutos — mesmo sem precisar de um campo de data separado. Essa propriedade é chamada de ordenação natural por tempo de criação.

Exemplo visual de um identificador único sendo gerado em um sistema

A estrutura de um ULID fica assim:

  • Primeiros 10 caracteres: representam o timestamp Unix em milissegundos
  • Últimos 16 caracteres: são gerados de forma aleatória, garantindo unicidade

O alfabeto usado é o Crockford Base32, que evita caracteres ambíguos como `I`, `L`, `O` e `U`, tornando o identificador mais legível e menos propenso a erros de digitação.

ULID vs UUID: qual a diferença?

A principal diferença entre os dois formatos está na ordenabilidade. Um UUID v4 (o mais comum) é completamente aleatório — não existe relação de ordem entre dois UUIDs gerados em sequência. Já o ULID embute o momento de criação, o que traz vantagens concretas:

  • Melhor desempenho em bancos de dados: identificadores sequenciais causam menos fragmentação em índices B-tree, melhorando a performance de inserções
  • Ordenação sem campo extra: você pode ordenar registros por ID e obter a ordem cronológica de criação
  • Legibilidade maior: o ULID usa apenas letras maiúsculas e números, sem hífens — mais limpo visualmente
  • Compatibilidade com UUID: um ULID pode ser armazenado no mesmo espaço de um UUID (128 bits)

Se você ainda não conhece bem o UUID, vale a leitura do nosso artigo sobre o que é UUID e para que serve para entender melhor as bases antes de comparar os dois.

Quando usar ULID?

O ULID não é um substituto universal do UUID — cada um tem seu lugar. Use o ULID quando:

  • Você precisa de ordenação cronológica sem depender de um campo `created_at` separado
  • Está trabalhando com sistemas distribuídos onde múltiplos serviços geram IDs de forma independente
  • Quer melhorar a performance de inserções em tabelas grandes com índices
  • Precisa de um identificador que seja fácil de copiar e compartilhar sem risco de confundir caracteres

Evite o ULID se o seu sistema exige compatibilidade estrita com o formato UUID padrão (com hífens e letras minúsculas), ou se a ordenação por tempo de criação não é relevante para o seu caso de uso.

Como gerar um ULID válido

Gerar um ULID manualmente seria trabalhoso: você precisaria capturar o timestamp atual, convertê-lo para Crockford Base32 e concatenar com 80 bits aleatórios. Por isso, o ideal é usar uma ferramenta pronta.

No Geratudo, você pode usar o Gerador de ULID para criar identificadores válidos instantaneamente, sem instalar nada. Basta acessar, clicar em gerar e copiar o resultado.

Se você trabalha com testes e precisa de dados fictícios mais completos, as ferramentas de Gerador de UUID e Gerador de Pessoa também podem ser úteis no seu fluxo de desenvolvimento.

ULID em linguagens de programação

A maioria das linguagens modernas já conta com bibliotecas para gerar ULIDs:

  • JavaScript/Node.js: pacote `ulid` no npm
  • Python: biblioteca `python-ulid`
  • Go: pacote `oklog/ulid`
  • PHP: `robinvdvleuten/ulid`
  • Java: `azam/ulid4j`

A adoção é simples e, na maior parte dos casos, você substitui a chamada de geração de UUID pela equivalente de ULID sem grandes mudanças no restante do código.

Cuidados ao usar ULID

Apesar das vantagens, o ULID tem um ponto de atenção: como o timestamp está embutido no identificador, é possível inferir aproximadamente quando um registro foi criado apenas olhando para o ID. Em sistemas onde isso é sensível do ponto de vista de privacidade, avalie se essa exposição é aceitável.

Além disso, a geração de múltiplos ULIDs no mesmo milissegundo incrementa o componente aleatório de forma monotônica para garantir ordenação — o que é um comportamento esperado, mas que precisa ser tratado corretamente pelas bibliotecas.

Conclusão

O ULID é uma excelente alternativa ao UUID quando você precisa de identificadores únicos que também sejam ordenáveis por tempo de criação. Ele combina o melhor dos dois mundos: unicidade garantida e sequência cronológica natural, tudo em um formato legível e compacto.

Se você quer testar na prática, acesse agora o Gerador de ULID do Geratudo e comece a usar em seus projetos sem complicação.