Verificador de Intervalo SemVer | Teste ^ ~ e intervalos de versão
Digite uma versão e uma expressão de intervalo para ver se a versão o satisfaz. A ferramenta interpreta circunflexos (^), tils (~), intervalos x (1.x), comparadores (>=1.0.0 <2.0.0) e intervalos com hífen (1.0.0 - 2.0.0), e mostra um veredicto Combina / Não combina junto com as versões mínima e máxima que o intervalo permite.
💡 Sobre esta ferramenta
Se você já encarou uma dependência no package.json e se perguntou "será que ^1.2.3 permite mesmo 1.9.0?", esta é a máquina de respostas. Os operadores de intervalo do SemVer parecem simples, mas cada um recorta uma janela diferente. ^1.2.3 permite tudo até 2.0.0 exclusive. ~1.2.3 é bem mais estrito: apenas correções dentro de 1.2.x. E o circunflexo muda de comportamento abaixo de 1.0.0: ^0.2.3 só permite 0.2.x, porque versões menores anteriores a 1.0 são tratadas como quebras.
O painel de mínimo e máximo é o que poupa tempo de depuração. Em vez de expandir o operador de cabeça, você vê diretamente as versões-limite já resolvidas, com ∞ para intervalos abertos como >=1.0.0. Combinado com a explicação em linguagem clara, dá para conferir a resolução de um lockfile ou uma proposta de atualização em segundos, sem instalar o pacote semver nem abrir um REPL.
🧐 Perguntas frequentes
^1.2.3 inclui 2.0.0?
Não. O circunflexo permite >=1.2.3 <2.0.0, então 2.0.0 fica logo fora da janela. O painel de Versão máxima mostra o teto 1.x.
Qual a diferença entre ^ e ~?
O circunflexo permite mudanças que não alteram o segmento não nulo mais à esquerda (geralmente menor e correção). O til só permite correções quando um menor é informado, então ~1.2.3 admite 1.2.x mas não 1.3.0.
Por que ^0.2.3 se comporta de forma diferente?
Abaixo de 1.0.0, o SemVer trata cada mudança de menor como potencialmente quebradora. Por isso ^0.2.3 resolve para >=0.2.3 <0.3.0 e não para <1.0.0.
Como pré-lançamentos como 1.0.0-beta são tratados?
Um pré-lançamento tem precedência menor que sua versão final, então 1.0.0-beta é ordenado antes de 1.0.0. O verificador analisa a etiqueta de pré-lançamento e a ordena de acordo ao testar o intervalo.
Posso testar intervalos compostos?
Sim. Comparadores separados por espaço são combinados com E (>=1.0.0 <2.0.0), e || permite combinar intervalos inteiros com OU. A linha de explicação indica qual lógica se aplica.
📚 Curiosidades
O Versionamento Semântico foi popularizado por Tom Preston-Werner, cofundador do GitHub, que publicou a especificação SemVer em 2010 para combater o que chamou de "inferno das dependências". Os operadores ^ e ~ que a maioria usa no dia a dia não fazem parte, na verdade, do núcleo da especificação SemVer: vêm da biblioteca node-semver do npm, que se tornou a gramática de facto quando o npm adotou os intervalos com circunflexo como prefixo de salvamento padrão. Esse padrão explica por que seu package.json está cheio de circunflexos: ao rodar npm install lodash, o npm escreve ^4.17.21, inscrevendo você em silêncio em todas as futuras versões menores e de correção da linha 4.x. Outros ecossistemas pegaram a ideia mas ajustaram as regras: o Cargo, do Rust, trata por padrão um requisito 1.2.3 simples como circunflexo.