What you’ll learn
Every release leaves a trail in three different places: the commits developers
push, the versions designers publish in Figma, and the design tokens that change
underneath both. Most teams stitch those together by hand, badly, the night
before a release. This tutorial teaches ds-bridge’s changelog command, which
reads all three sources and prints one changelog split into a For
designers section and a For developers section — so each audience reads the
half that matters to them without missing the changes that matter to everyone.
A reassuring word for designers and managers reading along: you don’t need to
understand git to use this. The command does the reading; you get a tidy,
plain-language summary. And it’s safe by design — changelog only ever prints
to your terminal. It writes nothing to your repo, Figma, Confluence, or Slack on
its own.
- How
changelogaggregates git commits, Figma versions, and token changes - How conventional-commit prefixes (
feat,fix,feat!) become severities - How to segment the output by audience and export paste-ready markdown
- Why the Figma side is skipped when no token is set — and why that’s fine
Setup
You’ll need the ds-bridge plugin and a project that is a git repository — that’s the one hard requirement, because local git history is the always-present source. New to ds-bridge? Getting started covers install and the preferences dialog first; come back here when you’re set up.
Everything below was captured by running the command against the ds-bridge repository itself, so the output is real git history — your own runs will look the same shape against your own commits.
# A changelog of everything since a date, as markdown.
ds-bridge changelog --since 2026-06-05 --format=md
Steps
-
Run a full changelog and read the split. With
--format=md, ds-bridge prints a markdown document already divided into the two audience sections. Here’s a real run against the ds-bridge repo (trimmed — the full window had 86 entries):# Changelog ## For developers ### 2026-06-06 - **[notable]** a11y + impact dashboard sections, history lines, six-artifact acceptance (T7.22) — lucksy - **[minor]** build dist once via vitest globalSetup - kill concurrent-rebuild race (T7.23) — lucksy - **[notable]** ds-docs command (T7.20) — lucksy - **[notable]** docs generation command (T7.19) — lucksy - **[notable]** a11y-check command (T7.4) — lucksy ### 2026-06-05 - **[notable]** a11y contrast command (T7.3) — lucksy - **[notable]** impact command (T7.10) — lucksy …Notice the shape: a
## For designersand a## For developersheading, each with entries grouped by date (newest first), and every line led by a severity badge —[breaking],[notable], or[minor]. -
Read how commits become severities. This is the heart of the code side. ds-bridge classifies each git commit by its conventional-commit prefix:
feat:→ a notable change, filed under developers. New features are worth announcing.fix:→ a minor change, filed under developers. Bug fixes are real but quieter.feat!:or aBREAKING CHANGE:footer → a breaking change, and breaking changes are surfaced first in their section so they’re impossible to miss.- Anything that isn’t a recognised conventional header (a checkpoint tag, a plain subject) falls back to minor.
You can see this in the run above: the one
fix(tests): build dist once…commit landed as[minor], while everyfeat(…)commit landed as[notable]. This repo’s window happened to contain no breaking commits, so you won’t spot a[breaking]badge here — the firstfeat!orBREAKING CHANGE:you ship is the first one you’ll see. -
Narrow to one audience. Pass
--audience designers(ordevelopers, or the defaultboth) to render only that section. Here’s the honest result of asking this repo for the designers’ view:# Changelog _No changes in the selected window._That isn’t a bug — it’s the truth. The ds-bridge repo has lots of developer commits but no labeled Figma versions and no token changes in this window, so the designers’ half is genuinely empty. On a real product repo, where designers publish named Figma versions, this is exactly where their milestones would appear.
-
Watch the Figma side skip itself, honestly. Run the same command with the human-readable
--format=termand look at what ds-bridge prints to stderr:Figma side skipped (no token / file key configured) — code + token changes only.This one-line note is a feature, not an error. With no Figma personal access token and file key configured, ds-bridge can’t read Figma version history — so instead of failing, it tells you plainly that it’s reporting code and token changes only, and carries on. That’s what makes
changelogwork completely offline, straight from a plain git repo. Add a token (see Getting started) and labeled Figma versions start flowing into the For designers section automatically.
Result
- Oct 7minorFindings status after v1.16.0code
- Oct 6minorConfigure ds-bridge (library key, gitignore token)code
- Oct 6notableAcme shop on shadcn/ui with Tokens Studio tokenscode
You can now produce one changelog that two audiences will actually read. The developers section carries the commit story, severity-tagged; the designers section carries published Figma milestones and the token changes that cross both worlds. A breaking change is never buried — it leads its section.
A few things worth knowing for everyday use:
-
Three formats, one job.
--format=termis the friendly terminal view,--format=mdis paste-ready for a release note or wiki page, and--format=jsonis the structured shape the slash command consumes. -
It’s a generator, not a gate. Exit code
0means it ran — whether or not there were any changes. You only get exit code2for an operational problem: a bad--formator--audiencevalue, or running outside a git repository. That makes it safe to drop into a release pipeline without worrying it’ll fail your build for having changes:# In CI: generate release notes; never blocks the pipeline on "has changes". ds-bridge changelog --since "$LAST_TAG_DATE" --format=md > RELEASE_NOTES.md -
Posting is model-led and ask-first. Want this in Confluence or Slack? The CLI will never post anywhere itself — it has no integration and prints to stdout only. Run
/ds-bridge:ds-changeloginstead: it generates the markdown, shows it to you, and will publish only through a tool you’ve already configured and only after you explicitly confirm the exact destination. No guessing, no surprise posts.
Troubleshooting
- Everything lands under “For developers”? That’s expected when there are no labeled Figma versions and no token changes — look for the Figma side skipped note on stderr. Configure a Figma token and publish named versions in Figma to populate the designers’ side.
- The designers’ section is empty? Same cause. ds-bridge filters out Figma
autosaves on purpose and only shows versions you’ve given a label — so a
designer needs to publish at least one named version inside your
--sincewindow. --audience designersprinted an error? Mind the spelling: the accepted values aredesigners,developers, andboth. Anything else exits with code2and a one-line message telling you the valid options.--sincematched nothing? It takes any date git understands (an ISO date like2026-06-05is simplest). With no--sinceat all, ds-bridge looks back 90 days by default — widen the window if your last release was further back.