How to post GitHub releases to X (Twitter)
Three honest paths for getting GitHub releases onto X (Twitter): post by hand, a DIY GitHub Action against the X API, or a release-native tool - plus the 2026 API pricing change that quietly broke the cheap DIY route.
What this solves
Someone ships from GitHub and wants each release to show up on X (Twitter), and is weighing posting by hand, building a GitHub Action, or using a tool.
How S2P helps
Understand the three real paths from a GitHub release to an X post, including a working GitHub Action sketch and the 2026 X API pricing that changes the math, then pick the one that fits your cadence.
Key takeaways
- X is the build-in-public channel: releases belong there, and threads suit bigger launches.
- Manual posting is fine at low volume; the cost is the rewrite and remembering to do it.
- A DIY GitHub Action works, but since early 2026 the X API has no free write tier and bills per post.
- A release-native tool removes the OAuth and billing setup and adds drafting, threads, and approval.
Section 1
Three honest paths
Getting a release onto X is easy to describe and has quietly gotten more expensive to automate yourself. There are three real paths, and which one wins depends on how often you ship and how much API plumbing you want to own.
The first path is manual: when you cut a release, you open X, rewrite the release notes into a human post or a short thread, and publish. The second is DIY automation: a GitHub Action fires on the release event, calls the X API, and posts. The third is a release-native tool that connects your GitHub repository and your X account, drafts the post for you, and routes it for approval before anything goes live. All three are legitimate; they just trade off effort up front against effort per release.
The wrinkle that trips people up in 2026 is that X is no longer the free-to-automate channel it was. Unlike a Discord or Slack webhook, there is no simple no-auth URL you POST to, and unlike a few years ago there is no free write tier on the API. Posting to X means an X developer app, OAuth credentials, and a paid API plan - a detail most older tutorials never mention because they were written when the free tier still existed. We will be explicit about that cost, because it changes which path is actually the cheap one.
So the framing for the rest of this guide is practical and honest. We will cover what a good release post looks like on X, walk the manual path because it is genuinely fine at low volume, sketch a real DIY GitHub Action so you can see exactly what you would maintain, spell out the current X API pricing, and then explain where a release-native tool earns its keep. No path is universally right - the goal is to help you pick the one that matches how often you ship.
- Manual: rewrite the release into a post or thread and publish by hand.
- DIY: a GitHub Action calls the X API on the release event.
- Tool: a release-native product drafts, threads, and routes for approval.
- X has no no-auth webhook and, since early 2026, no free API write tier.
Section 2
What a good release post looks like on X
X rewards a single sharp idea and punishes changelog dumps. Before you automate anything, get clear on the shape of the post, because that shape is what a raw release body never has.
A release on X is not your release notes. The changelog is a list of what changed; an X post is one sentence about why the most important change matters, plus a link. The winning pattern is benefit first, proof second, link last: lead with the outcome a user gets, back it with the concrete thing you shipped, and end with the release or docs URL so the click is obvious. Version numbers and repo detail can stay when they build credibility with a developer audience, but they are seasoning, not the headline.
The second decision is single post versus thread. Most releases are one post: a patch, a fix, a small feature. A meaningful launch - a new capability, a rewrite, a milestone - reads better as a short thread: the headline post, one or two posts on the why and the how, and a closing post with the link and a call to try it. Threads are where X beats every other channel for build-in-public momentum, because each post is a fresh chance to be seen and the thread tells a story a single post cannot. Whatever you automate has to be able to produce both shapes, or it will flatten every launch into the same generic line.
This is also why X is the natural home for building in public. Developers live there, releases are inherently timely, and a steady drumbeat of shipped-this posts compounds into an audience that watches your roadmap. If that is the game you are playing, the release is your best recurring content, and the whole point is to make posting it cheap enough that you never skip one. We go deeper on the practice itself in the build-in-public guide; here we are focused on the mechanics of getting the post out.
- Benefit first, proof second, link last - not a changelog dump.
- One post for routine releases; a short thread for real launches.
- Keep version and repo detail only where it builds developer trust.
- X is the build-in-public channel, so the release is your recurring content.
Section 3
Path 1: the manual way (and why it is fine at first)
Do not stand up a paid API app for a problem you have twice a month. Manual posting is the correct default until the rewriting cost starts to hurt.
The manual path is straightforward. When you publish a release, you read the release notes, translate the changes into user value, write the post or thread in your own voice, and publish. Because you are the one writing, each post gets full attention, the tone is unmistakably human, and you decide in the moment whether this release deserves a single line or a thread. For a team that ships an X-worthy release every week or two, this is completely reasonable and often better than automation.
The reason manual posting breaks down is cadence, not difficulty. If you ship several times a week, the context switch starts to bite: you have to remember to do it, open the composer, re-read the release, rewrite it, and decide on the format, every single time. That friction is precisely what makes build-in-public quietly stop happening on busy sprints. The post that never gets written is the most common failure mode, and it is invisible because nothing breaks - the work just silently does not ship to your audience.
So treat the manual path as the honest starting point and watch for the signal that it is time to automate: you keep skipping posts you meant to write, or the rewriting is eating time you would rather spend building. When that signal arrives you have two automation options, and the next sections cover both with their real trade-offs, including the one cost every old tutorial forgets to mention.
- Manual posting is the right default at low volume.
- You keep full control of voice and single-post-versus-thread format.
- It breaks down on cadence, not difficulty.
- The signal to automate: you keep skipping posts you meant to write.
Section 4
Path 2: the DIY GitHub Action (a realistic sketch)
You can build this, and the workflow itself is short. Here is an honest sketch, including the two parts everyone underestimates: X OAuth and the API bill.
A DIY automation runs in GitHub Actions and triggers on the release event. The workflow reads the release from the event payload and posts it to X. In practice most people do not hand-sign the OAuth 1.0a request themselves - they reach for a community action such as ethomson/send-tweet-action - because signing X API requests by hand is fiddly. The YAML below is a realistic version: it fires when a release is published and posts the tag plus the release URL.
The sketch is deliberately honest about the setup behind those four secrets. To fill them you create an X developer app, apply for the right access level, generate an API key and secret plus an access token and secret, and - this is the new part in 2026 - attach the app to a paid API plan, because there is no free write tier anymore. The workflow is twenty lines; getting to the point where those twenty lines can run is the actual project, and it now involves a billing decision, not just a token.
It is also worth being clear about what this workflow does not do. It posts a single line, so every launch looks the same and there is no threading. It publishes the moment the release fires, with no human reading the post first. There is no retry if X returns an error, no record tying the post back to the release, and no way for a non-engineer to change the copy without editing CI. For an internal experiment that is fine. For your public brand account, those gaps are exactly the things that make people nervous.
.github/workflows/tweet-on-release.yml
name: Tweet on release
on:
release:
types: [published]
jobs:
tweet:
runs-on: ubuntu-latest
steps:
- name: Post release to X
# Needs an X developer app on a PAID API plan (no free write tier
# since early 2026) plus four OAuth 1.0a keys stored as repo secrets.
uses: ethomson/send-tweet-action@v1
with:
status: |
Shipped ${{ github.event.release.tag_name }}
${{ github.event.release.html_url }}
consumer-key: ${{ secrets.X_API_KEY }}
consumer-secret: ${{ secrets.X_API_SECRET }}
access-token: ${{ secrets.X_ACCESS_TOKEN }}
access-token-secret: ${{ secrets.X_ACCESS_TOKEN_SECRET }}Section 5
The catch nobody mentions: the X API is not free anymore
Most how-to-tweet-your-releases tutorials were written when the API had a free tier. It does not. This one fact changes which path is actually the cheap one.
Here is the part that quietly broke the classic DIY recipe. X retired the old free posting tier, and in early 2026 it moved new developers to pay-per-use pricing by default: there is no free write tier to sign up for, and posting is billed per request. A plain post costs a small per-request fee, and - critically for release announcements - a post that contains a link costs meaningfully more per request than one without. Read that twice, because your release post almost always contains a link: the release URL is the entire point.
So the DIY math is not what the old tutorials imply. You are not automating for free; you are standing up a paid X developer app and paying per release you announce, at the higher link-bearing rate, for the rest of the automation's life. For a hobby repo that ships occasionally the cost is small in absolute terms, but it is no longer zero, and it comes with the developer-app application, the paid plan, and the token upkeep on top. Legacy fixed-price tiers still exist for developers who were already on them, but as a new build you are starting on metered pricing.
None of this means do not automate. It means price it honestly before you build, and compare like for like. The relevant comparison is not free DIY versus a paid tool - it is a paid X developer app plus the workflow you maintain, versus a tool that already carries a managed X connection and folds the posting into a plan. When you frame it that way, the DIY cost advantage that made the old recipe attractive is largely gone, and what is left is a question of who owns the plumbing.
- No free write tier for new developers as of early 2026.
- Posting is billed per request under the default pay-per-use pricing.
- A post with a link costs more per request - and release posts always have a link.
- Compare a paid X app plus your workflow against a tool with a managed connection.
Section 6
Where the DIY path breaks
The workflow is twenty lines. The maintenance, the billing, and the missing brand-safety layer are the project. Be honest about which one you are signing up for.
The first gap is auth and billing lifecycle. X access tokens can be rotated or revoked, and the paid plan behind the app is now something to monitor - if the plan lapses or the token breaks, your release automation stops silently and you usually find out because someone notices the posts stopped, not because anything alerted you. Maintaining an authenticated, metered connection to a third-party API is a small but real ongoing responsibility, not a one-time setup.
The second gap is everything around the post that makes it safe and good on X. There is no approval step, so a premature or badly worded release note goes public instantly on your brand account. There is no threading, so every launch is flattened into one generic line and you lose the format that actually performs on X. There is no channel-native drafting, so you either post the raw tag or build and maintain your own templating. There is no retry on failure, no audit trail tying a post to its release, and no way for a marketer to tweak the copy without touching CI. Each of these is buildable; together they are a product, not a script.
This is not an argument against DIY. If you have one repo, one X account, an engineer who enjoys this, a tolerance for occasional silent breakage, and a paid API plan you are happy to run, a custom workflow is a legitimate choice. It is an argument for honesty about the cost. The deeper build-versus-buy trade-off - and where GitHub Actions is genuinely the right tool - is laid out in the GitHub Actions versus webhooks comparison; the short version is that Actions is excellent for CI and awkward as a brand-safe publishing pipeline.
- Token and paid-plan upkeep, with silent failure when either lapses.
- No approval: a bad release note hits your brand account instantly.
- No threading: every launch collapses into one generic line.
- No retries, audit trail, or non-engineer editing without touching CI.
Section 7
Path 3: the release-native tool path
The point of a tool is not to make the API call. It is to make the OAuth, the billing, and the approval layer someone else's problem - and to give you threads back.
A release-native tool inverts the trade-off. Instead of standing up a paid developer app and paying per release plus ongoing maintenance, you do a one-time connection and the per-release cost drops toward a quick approval click. S2P connects to your GitHub repository and to X through a managed connection, so the credential lifecycle and the API access sit behind the product rather than in your CI secrets and your billing dashboard. When you cut a release, it drafts an X post from the release notes in your brand voice - a single post for a routine ship, or a thread for a real launch - and routes it for approval before anything publishes.
That approval step is the substantive difference, not a nicety. A public account needs a human to confirm the post is accurate, on-message, and free of internal phrasing before it goes live, and the DIY path has nowhere for that human to stand. With a tool, the release fires the draft, a person reads and edits it in seconds, and only then does it publish - with the final post URL tied back to the release that created it. You also get the format X actually rewards: rules decide which releases are worth posting, and a big launch becomes a thread instead of a flattened one-liner. You keep editorial control; you lose the blank composer, the OAuth dance, and the metered-API babysitting.
The honest comparison is the same one this whole guide makes. If you ship rarely, post by hand. If you want full control and are happy to run a paid X app and own the workflow forever, build the DIY Action. If posting releases to X is a recurring part of how you grow and you would rather not maintain an X developer app and its bill, a release-native tool is the path that stays cheap as your cadence increases. If you are weighing S2P against an X-first scheduler, the Typefully versus S2P comparison lays out where a release trigger beats a content calendar.
- Managed X connection - no OAuth keys or metered API app in your CI.
- Drafts a single post or a full thread from the release notes.
- Approval before publishing keeps the brand account safe.
- Per-release cost drops to a quick review as your cadence grows.
Section 8
Which path fits your team
Same decision as every channel, with one X-specific twist: the DIY path now carries a paid-API cost, so the old free-automation advantage is largely gone.
Map it to your cadence and your appetite for plumbing. If you announce an X-worthy release every week or two, post by hand: it is free, fully controlled, and the rewrite is manageable. If you ship often, want automation, have an engineer who will own it, and are fine running a paid X developer app, the DIY GitHub Action is a legitimate build - just price the per-post API cost and the token upkeep honestly first. If release posting is central to how you grow and you would rather not run an X app or flatten your launches into one-liners, a release-native tool is the path that scales without adding maintenance.
The X-specific twist is the one this guide keeps returning to. On most channels the DIY route is at least free; on X in 2026 it is not, because there is no free write tier and link-bearing release posts sit at the higher per-request rate. That does not kill DIY, but it collapses the gap between rolling your own and using a tool: both now have a real cost, so the deciding factor is who maintains the plumbing and whether you want approval, threads, and an audit trail included. When posting releases to X is something you want to keep doing for years, the release-native path is usually the one that stays cheap in the way that matters - your time.
Whatever you choose, the goal is the same: make announcing a release cheap enough that you never skip one. That is the whole game with building in public on X. If you want the managed version of this exact workflow, the GitHub-to-X use case and the X integration show how S2P drafts, threads, and publishes, and pricing starts free so you can wire up one repo and one account before paying anything.
- Ship rarely: post by hand - free and fully controlled.
- Ship often with an engineer to own it: DIY Action, but budget the paid X API.
- Growth depends on it: a release-native tool with approval, threads, and audit.
- On X in 2026 the DIY route is no longer free, which narrows the gap to a tool.
FAQ
Questions this article answers
Is there an official GitHub Action to post to X (Twitter)?
There is no official GitHub Action from GitHub or X for posting releases to X. Community actions such as ethomson/send-tweet-action exist and work, but you are still responsible for creating an X developer app, storing four OAuth 1.0a credentials as repository secrets, and running the app on a paid API plan, since there is no free write tier anymore.
Can I automatically tweet GitHub releases?
Yes. Either build a GitHub Action that triggers on the release event and calls the X API, or use a release-native tool that drafts and publishes for you. The DIY path posts a single line with no approval or threading; a tool like S2P drafts a post or thread in your brand voice, routes it for approval, and ties the published post back to the release.
Is the X (Twitter) API still free for posting in 2026?
No. X retired the old free posting tier, and new developers are on pay-per-use pricing by default with no free write tier. Posting is billed per request, and a post that contains a link - which a release announcement almost always does - costs more per request than a plain post. Budget for that cost before you build a DIY automation.
Should I post GitHub releases to X by hand?
At low volume, yes. If you ship an X-worthy release every week or two, posting by hand gives each post full attention, lets you choose a single post or a thread, and avoids any API billing or token upkeep. The signal that it is time to automate is when you keep skipping posts you meant to write or the rewriting eats time you would rather spend building.
Can a release go out as a thread instead of a single post?
Yes, and bigger launches usually should. A patch or small fix fits one post, but a meaningful launch reads better as a short thread: the headline, one or two posts on the why and how, and a closing post with the link. A DIY script has to build threading itself; S2P can draft either a single post or a thread from the same release.
What does a tool add over a DIY tweet script?
It removes the OAuth keys and the paid-API app from your CI, drafts a channel-native post or thread instead of a raw tag, and adds an approval step so a human confirms the post before it goes public. It also gives you trigger rules, retries, status, and an audit trail tying each post to its release, none of which a short script provides.
Related guides and pages
Where to go next
Hand-picked pages that go deeper on the workflow, channels, and tooling covered above.
