Skip to content

ben-laird/dv

Repository files navigation

dv

JSR JSR Score CI License: MIT

A language-agnostic, git-native changelog CLI for monorepos.

The name dv reads as the calculus notation for a tiny change in v(ersion).

What it is

dv manages CHANGELOG.md files across monorepos containing any mix of languages and package ecosystems. Contributors file small markdown "record" files alongside their PRs; dv aggregates them at release time into proper CHANGELOG entries and version bumps.

Heavily inspired by changesets, but extends the model to any ecosystem via executable plugins.

Works with any commit style. dv reads Records, not commit messages — so contributors write changelog intent for users, and commit messages for reviewers, and neither has to compromise. Teams already on Conventional Commits will get bonus affordances (drafting Records from CC commits is on the roadmap), but CC is never required.

Quick example

A contributor adds a record alongside their PR:

$ dv add
? What kind of change? feat
? Which packages does this affect? core
? Describe the change (opens $EDITOR)

This writes .dv/records/quiet-cats-sneeze.md:

---
type: feat
packages: [core]
---

Add support for OAuth flows.

When it's time to ship:

$ dv version    # bumps versions, updates CHANGELOGs, commits the result
$ dv release    # mints per-package git tags, fires release plugins

The two-phase flow is intentional — version produces an ordinary commit, distinct from the tag-and-publish step. The default workflow is release-on-merge (plain GitHub Flow): merging a feature PR to main runs both phases automatically, since the bump is derived from the Records that PR carried. Teams that want a human to approve the bump first can route the version commit through a "Release PR" instead. Either way it's the same two commands — see the CI integration guide.

Status

v1 ships. The whole v1 command surface from specs/cli.md is implemented: dv init, dv add, dv status, dv validate, dv version, dv release, dv v1 (with catalog mode under --dry-run), dv rename, dv migrate config, and dv plugin list|invoke|verify.

Try it from the repo:

deno task install                                # adds `dv` to your PATH
dv status                                        # show pending bumps
dv add --type fix --packages @dv-cli/dv \
       --message "Demo record"                   # file a Record
dv validate                                      # lint records + config
dv version --dry-run                             # preview the version commit
dv version                                       # apply: bump, CHANGELOG, commit

Contributing: see CONTRIBUTING.md for the PR flow, how to file Records alongside your code change, and how to run the test suite locally.

Docs

Adoption-oriented docs (Tutorials, Concepts, Guides, Reference) live in apps/docs/ and publish via VitePress. Start with the getting-started tutorial.

The internal spec library at specs/ is the design source of truth — formal vocabulary, algebra, contracts. Useful if you're contributing or reading the why behind a behavior.

About

A language-agnostic, git-native changelog CLI for monorepos. Records, not commit messages.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors