Jsonnet vs CUE: Linguagens de Configuração Comparadas
Jsonnet é uma linguagem de templating para gerar configuração; CUE unifica dados, schema e validação em uma única linguagem. Jsonnet tende a produzir configuração; CUE tende a restringir e validá-la.
Ambos melhoram o YAML/JSON escrito à mão, mas com filosofias diferentes. Jsonnet enfatiza a geração via funções e composição; CUE enfatiza tipos e restrições, onde valores e schemas são a mesma coisa. Aqui está a comparação honesta.
| Jsonnet | CUE | |
|---|---|---|
| Força principal | Gerar configuração (templating) | Validar + unificar configuração |
| Tipos/schema | Dinâmico, sem schema embutido | Tipos e restrições são de primeira classe |
| Modelo | Funções, herança, mixins | Unificação de valores e restrições |
| Validação | Ferramentas externas | Embutida (restrições impostas) |
| Curva de aprendizado | Moderada | Moderada a íngreme (modelo de unificação) |
| Ecossistema | Tanka, bibliotecas kube | Crescendo, k8s + ferramentas de configuração |
Gerar vs validar
Jsonnet é melhor quando você precisa gerar muita configuração similar a partir de abstrações: funções, imports e composição de objetos mantêm tudo DRY. CUE é melhor quando a correção importa mais: você expressa um schema e os dados na mesma linguagem, e o CUE os unifica, de modo que configuração inválida simplesmente não avalia. Muitas equipes recorrem ao Jsonnet para produzir e ao CUE para proteger.
O modelo de unificação
A ideia central do CUE é a unificação: restrições e valores concretos se combinam, e o resultado precisa ser consistente ou falha. Isso proporciona validação forte e permite sobrepor defaults e políticas. É um modelo mental diferente do templating e leva tempo para internalizar, mas captura classes inteiras de erros de configuração cedo.
Em CI
Ambos rodam como um passo de CLI: Jsonnet renderiza manifests, CUE pode renderizar e validar. Adicionar um gate de validação com CUE (ou Jsonnet mais um validador separado) no CI evita que configuração malformada chegue a um cluster.
O veredito
Escolha Jsonnet quando sua principal necessidade é gerar configuração a partir de abstrações reutilizáveis; escolha CUE quando validação e imposição de schema são a prioridade. Eles são complementares, e alguns pipelines geram com um e validam com o outro.