Version stamps and what’s-new notes that can’t drift from what shipped.
One changelog.json per app, a CLI that stamps a release and
refuses a build where it disagrees with package.json, and a
footer stamp — vanilla JS and React — that opens on the newest entries.
Click a stamp. Same markup everywhere; the host’s styles do the talking.
Three pieces, no build step, no dependencies.
One newest-first changelog.json per app, checked by a JSON Schema your editor already understands.
[{
"version": "0.4.0",
"date": "2026-10-24",
"notes": ["What changed,
in words for the
person using it."]
}]
stamp writes the entry and bumps package.json in one step. check stops the build when they disagree anyway.
npx unfuck-changelog stamp \
0.4.0 -m "What changed."
npx unfuck-changelog check
# ✓ or exit 1
Native <details> — keyboard, screen reader and touch for free. Inherits your font and ink; React is an optional peer.
createChangelog(el, {
changes, version,
build: commit,
layout: 'popover',
})
<Changelog {…opts} />
npm i unfuck-changelog
Not on npm yet — the first release ships after QA. Until then:
npm i git+ssh://git@forge.unfuck.cloud:private/unfuck-changelog.git