b4 v0.15.0 released

Konstantin Ryabitsev
2026-03-20T20:47:16Z

Hi, all:

B4 v0.15.0 is now available! Install or upgrade using your usual mechanism.

We're recommending the use of pipx now over pip, so if you want to start from
scratch, you can use:

pipx install b4
# or, if you want the new shiny review tui stuff
pipx install b4[tui]

Full release notes: https://b4.docs.kernel.org/en/latest/releases.html
Getting started guide with screencasts: https://b4.docs.kernel.org/en/latest/reviewer/getting-started.html

# b4 review — TUI-based patch review workflow (technology preview)

The headline feature in this release is "b4 review", a terminal-based
workflow for maintainers who receive, review, and accept patches from
mailing lists. It ships as a technology preview (alpha): commands,
keybindings, configuration options, and on-disk formats may change in
incompatible ways between releases.

The TUI requires the optional "tui" dependency group:

pipx install b4[tui]

The workflow is built around a lightweight SQLite tracking database and
per-series review branches. It comprises three cooperating TUI apps:

Tracking TUI
Browse and manage tracked series with status indicators, take
(apply) series using merge, linear, or cherry-pick strategies,
compare revisions with range-diff, send thank-you messages, and
archive completed series. The app groups series by lifecycle state
(active, new, waiting, gone) and sorts by most-recent activity.

Review TUI
Split-pane interface with a patch list and scrollable diff viewer.
Add inline comments and code-review trailers, preview outgoing
emails, invoke an external AI agent for automated review assistance,
and send review replies — all without leaving the terminal.

Patchwork TUI
Browse outstanding series from a Patchwork server, set state and
archived flags, and track series into the local database for review.

Highlights:

- Series tracking and lifecycle management — track series from the
CLI (b4 review track <msgid>), from your mail client, or from
Patchwork. Series progress through new → reviewing → replied →
accepted → thanked states.
- Revision discovery and upgrades — b4 automatically discovers older
and newer revisions of a tracked series using change-id and
in-reply-to chains. Upgrading to a newer revision preserves your
review state and prior context.
- Inline commenting — press "r" in the review view to open $EDITOR
with the full diff quoted. Write your comments below the relevant
lines and b4 will format them as proper email replies. The diff
view shows community follow-up comments from the mailing list
alongside your own.
- AI agent integration — optionally invoke an external AI agent
(Claude Code, Gemini CLI, OpenAI Codex CLI, or GitHub Copilot CLI)
to produce a first-pass review. Agent findings remain private to
you; you decide what, if anything, to include in your reply.
- Per-patch state machine — mark individual patches as done, skip, or
draft to track your progress through large series. B4 automatically
excludes skipped patches from cherry-pick selection and outgoing
emails.
- Three take strategies — merge (creates a merge commit from the
cover letter), linear (git am), or cherry-pick (select individual
patches). B4 adds per-commit Signed-off-by and Link trailers on
request.
- Snooze — defer a series until a specific date, duration, or git
tag. B4 skips snoozed series during bulk updates and automatically
wakes them when the snooze expires.
- Cross-machine synchronisation — push b4/review/* branches to a
private remote and rescan on another machine to rebuild the tracking
database from branch metadata.
- Mutt-style thread viewer — press "e" to browse the full email thread
with tree art, attestation status display, and reply support. B4
tracks per-message flags (seen, flagged, answered) across sessions.
- Worktree support — enrolled repositories work correctly from
worktrees; a configurable review-target-branch sets the default
branch for take operations.
- Patchwork state synchronisation — when you have write access to a
Patchwork instance, b4 automatically updates the remote series state
as you progress through the review lifecycle.
- Prior review context — when upgrading to a new revision, b4 carries
forward your previous review comments and notes so you can see what
you said last time.
- Quick-reply — reply to follow-up messages directly from the review
TUI or thread viewer without switching to your email client.

# b4 dig — trace applied commits back to mailing list submissions

The new "b4 dig" command searches for the original mailing list
submission of a commit that has already been applied to a git tree. It
matches by patch-id, author, and subject to locate the original thread
on lore.kernel.org.

b4 dig <commitish>
b4 dig --all-series HEAD~20..HEAD
b4 dig --who --save-mbox <commitish>

# b4 shazam — three-way merge and conflict resolution

"b4 shazam -H" now performs a three-way merge when applying patches,
which significantly improves the success rate for series that do not
apply cleanly with a simple "git am". When conflicts do occur, the new
--resolve flag drops you into an interactive conflict resolution session
instead of aborting:

b4 shazam -H --resolve <msgid>

# b4 prep — pre/post history-rewrite hooks

Two new configuration keys let you run commands before and after b4
rewrites history on a prep branch (for example, when updating the cover
letter or applying trailers via git-filter-repo):

[b4]
prep-pre-rewrite-hook = stg commit --all
prep-post-rewrite-hook = stg repair

A non-zero exit from the pre-hook aborts the operation, which is useful
for tools like StGit that need to commit their internal state first.

Other notable changes
---------------------

- XOAUTH2 and bearer-token SMTP authentication
- Presubject support (b4.send-presubject / --set-presubject)
- Send-email alias expansion (sendemail.aliasesfile)
- Codespell integration in b4 prep --check
- Shallow same-thread support (b4.send-same-thread = shallow)
- Force cover letter for single-patch series (--force-cover-letter)
- Default Link domain changed to patch.msgid.link
- Full-index binary diffs (--full-index --binary)
- Clean multiple prep branches at once
- Thank-you self-copy (b4 ty --me-too)
- Range-diff arguments (--range-diff-opts)
- Trailer provenance display in b4 trailers

Thanks
------

Thanks to the following people for reporting bugs, suggesting features,
reviewing patches, testing, and contributing code, and especially to Mark
Brown for valiantly trying the very early, rough versions of b4 review
workflows.

Alexey Minnekhanov, Andrew Cooper, Andy Shevchenko, Christian Heusel,
Conor Dooley, Dave Marquardt, Geert Uytterhoeven, Jonathan Corbet,
Junio C Hamano, Juri Lelli, Kevin Hilman, Krzysztof Kozlowski,
Lee Jones, Linus Torvalds, Louis Chauvet, Luca Ceresoli,
Manos Pitsidianakis, Marc Kleine-Budde, Mark Brown, Matthieu Baerts,
Maxime Ripard, Michael S. Tsirkin, Miguel Ojeda, Nathan Chancellor,
Panagiotis Vasilopoulos, Ricardo Ribalda, Rob Herring,
Tamir Duberstein, Toke Høiland-Jørgensen.

Best regards,
--
KR