v0.1.0 · pre-release, in QA

unfuck-changelog

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.

Live demo

Click a stamp. Same markup everywhere; the host’s styles do the talking.

Twig-style footer · dark · inline
© 2026 Unfuck Cloud. Made in Arlington, WA with ♥ and no fucks given.
Untangle-style · dark · popover
© 2026 Unfuck Cloud. Made in Arlington, WA with ♥ and no fucks given.
Light page · no configuration

How it works

Three pieces, no build step, no dependencies.

1 · The data

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."]
}]

2 · The build

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

3 · The render

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} />

Install

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