Releases
A release post is a short blog-style page you can link to when something ships. It lives at a URL you own, carries a markdown body, and can pin the umbrellas? it shipped.
Release posts
Every project has a release index at /r/{org}/{project} and one page per release at:
https://opini.dev/r/{org-slug}/{project-slug}/{release-slug}Compose releases from the dashboard under Releases. Each one has a title, a markdown body, an optional publish date, and a list of umbrellas you want to call out by name.
Visibility controls
Three visibility states, switchable per release:
- Public — listed on the release index and crawlable. The default for "this is ready to read".
- URL-only — reachable at the direct URL but not listed anywhere. Good for soft launches, partner previews, unlisted "hey here's the changelog" drops.
- Private — admin-only. Use it for drafts, retro post-mortems, or anything you don't want visitors stumbling into.
Turning a release off doesn't delete it — flip it to Private and the URL starts returning 404, leaving the content intact in the dashboard.
Attach umbrellas
In the release editor you can pin umbrellas — the roadmap items that actually shipped. Readers see the umbrella titles on the release page; integrators rendering their own roadmap can fetch the same details from the public roadmap API.
Pinning an umbrella doesn't move it. Umbrellas flow through their own status columns (see public surfaces); releases are a curated narrative on top.
Tagging a release
Releases can carry tags — security, breaking, beta, whatever your project needs. Tags show up as chips on the release index so readers can skim by kind. See /docs/tagging for the picker's create-on-the-fly flow.
Events
Two webhook event kinds track release state:
release.published— fires when a release flips from Private/URL-only into a Public visibility state.release.unpublished— fires when a previously public release goes back to Private.
A common pipeline shape: subscribe a deploy-notifier URL to release.published and post the release link into your #announce channel automatically. See /docs/webhooks.