semver-checks: TypeScript SemVer Checker

Everyone expected another round of gut-feel semver arguments in your next PR. semver-checks flips the script: pure TypeScript type diffs, no mercy for breaking changes.

semver-checks: The CLI That Finally Ends TypeScript's SemVer Guessing Game — theAIcatchup

Key Takeaways

  • Eliminates semver guesswork with pure TypeScript type diffs—no commit parsing needed.
  • CI-ready with --strict flag to block breaking changes automatically.
  • Open-source, extensible, but limited to API surface (no runtime behavior).

Picture this: you’re knee-deep in a TypeScript PR, coffee gone cold, when the inevitable comment drops. “Major bump?” Everyone’s staring at a diff where you tweaked a return type. Chaos ensues.

That’s the old world. The one where semver-checks didn’t exist.

But now? Boom. This tiny CLI flips the script, using TypeScript’s own type system to sniff out exactly what bump you need—major, minor, or patch—without parsing commit messages or trusting developer intuition.

It’s like giving your codebase a semver lie detector. And folks, in the wild west of open-source TypeScript libs, this changes everything.

Remember Semver Roulette?

We’ve all played it. Tools like conventional-commits promised salvation, but they hinge on perfect commit labels—feat! for breaking, or bust. Miss it? Your CI hums along, blissfully ignorant, until users scream about runtime errors post-release.

TypeScript knows your API inside out. Exports, signatures, enums—the works. semver-checks taps that directly, diffing git refs like npx semver-checks compare v1.0.0 HEAD and spitting out:

BREAKING CHANGES (2): required-property-added: Required property ‘timeout’ was added return-type-changed: Return type of ‘findUser’ changed FEATURES (1): export-added: Export ‘createConfig’ was added Recommendation: MAJOR

No opinions. Just facts. Forty-plus rules classify changes: required param added? Major. Optional one? Minor. It’s mechanical poetry.

Here’s the thing—this isn’t some half-baked script. It works programmatically too, perfect for Node.js pipelines.

And get this: my bold prediction? Within a year, semver-checks becomes the de facto standard in every TS monorepo’s CI, much like how tsc --noEmit quietly revolutionized type checking back in 2018. Back then, we manually verified types; now, we automate semver. Same vibe, bigger stakes.

Does semver-checks Replace Conventional Commits?

Not quite—but it supercharges them. Conventional-commits still guide your changelog. This? It enforces the reality of your types.

Run it with --strict in CI:

- name: Check for breaking changes
  run: npx semver-checks compare v1.0.0 HEAD --strict

Pipeline fails on breaks. No mercy. Your major version bumps itself, or else.

But wander a bit: it’s API-only. Behavioral shifts—like a function now throwing on edge cases—slip through. Defaults exports? Nope, named only for now. Semantically identical types (string | number vs. number | string)? Potential false positives.

Still, for 80% of pains? Gold.

Think Rust’s cargo-semver-checks, which enforces API contracts pre-publish. semver-checks ports that rigor to TS, where we’ve languished without it. Open-source savior.

How Does It Pull This Off, Exactly?

Under the hood: extracts exported API at two points—git refs or paths—via tsconfig.json. Then, rule-based diffing.

Majors: export gone, required param sneaked in, return type morphed, enum pruned.

Minors: new export, optional param, interface method tacked on.

Patch: consumer-neutral tweaks.

Programmatic API? Slice of cake:

import { compare } from 'semver-checks';
const report = await compare({
  oldSource: { type: 'git', ref: 'v1.0.0' },
  newSource: { type: 'path', path: '.' },
});
console.log(report.recommended); // 'major'

Energy here: it’s not hype. This feels like the platform shift where AI… wait, no, types are the AI for code. Predicting breaks before they bite.

Critique time—the creator admits limits, smart move. No PR spin, just ‘contributions welcome.’ GitHub: https://github.com/kyungseopk1m/semver-checks. Fork it, rule the world.

Why TypeScript Maintainers Can’t Ignore This

Scale up. Monorepos with 50+ packages? Manual audits kill velocity. semver-checks? One command, green lights or red flags.

Vivid analogy: it’s your codebase’s canary in the coal mine. Instead of birds dropping dead from gas, your PRs halt on breaking fumes.

Unique spin—and here’s my hot take—pair this with AI code review tools. Suddenly, humans debate why it’s breaking, not if. Efficiency skyrockets. We’re not just maintaining libs; we’re engineering unbreakable APIs.

Edge cases? Sure. tsconfig must exist. No behavioral analysis. But for surface diffs? Unmatched.

Install: npx semver-checks compare v1.0.0 HEAD. Try it. Feel the wonder.

Look, if you’re shipping TS, this lands like manna. The future? Automated, type-driven versioning everywhere.


🧬 Related Insights

Frequently Asked Questions

What does semver-checks do?

It diffs TypeScript API surfaces between git refs or paths, classifying changes as major, minor, or patch based on 40+ semver rules—no commit parsing needed.

How to use semver-checks in CI?

Add npx semver-checks compare v1.0.0 HEAD --strict to your GitHub Actions or pipeline; it exits 1 on breaks, blocking deploys.

Does semver-checks detect all breaking changes?

API surface only—no behavioral changes, default exports, or semantic equivalents; false positives possible on type order.

Priya Sundaram
Written by

Hardware and infrastructure reporter. Tracks GPU wars, chip design, and the compute economy.

Frequently asked questions

What does semver-checks do?
It diffs TypeScript API surfaces between git refs or paths, classifying changes as major, minor, or patch based on 40+ semver rules—no commit parsing needed.
How to use semver-checks in CI?
Add `npx semver-checks compare v1.0.0 HEAD --strict` to your GitHub Actions or pipeline; it exits 1 on breaks, blocking deploys.
Does semver-checks detect all breaking changes?
API surface only—no behavioral changes, default exports, or semantic equivalents; false positives possible on type order.

Worth sharing?

Get the best AI stories of the week in your inbox — no noise, no spam.

Originally reported by Dev.to

Stay in the loop

The week's most important stories from theAIcatchup, delivered once a week.