Everything shipped under “platforms”, across every version, newest first.
Added
Notey can answer comments on your own Bluesky and Mastodon posts. It is off by default. Each platform has its own mode (off, suggest or auto, and auto asks you to confirm), plus a rules editor, a test box that never sends, a list of recent replies with delete and never reply again, and a kill switch in the Inbox and in Settings. The daily digest says how many replies went out and how many are waiting for you.
Added
A Library panel ranks your X posts (archive imports, captures and posts NoteSurge published) by engagement and turns the one you pick into an Instagram carousel with a caption, saved as a draft. Nothing is posted automatically. Archived tweets can now become carousels too, and Notey and MCP clients can do the same.
Changed
GIF search now uses GIPHY only. A picked GIF is stored with the rest of your media instead of linking to GIPHY, and it stays animated: X posts it on its own, Telegram sends it as an animation, and Threads, Instagram and Bluesky leave it off with a warning. Compose tells you under the media strip before you schedule, and auto-watermark no longer flattens a GIF to one frame.
Changed
Post to in Compose lists your connected platforms first and groups them by family when you have more than eight. Platforms you have not connected sit behind a Not connected disclosure that says why and links to Settings. With more than six connected you get a name filter, and the picker shows how many of your platforms are selected.
Changed
When a note goes to Dev.to, Hashnode, Paragraph, Lemmy or a Listmonk campaign, any HTML you wrote in it (a details block, a line break, a kbd, an image with a width, a div with an alignment, an embed) now arrives as the text you typed instead of being rendered there. This is for every note, not only text imported from a document, so a note behaves the same however its text got there. Also changed on those five services: a link written in angle brackets arrives as plain text; a < that begins something that looks like a tag in ordinary text is sent as text, so it shows as you typed it; a code span that contains a pipe character has its < sent as text too; and a note with a numbered list item (other than 1) right after a code block, or one too long or too tangled to analyse, is sent with every < as text, code included. Code blocks and code spans without a pipe, headings, lists, links and emphasis are otherwise sent as you wrote them.
Added
Settings can add your mark to images as they publish, with a position, an opacity and the platforms to apply it on. If marking an image fails, the post still goes out.
Added
An X Article in the queue is now published at its slot instead of being left as a draft on X. If X refuses (for example, the account has no Premium), the queue card says so and links to the draft.
Changed
A video picked in Compose is also stored on NoteSurge’s own media host, so X and the other platforms NoteSurge posts to directly get the video instead of a refusal or a post without it.
Changed
A note that missed its time by too long is now held instead of going out late, and the queue offers to reschedule the overdue ones. You choose how late is too late (6, 12 or 24 hours). Failed notes get a recovery panel that says what went wrong and lets you retry, and a banner warns you when a connected account needs signing in again before a post fails on it.
Added
Turn on auto-repost in Compose or on a queue card and NoteSurge reposts your post on X, Bluesky, Mastodon, Threads or LinkedIn later, optionally only once it reaches a level of engagement. Each repost shows in the activity log.
Added
The Research tab can now look up accounts on X (using your own connected X account), Ghost sites and Hashnode blogs, alongside the platforms it already covered.
Fixed
Every Connect a platform button now opens the Platforms section of Settings, the nudge for accounts with nothing connected shows again, and a failed connection returns you to the platform list with the reason. Compose picks your only connected platform for you and explains when Add to queue is unavailable.
Added
Analytics now has a Follower growth card. NoteSurge records your follower count once a day for each connected account and shows the current number, the change over 1, 7 and 30 days, and a small trend line. History starts the day you connect, and a change reads n/a until there is a snapshot that old.
Fixed
A new account that started by connecting X, Bluesky or another platform could hit "Connect a Substack account first" at several entry points. Your workspace is now set up the moment you need it, so any platform works as a starting point.
Fixed
X rotates its sign-in tokens every time they refresh, and the old tokens were being thrown away, so the second post after an expiry could fail. The new tokens are now kept.
Added
X and Threads posts you publish through NoteSurge now report likes, reposts and views in Analytics, top posts and best times. Posts published before this cannot be measured. If a platform refuses the read, the Combined view says why instead of showing zeros. Export CSV in the Combined view downloads the rows on screen, grouped by post, week or month.
Added
Under More X options: who can reply, Made with AI and Paid partnership labels, posting to a Community, and tagging people in photos. The editor gains an emoji picker, focus mode (Cmd or Ctrl+Shift+F, Esc to leave), paste from Google Docs, Notion or Word that keeps paragraphs and lists, and earlier/later buttons for reordering media. LinkedIn now has a preview with an approximate "see more" fold.
Added
Write as a thread splits a draft into separate posts, each with its own counter and images. Split at the cursor (button or Alt+Enter), join, move or delete posts, pick numbering (none, 1/ or 1/n), and add a finisher post that can quote your opening one. A preview shows exactly what each platform will send. Plain text still auto-splits as before.
Changed
Connect X, Threads and Bluesky in Settings and NoteSurge publishes to them directly. If you pick one of them without connecting it, you now get a clear "Connect it in Settings" message right away instead of a note that never goes out. Notes that were already queued are left alone.
Fixed
Whop was missing from ALL_PLATFORMS in schedule-note.ts — schedule requests including "whop" silently stripped it before the publish worker ever saw it. Added "whop" to ALL_PLATFORMS, added the matching whopConfigured pre-flight block, and added a source-lock regression test (#765, PR #769).
Fixed
Lens/Warpcast DOM extraction no longer titles captured posts with the author name; Mastodon engagement fields now map correctly on insert; Twitch capture handles authorHandle null and host-check edge cases.
Added
An article-type note targeting X now publishes as a real draft on X (never auto-published) at schedule time: markdown is converted to X Articles' DraftJS-style content_state (snake_case), images upload first and wire into atomic media blocks, and the resulting draft edit URL surfaces back in the note result so you finish publishing in X's own editor. Reuses the native X OAuth connect token seam (afk2-x-oauth-connect); X Premium on the publishing account and missing OAuth surface as honest errors. Draft-first matches the existing Substack newsletter pattern — X Articles have no scheduling primitive, so this is the automation ceiling.
Fixed
A regression introduced when native X OAuth shipping landed caused notes that targeted X alongside Threads/Bluesky to never publish to X at all: the schedule-time guard keyed off the note-level typefullyDraftId (which also exists for non-X drafts), so the X connection was skipped and the reconciliation pass then marked the whole note published once its Threads draft went out. The gate now keys off the note's resolved X connection row — native OAuth connections publish direct regardless of other platform drafts. If the connection resolves to an error, it fails honestly with ConnectionNotFoundError instead of silently dropping X.
Added
Connect LinkedIn (Settings → Platforms → LinkedIn) and publish text + one image straight to your own feed via the official Posts API — no partnership review required for personal-profile posting (w_member_social). The app was registered on your behalf; tokens last ~60 days and an expired one refuses honestly with "reconnect". Company-Page posting stays out of scope (needs a separate MDP review).
Added
Asset generation stage 4: a rendered quote card can now be scheduled like any note — pick platforms and a time in the queue, and the card publishes as the note's image.
Added
Connect your own X account directly (Settings → Platforms → X) via OAuth 2.0 + PKCE and publish straight to your timeline via the X API v2 — bypassing Typefully for X specifically. Text posts (280-char limit), up to 4 images per note, thread chaining, and automatic token refresh on expiry. The existing Typefully route for X and Threads keeps working unchanged for users who don't connect native X; new native-X notes publish direct while legacy notes are untouched.
Changed
De-gate wave: the app no longer requires an invite to explore, the left rail is a platform-agnostic Connections list, the right rail is Notey, Settings → Platforms reorders cleanly with a "connect any platform" hero, and the landing copy stopped pretending this is a Substack-only tool. It is a general content harness now.
Added
Connect your Facebook account once and NoteSurge publishes as your Page: text goes to the feed, one attached image becomes a photo post with your note as the caption, and one video rides up as a native upload. Managing several Pages? Connect again to add another.
Added
Scheduled notes land as chat announcements in your own Twitch channel via the official Helix API. Over-length messages are refused up front in plain language instead of failing at send time.
Added
Notes can drop into your own Kick channel’s chat through the official developer API — connect once with your Kick account and treat it like every other platform.
Added
Farcaster’s Warpcast, VK, self-hosted Listmonk newsletters, and Lemmy communities are now first-class publish targets, each connecting with your own API credentials and behaving like the rest: drafts queue, schedules hold, failures tell you why. Dribbble publishes your note as a shot — attach one image and it becomes the artwork; notes without an image are refused up front in plain language instead of failing silently.
Changed
The Platforms tab used to be three different lists stapled together — connectable platforms as tall accordion rows, plus two separate tile grids for things on hold — so finding one platform meant scrolling and hunting. It's now a single grid grouped by how each platform actually works: Direct-publish (your own credential), Via-Typefully, Passive capture, and Coming later.
Changed
The character limits behind the compose counter used to be maintained in three separate places that could quietly disagree. They all read from one table now, with a test that fails if any copy ever drifts again.
You should not see any difference day to day — same limits, same warnings. The visible change: over-limit messages now name the platform the way the rest of the app does ("over telegram's 1024-character limit" rather than inconsistent capitalization), and a note that needs media on a media-only platform is rejected up front instead of failing at publish time once such platforms exist.
Added
Analytics used to mean six separate sections, each locked to one platform, with no way to combine them. There's a new Combined view at the top now: pick any mix of Substack, Bluesky, X, and LinkedIn and see them summed into one score, with a breakdown underneath so the total is never a mystery.
Want an actual side-by-side instead of one big total? Hit "Compare two groups" and pick a second mix, everything on X against everything on Substack, say, and you get two summaries next to each other.
Added
Cross-post to Bluesky or X and the repurposing model used to lose track of you completely. It only ever saw what happened on Substack, so a post that quietly took off somewhere else never fed back into what NoteSurge thinks is worth repurposing.
That gap is half closed now. Real likes, reposts, and impression counts come back from both platforms and get folded into the same ranking your Substack numbers already feed.
Added
Two more places to publish, and both are the zero-setup kind: paste in your own API key and you’re connected.
No OAuth screen, no waiting on an app review.
Added
Set an engagement threshold on an X or Threads post, 50 likes, say, and once it crosses that line, NoteSurge fires off a reply you already wrote in advance.
Added
You can connect more than one account on the same platform now, a personal Discord and a brand Discord, say, and pick which one a given note actually goes out through instead of being stuck with whichever one connected first.
Added
A "Post now" button publishes right away, to Substack and anything else you’ve directly connected, instead of making you wait for the next hourly run.
Added
Nostr, Mastodon, and Slack all joined the direct-posting list, the same zero-OAuth deal Bluesky already had.
Nostr just needs a keypair. Mastodon wants a personal access token from whatever instance you’re on. Slack takes an incoming webhook URL. None of it requires anyone’s approval but your own.
Added
Post straight to a Discord channel through an incoming webhook, or to a Telegram chat through a bot token from @BotFather.
Neither one touches OAuth, neither one goes through Typefully, and neither one needs anybody’s app review.
Added
Post to Bluesky directly now, using an app password you generate in Bluesky’s own settings.
No OAuth screen, no third-party relay in the middle, no extra subscription to pay for.