As definições e, depois, a parte útil
Uma component library é um conjunto de partes de interface codificadas e reutilizáveis com APIs definidas. Um design system é o conjunto completo de decisões que governa como uma interface parece e se comporta — além dos artefatos que codificam essas decisões, sendo que um deles geralmente é uma component library.
Isso é preciso, mas levemente inútil, pois não ajuda você a identificar qual dos dois você possui. Aqui está um teste que ajuda.
O teste: entregue seu sistema a um novo engenheiro e peça para ele construir uma tela que você ainda não criou. Se tudo sobre o qual ele precise de uma decisão já estiver decidido — a densidade, a elevação, qual cinza usar para uma legenda, se aquele título pode ser negrito — você tem um design system. Se ele tiver os componentes, mas tiver que inventar o resto, você tem uma component library.
A maioria das equipes falha nesse teste e fica surpresa, porque a component library parecia ser a parte difícil. Era a parte cara. Mas não era a parte que determina se o produto tem identidade própria.
O que compõe cada um
| Component library | Design system | |
|---|---|---|
| Contém | Botão, Input, Diálogo, Tabela, suas props e variantes | Papéis de cores, escala tipográfica, escala de espaçamento, estratégia de elevação, movimento, motivos, proibições, governança |
| Responde | Como eu renderizo um botão? | Deve haver um botão aqui? Qual variante? O que deve ficar ao redor dele? |
| Formato | Código, versionado, instalável | Decisões, documentadas, além de tokens |
| Muda quando | Um componente ganha uma funcionalidade | A identidade ou o público do produto muda |
| Sem isso | Cada equipe reconstrói o mesmo botão, de forma ligeiramente diferente | Cada tela faz suas próprias escolhas de design, e elas divergem |
| O fracasso se manifesta como | Duplicação e comportamento inconsistente | Componentes consistentes organizados em um produto genérico |
Essa última linha é a que merece ser lida duas vezes. O fracasso de uma component library é visível — dois date pickers, três implementações de botões, um bug corrigido em um e não no outro. O fracasso de um design system é invisível por dentro: tudo é consistente, nada está errado e o produto poderia ser de qualquer pessoa.
Por que instalar uma biblioteca pode piorar as coisas
Aqui está a parte contraintuitiva. Adotar uma component library bem feita às vezes faz com que um produto pareça *mais* genérico, e não menos, e vale a pena entender o mecanismo em vez de culpar a biblioteca.
Uma biblioteca vem com padrões. Esses padrões são, por necessidade, neutros — eles precisam funcionar para milhares de produtos não relacionados, portanto, codificam a versão menos opinativa de cada decisão. Instale-a e você terá herdado um conjunto completo de decisões de design que foram escolhidas especificamente por serem inofensivas.
Os padrões de uma biblioteca são neutros por necessidade. Adote-os integralmente e você terá herdado um conjunto completo de decisões escolhidas por serem inofensivas.
Antes da biblioteca, o produto não tinha sistema e parecia inconsistente. Depois, ele tem um sistema, mas é de outra pessoa, ajustado para a máxima generalidade. A inconsistência é corrigida e o problema de identidade é criado — e como o segundo problema não gera erros, ele passa muito tempo sem ser nomeado.
Este não é um argumento contra component libraries. É um argumento de que instalar uma completa apenas metade do trabalho, e a metade que ela completa é aquela que já era visível.
Onde se encaixam os guias de estilo e as bibliotecas de padrões
Vários termos adjacentes são usados de forma intercambiável. Eles não são sinônimos; são fatias diferentes.
| Abrange | Ausente | |
|---|---|---|
| Style guide | Padrões visuais: uso de logo, cores, tipografia, imagens | Comportamento, composição, código. Geralmente um documento de marca |
| Pattern library | Soluções recorrentes: como um formulário valida, como funcionam os estados vazios | Os valores e papéis subjacentes. Frequentemente não possui tokens |
| Component library | Partes de UI codificadas e reutilizáveis com APIs | Intenção, proibições, orientações de composição |
| Token set | Valores nomeados para cor, tipografia, espaçamento, elevação | Para que serve cada um e o que é proibido |
| Design system | Tudo acima, somado a governança e intenção | — |
Um token set merece atenção especial porque é o artefato mais frequentemente confundido com um sistema completo. Um arquivo de valores nomeados é genuinamente necessário e não diz a ninguém para que --color-primary pode ser usado — que é a decisão que determina se a interface parece contida ou como um template temático.
O que o sistema contém que a biblioteca não consegue
Quatro coisas, nenhuma das quais pode viver na API de um componente, e todas elas decidem a aparência do produto.
- 1
Regras de composição
Como os componentes se posicionam juntos. Uma ação primária por seção. Controles relacionados agrupados, não relacionados separados por um passo completo de espaçamento. Tabelas nunca aninhadas dentro de cards. Uma component library não tem opinião sobre o que envolve seus componentes, e o espaço entre componentes ocupa a maior parte de uma tela.
- 2
Densidade e ritmo
Se esta é uma ferramenta densa ou uma superfície de marketing espaçosa. O mesmo Button, com 8px de padding em uma linha de tabela e 16px em um hero, produz dois produtos diferentes. A biblioteca suporta ambos e não escolhe nenhum.
- 3
Motivos
Aquele elemento recorrente e específico que torna o design único — um tratamento de borda particular, o uso característico de uma linha de regra, uma forma consistente de desenhar gráficos. Motifs são a diferença entre o que é correto e o que é característico, e eles não existem em lugar nenhum de uma API de componentes.
- 4
Proibições
O que nunca deve ser feito. Sem gradientes. Sem elevação de sombra. Sem peso de fonte acima de 600. Nenhuma cor fora do conjunto de tokens. Uma biblioteca de componentes não pode proibir nada, porque proibir é a única coisa que uma biblioteca de propósito geral não deve fazer.
O ponto de proibição generaliza além do design. O trabalho de uma biblioteca é ser utilizável por muitos produtos, o que significa permitir tudo o que for razoável. O trabalho de um sistema é tornar um único produto coerente, o que exige descartar a maior parte disso. Eles são estruturalmente opostos, e é por isso que um não pode substituir o outro.
A diferença é mais fácil de notar em uma única primitiva. Uma biblioteca de componentes oferece um Button com uma prop variant e nenhuma opinião sobre a aparência de cada variante. Um sistema decide — e a decisão cobre estados para os quais a biblioteca deixou apenas um espaço:
Por que isso ficou caro
A distinção era suportável quando humanos escreviam cada tela. Um desenvolvedor que tivesse visto as últimas dez telas absorvia as convenções não escritas e, em grande parte, as reproduzia. O design system existia na cabeça das pessoas, sem documentação, e isso funcionava enquanto as pessoas permaneciam na equipe.
Um agente de código de IA não possui essa memória. Ele lê o que está no repositório, escreve uma tela e começa do zero. Tudo o que a equipe sabia e nunca escreveu simplesmente não existe, e o agente preenche a lacuna com a média estatística de tudo o que já viu — que é por que interfaces geradas por IA convergem para a mesma aparência.
Analisamos 299 arquivos DESIGN.md escritos especificamente para fechar essa lacuna. Os números mostram que a maioria não consegue: 86% especificam cores como hex puro sem função semântica, 76% não declaram proibição alguma, 57% não definem motifs, 69% não dizem nada sobre dark mode e 44% não contêm nenhum valor de tamanho concreto. 54% dependem de pelo menos um adjetivo vago, com "clean" em 39% e "modern" em 36%.
Comparando com os quatro itens acima, temos um corpus de arquivos que documentam a biblioteca de componentes e a chamam de design system. As regras de composição, a decisão de densidade, os motifs e as proibições estão, em sua maioria, ausentes.
Adicionando a camada que falta
A boa notícia é que você não precisa reconstruir nada. Se você tem uma biblioteca de componentes e tokens, a camada do design system é um documento, e ele é curto.
## Intent
A dense tool for people who work in it for hours. Quiet, information-first.
Not a marketing surface: nothing here has to convince anyone of anything.
## Density
Controls: 8-12px padding. Table rows: 32px. Section gap: 32px.
Marketing surfaces run one step up on every value.
## Elevation
A surface step plus a 1px border. Never a box-shadow.
## Composition
One primary action per section. Related controls share a group;
unrelated ones are separated by a full spacing step.
Tables are never nested inside cards.
## Motifs
Section headings carry a 2px accent rule on the left edge.
Numeric columns are always tabular-nums, always right-aligned.
## Never
- No gradients
- No drop shadows
- No font-weight above 600
- No colour value outside the token set
- No border-radius above 12pxTrinta linhas. Ele não contém nada que sua biblioteca de componentes já saiba, mas contém tudo o que um novo engenheiro — ou um agente — precisa para construir uma tela que pertença ao seu produto, e não aos padrões da biblioteca.
Os design kits da Identity Forge são essa camada, pré-construídos e completos: 28 funções de cores semânticas para light e dark, escalas de tipografia e espaçamento, elevação, motifs e proibições explícitas, serializados em um DESIGN.md que fica ao lado de qualquer biblioteca de componentes que você já use. Explore os kits ou leia o que é um arquivo DESIGN.md.
De qual você precisa?
Quase sempre de ambos, mas a ordem depende de onde está a dor.
| O que você precisa primeiro | |
|---|---|
| Três implementações de botão, bugs corrigidos em apenas uma | Uma biblioteca de componentes. Este é um problema de duplicação de código |
| Componentes consistentes, mas o produto parece um template | Um design system. A biblioteca está fazendo o trabalho dela; nada está expressando uma identidade |
| Cada nova tela toma decisões de espaçamento diferentes | Um design system — especificamente as regras de densidade e composição |
| Telas geradas por IA divergem umas das outras | Um design system, escrito em um arquivo no repositório que o agente lê |
| Designers e engenheiros usam nomes diferentes para as mesmas coisas | Uma camada de tokens com nomes correspondentes em ambas as ferramentas |
Qual é a diferença entre um design system e uma biblioteca de componentes?
Uma biblioteca de componentes é um conjunto de partes de UI codificadas e reutilizáveis com APIs definidas. Um design system é o conjunto completo de decisões que essas partes expressam — funções de cores, escalas, estratégia de elevação, regras de composição, motifs e proibições — junto com a governança que as mantém fiéis. A biblioteca é apenas um dos resultados do sistema.
O shadcn/ui é um design system?
Trata-se de um mecanismo de distribuição de componentes somado a uma convenção de tokens, o que resolve grande parte da infraestrutura. Não é um design system para o seu produto, pois não define a densidade, as regras de composição, os motivos ou o que é proibido. São essas decisões que tornam a entrega algo seu, e não apenas o padrão.
Posso ter um design system sem uma biblioteca de componentes?
Sim, e isso é comum em produtos iniciais ou em equipes que utilizam componentes de terceiros. Um sistema documentado com uma camada de tokens sobre uma biblioteca pronta funciona bem. O que não funciona é o inverso: uma biblioteca sem um sistema definido deixa cada decisão de design a critério de quem estiver desenvolvendo a próxima tela.
Um guia de estilo é a mesma coisa que um design system?
Não. Um guia de estilo geralmente abrange os padrões visuais da marca — uso do logo, cores, tipografia, imagens — e para antes de chegar ao comportamento, composição e código. Ele é um dos insumos de um design system, e não um substituto para ele.
Por que meu produto ainda parece genérico após a adoção de uma biblioteca de componentes?
Porque os padrões de uma biblioteca são neutros por design — eles precisam atender a milhares de produtos distintos. Adotá-los integralmente significa herdar um conjunto completo de decisões escolhidas para serem neutras. Adicionar regras de densidade, regras de composição, motivos e uma lista de proibições é o que converte uma biblioteca em uma identidade de produto.