Skip to content

Release a JavaScript project as one version

Verso is a release CLI for repositories whose JavaScript packages move together. It discovers the release manifests, writes one target version, optionally prepends a Conventional Commit changelog, creates an annotated tag, and pushes the current upstream branch and that exact tag atomically.

Install Verso in the repository you want to release:

Shell
pnpm add -D @amamo/verso

Continue with Getting started to run doctor through the package manager that installed Verso and preview an exact release plan.

The contract

text
verso.toml + package manifests + Git history  -> validate config, versions, worktree, branch, and upstream  -> choose one SemVer target  -> update package manifests, configured Cargo files, and changelog  -> create release commit and annotated tag  -> git push --atomic <upstream> <branch> <exact-tag>
Verso ownsYour repository owns
Package discovery and shared-version checksTests, builds, and policy checks invoked by hooks
JSON, JSON5, YAML, Cargo, and changelog updatesRegistry credentials and package publication
Release commit, annotated tag, and atomic pushTag-triggered artifacts and GitHub Releases
Dry-run and stage-aware local rollbackRecovery decisions after a successful remote push

When Verso fits

Use Verso when every releasable package shares one version and one Git tag. A single-package project also works without a config file when its root contains a supported package manifest.

Choose a different release model when packages version independently, when publishing must happen inside the local transaction, or when your remote cannot accept atomic pushes.

Safety model

  • verso doctor checks the repository without starting a release.
  • verso --dry-run prints files, hooks, and Git commands without writes or mutating Git commands.
  • Real releases require a named branch with an upstream that is not ahead of the local branch.
  • By default, the worktree must be clean. The relaxed mode still requires a clean index and clean release files.
  • Execution errors before the push trigger stage-aware cleanup. User cancellation deliberately keeps already-completed stages so visible work is not discarded.
  • A push error keeps the local commit and tag. An after_push hook error happens after the remote has accepted both refs.

Continue

Copyright © 2026 白熱.