changelog generator & diff tool
stormlightlabs.github.io/git-storm/
changelog
changeset
markdown
golang
git
1---
2title: Introduction
3outline: deep
4---
5
6# Introduction
7
8Storm is a CLI that keeps changelog entries close to your code. It grew from a
9few principles:
10
111. **Plain text first.** Every unreleased change is a Markdown file that lives
12 in your repo, making reviews and rebases simple.
132. **Deterministic releases.** Given the same `.changes` directory, Storm will
14 always write the same `CHANGELOG.md` section.
153. **Interactive when helpful, scriptable everywhere.** TUIs exist for reviews
16 and diffs, but every action prints machine-readable summaries for CI.
17
18## Why Storm?
19
20Storm sits between `git log` and `CHANGELOG.md`. It understands conventional
21commits, keeps notes in version control, and prefers deterministic text files
22over generated blobs. The CLI is written in Go, so it ships as a single binary
23that runs anywhere your repository does.
24
25- **Local-first workflow:** no external services or databases.
26- **Deterministic releases:** `storm release` is idempotent and can run in CI.
27- **Composable commands:** each subcommand prints useful summaries for scripts.
28
29## Quick Preview
30
31```sh
32# Extract commits into .changes entries
33storm generate --since v1.2.0 --interactive
34
35# Review pending notes
36storm unreleased review
37
38# Cut a new release and update package.json
39storm release --bump minor --toolchain package.json --tag
40```
41
42Need the details? Head to the [Quickstart](/quickstart) for a guided flow or
43read the [manual](/manual) for every flag and exit code.
44
45## Architecture Overview
46
47```sh
48.git/
49.changes/
50CHANGELOG.md
51```
52
53- `storm generate` and `storm unreleased add` populate `.changes/`.
54- `storm check` and your CI ensure nothing merges without an entry.
55- `storm release` merges the queue into `CHANGELOG.md`, optionally creates a
56tag, and can update external manifests.
57
58## Toolchain-aware versioning
59
60The bump and release commands understand common ecosystem manifests:
61
62| Manifest | Alias | Notes |
63| -------- | ----- | ----- |
64| `Cargo.toml` | `cargo`, `rust` | Updates `[package]` version. |
65| `pyproject.toml` | `pyproject`, `python`, `poetry` | Supports `[project]` and `[tool.poetry]`. |
66| `package.json` | `npm`, `node`, `package` | Edits the top-level `version` field. |
67| `deno.json` | `deno` | Updates the root `version`. |
68
69Pass specific paths or the literal `interactive` to launch the toolchain picker
70TUI.
71
72## TUIs everywhere
73
74Storm shares a consistent palette (`internal/style`) across Bubble Tea
75experiences:
76
77- **Commit selector** for `storm generate --interactive`.
78- **Unreleased review** for curating `.changes` entries.
79- **Diff viewer** for `storm diff` with split/unified modes.
80- **Toolchain picker** accessible via `--toolchain interactive`.
81
82Each interface supports familiar Vim-style navigation (↑/↓, g/G, space to
83select, `q` to quit) and degrades gracefully when no TTY is available.
84
85## Suggested Workflow
86
871. Developers add `.changes` entries alongside feature branches.
882. Pull requests run `storm check --since <last-release>`.
893. Release engineers run `storm generate` (if needed) then `storm release`.
904. CI tags the release and publishes artifacts.
91
92Need concrete steps? See the [Quickstart](/quickstart) or jump to the
93[manual](/manual).