Tutorials Search / Shipping & infrastructure / Draft a release announcement
📝 Written ● Beginner Updated 2026-05-19

Draft a release announcement

Shipping the code is one job. Telling people about it is another — Slack, a tweet, a LinkedIn post, a paragraph for the blog, an entry in CHANGELOG.md. By the time you've written all five, the energy of having just shipped is gone. The Announce button compresses those five surfaces into one click that reads your recent commits and drafts every variant at once, for you to edit and send.

Most release-comms tools fall into one of two traps. The first is the "release notes generator" trap: it takes your commit subjects and concatenates them into a bullet list. That gives you a CHANGELOG entry but nothing else, and the list reads like a git log because that's what it is. The second is the "social media composer" trap: it gives you a blank text box and a character counter, and now you're a copywriter at 4pm on a Friday. Announce takes a different cut. It reads the actual diff, asks the AI to write a human summary of what changed and why a user would care, then fans that summary out into the five formats simultaneously. You review and edit; the heavy lifting is done.

This tutorial walks through the loop from a cold start. By the end you'll know how to draft a release announcement, how to configure the legs you actually want, and how the bookmark concept makes "what changed since last time" work without a database.

What you'll learn

Step 1: Find the button

1

Paperplane icon in the toolbar

Open a project (you need a git repo with at least one commit; an empty git init won't have anything to announce). Look at the main window toolbar — there's a small paperplane icon, captioned Announce when toolbar labels are on. That's the entry point. Click it and a popover drops down from the icon.

If you click it without a project open, you'll get a friendly "no project open" pane instead — open a folder first.

The popover is the wizard. It walks five panes: input → drafting → review → sending → done. Most of the time you'll only see input, review, and done.

Step 2: Pick a mode

2

Three modes, one decision

At the top of the input pane is a Mode picker. The choice answers a single question: "Have my commits already been pushed?"

  • Announce only (default) — Use when your code is already committed and pushed. Announce won't touch git; it just drafts copy for the commits between your last bookmark and HEAD.
  • All-in-one — Use when you have unstaged or uncommitted work that you want to ship right now. Announce stages everything, commits with a placeholder message, pushes to origin, then drafts the announcement.
  • Two-step — Same as Announce only, but the "last announced" bookmark only advances when you explicitly mark it in Settings. Useful if you want to draft several iterations of the same announcement before declaring it final.

Most days you'll use Announce only. The other two exist for edge cases.

Step 3: Understand the bookmark

3

How "what's new" is defined

Announce needs to know which commits to summarize. It uses a per-repo bookmark — a saved commit SHA that marks the last point you announced. The range that gets drafted is bookmark..HEAD.

On the very first announce of a repo, there's no bookmark yet — Announce treats your most recent 50 commits as the range so you can do a "since the beginning" announcement. After you send your first announcement, the bookmark advances to HEAD automatically, and the next run only sees commits since that point.

You can inspect or override the bookmark in Settings → Build & Ship → Announce, where two buttons let you "Mark HEAD as last announced" or "Clear bookmark."

Why not just use git tags? Because tags carry release semantics — they're for versions, not for "I sent a tweet." The bookmark is a soft pointer that means nothing to git and everything to Announce.

Step 4: Choose which legs to send

4

Four toggles, four outputs

Beneath the mode picker are three toggles in the popover (plus one in Settings):

  • Post to Slack — sends a structured message to your configured webhook. The message includes the title, summary, commit list with short hashes, diff stats (files changed / insertions / deletions), and the current branch. Disabled until you wire up the webhook (see Step 6).
  • Draft marketing copy — AI drafts three variants: a tweet (≤280 chars, conversational, one CTA), a LinkedIn post (~500 chars, professional paragraph form), and a blog paragraph (~150 words). You'll see them in the review pane with copy buttons.
  • Append to CHANGELOG.md — the AI classifies the change into one of six categories (Added / Changed / Fixed / Removed / Deprecated / Security), adds a bullet under that section in your repo's CHANGELOG.md, creates the file if it doesn't exist, and auto-stages it for your next commit.
  • Also save marketing drafts to docs/announce/ (in Settings) — when on, the marketing copy is also written to docs/announce/<date>-<slug>.md so you can find it later from Finder.

Each leg is independently optional. A common combination is "CHANGELOG only" for internal-feeling changes, "Slack + CHANGELOG" for team-facing work, and the full four for public-facing launches.

Step 5: Review the draft

5

What you see and what you can edit

After you click Draft announcement, the AI runs three sequential prompts behind the scenes:

  1. Summary — reads commits + diff, produces a one-line title (≤60 chars) and a 3-sentence summary paragraph.
  2. Marketing — takes that summary and produces the tweet / LinkedIn / blog variants.
  3. Category — classifies the change for CHANGELOG (Added / Changed / etc.).

The review pane shows all of it stacked: title, summary, Slack post (editable in a text editor — this is the only leg you can edit inline), the three marketing variants (each with a copy button), and the CHANGELOG bullet preview.

If anything looks off — too long, wrong tone, miscategorized — go back and tweak the prompts in your own message to the AI later, or just edit the Slack pane in place. The marketing variants are best treated as starting drafts you copy into your own social tools and refine.

Step 6: Wire up Slack (one time)

6

Incoming webhook setup

For the Slack leg to work, you need an incoming webhook URL. In Slack, go to Apps → Manage → Custom Integrations → Incoming Webhooks, pick the channel, and copy the webhook URL. Then in LingCode: Settings → Credentials → Slack incoming webhook, paste, save.

Until that's set, the "Post to Slack" toggle in the popover is disabled and there's an inline note pointing you to Settings. The webhook URL is stored in Keychain under service LingCode.

If you're not on Slack: just leave the toggle off forever and use the marketing + CHANGELOG legs only.

Step 7: Send

7

What happens on click

Click Send from the review pane. Announce runs each enabled leg in sequence:

  • The Slack post goes out as an HTTP POST to your webhook.
  • The marketing drafts are written to docs/announce/<date>-<slug>.md if the save toggle is on.
  • The CHANGELOG entry is written and staged.

You'll land on a result pane that lists each leg with a checkmark or X, the outcome message ("Posted," "Saved to draft-2026-05-19-magic-link.md," "Appended bullet to the Added section — staged for your next commit"), and a folder icon to reveal the file in Finder for the marketing draft and CHANGELOG.

If a leg fails, the others still complete — a 404 from your Slack webhook won't block the CHANGELOG write. The result pane shows you exactly which leg failed and why.

Behind the scenes the bookmark advances to your current HEAD (unless you're in Two-step mode), so your next Announce only covers commits added after this point.

A typical loop

Here's the rhythm you'll fall into after using Announce a few times:

  1. You finish a feature. Commit. Push.
  2. Click the paperplane in the toolbar.
  3. Glance at the commit list — confirms it's the right range. Toggle off any legs you don't want this time.
  4. Click Draft announcement. Wait 10–20 seconds while the AI streams.
  5. Skim the Slack draft, tweak one sentence, copy the tweet into your social tool, click Send.
  6. The CHANGELOG file is now staged. Add it to your next commit (or commit it on its own as "Update CHANGELOG").

Total time: about a minute. Compare to manually writing five variants from scratch.

Announce is not the same as Ship. The Mobile menu's "Ship…" item (and ⌘⇧⌥S) opens a different feature — the iOS App Store deploy wizard. Announce is for telling people. Ship is for distributing the binary. Don't confuse them.

What's next