Skip to content

v1.31.0

Latest

Choose a tag to compare

@deepakness deepakness released this 11 Nov 11:51
· 7 commits to main since this release

Bluesky posts link hashtags, mentions and addresses the way Bluesky's own app does, Settings is split into sections, Posts reaches every post and says plainly what failed, and the composer tells you what would stop a post before you press anything.

Bluesky and X links

  • Hashtags link on Bluesky. #buildinpublic opens Bluesky's hashtag search, as a post written in Bluesky's app does. Before, it was plain text.
  • Mentions link and notify. @alice.bsky.social links to that account and notifies it. CogSend looks each handle up just before posting, up to eight per post; a handle that doesn't exist, or a lookup that fails, leaves the mention as plain text and never fails the post.
  • Addresses typed without https:// link, such as cogsend.com or cogsend.com/docs, and keep the text you typed. A link in brackets keeps its closing ), and a link in quotes no longer takes the closing quote with it.
  • X counts cogsend.com as X does, as 23 characters, so a post near 280 can no longer pass the counter and then be refused by X.
  • Links with https:// are posted exactly as before, so the counter is unchanged for them. A Bluesky account connected through Zernio is unchanged.

Posts

  • A failed post says Failed, not "Published 2 days ago". A post that went out on some accounts and failed on others is marked Partly published, reads "Published to 2 of 3", and is listed under both Published and Failed.
  • Every post is in reach. Posts reads 100 deliveries at a time, where a delivery is one post on one account. Load older posts pages back through history, Load later posts on Scheduled reads on through what is waiting, and a tab's count reads like 100+ while there is more.
  • A post split by a page edge says so. When only some of a post's accounts are loaded, its card shows Load 1 more account in place of Reschedule and Cancel, so neither can change part of a post and leave the rest as it was.
  • Search finds posts not loaded yet, and says when it shows only the first of many matches.
  • An action that fails on a card says why on that card. Unscheduling a whole post says it moved to Drafts, with a link there. Times stay current while the page is open, and Reschedule won't confirm a time that has passed.
  • Links in a card open in a new tab, on Posts and on a draft's preview link.
  • Insights links each account's failed count to that account's failed posts.

Composer

  • A line above Publish says what would stop the post, such as "X: post 2 is 14 over the limit", before you press anything.
  • An account that needs reconnecting is named before anything is sent: Publish and Schedule stop with "Reconnect Mastodon, or uncheck it". Such an account can't be newly checked, and one already checked can still be unchecked.
  • Keyboard shortcuts stay quiet behind a dialog. With Your media, a media viewer or a confirm open, Cmd/Ctrl + Enter doesn't publish and Cmd/Ctrl + S doesn't open the browser's Save page.
  • The counter shows whose limit it counts. An upload shows on its card, and images dropped meanwhile wait their turn and count what is already there.
  • Schedule and the accounts list take focus when they open and give it back on Escape.

Settings

  • Each section has its own page: Account (profile, email and password, two-factor), Posting, Scheduled publishing, API & MCP and Instance, with tabs at the top. A bookmark to /settings#instance still opens Instance. Your name in the profile menu opens Account.
  • Scheduled publishing shows one status box with Tick now, and the external cron token under its own heading.
  • Updates: one Install button that is always there, with a line under it saying what's missing until it can run, a Cancel that closes the form, and a top line that says whether you're up to date or which version is on offer. An unfinished update opens the form on that same release, so Install continues it.

Accounts and getting started

  • A badge only when something is wrong: Expired with Reconnect and Check, or Needs attention. Long posts and Compact links are switches, and Disconnect is a labelled button that still asks first.
  • A wrong Bluesky handle or app password says to check both, and an account password that Bluesky meets with an email code says to use an app password. It used to read as "needs reconnect".
  • With no accounts yet, home, the composer and Accounts point to connecting one. On a Deploy-button install, Accounts offers Zernio first for X, Threads, Instagram and LinkedIn.
  • The claim form asks for the password twice, and sign-in links to how to recover a lost password or authenticator.
  • Two-factor: Copy says whether it worked, backup codes can be downloaded as a file, and replacing your authenticator can be cancelled.

Also

  • Counts are posts, not deliveries. Home and Insights count one post sent to three accounts as one scheduled post, and home names when the next one goes out.
  • A timeout reads as slow to answer, not as a network failure.
  • Buttons and labels are in sentence case, and the app says "accounts" and "checked" throughout. Each browser tab is titled with its section, buttons and switches are larger on touch screens, and the header lines up with the page on a phone.
  • The logo's cog has rounded corners.
  • npm run doctor on a pre-release says when the stable release it leads up to is out.
  • It includes the Posts fix from v1.30.2.

For API and MCP users

  • GET /api/queue and GET /api/drafts take optional before (the next cursor from the page before) and q (a text search), and answer with a next cursor. The queue pages through what is waiting and then through history; when a page ends partway through a post's waiting deliveries, waitingTotals maps its draft id to how many are waiting in all. Without before, the first page is what it was.
  • GET /api/insights keeps totals.scheduled as it was and adds totals.scheduledPosts.
  • Publishing or scheduling to an account that isn't connected still answers 400, with new wording: "One or more accounts aren't connected or no longer exist — reconnect or uncheck them". A script matching the old text needs updating.

Upgrade

  • From Settings: Settings → Instance offers v1.31.0. When it finishes, the page may reload onto the new Account section, since the version you're leaving runs that reload; Instance is one of the tabs at the top.
  • Installed with the Deploy button: this is a minor release, so the daily run doesn't install it. Press Update to v1.31.0 on GitHub in Settings → Instance, or run the Update CogSend action yourself with the tag left empty.
  • From a checkout: git fetch && git checkout v1.31.0 && npm ci && npm run deploy:release.
  • On a 1.31.0 beta: this is the same code as v1.31.0-beta.5, and Settings offers it as usual.

No migration, no new binding, and no need to reconnect.

Full changelog: v1.30.2...v1.31.0