licenseMITsourceopen
Your self-hosted social scheduler,
on your own Cloudflare account.
Mastodon, Bluesky, LinkedIn, Threads, Instagram and X. Write a post with images, video or a thread, customize it per platform, then publish it now or schedule it. No subscription — it runs on Cloudflare's free plan.
No terminal, nothing to install: Cloudflare copies a prebuilt release into your GitHub and deploys it. Bring a Cloudflare account and an encryption key.
Prefer a terminal?Features
A thread editor, a queue and a retry rule.
Enough to run a presence on six networks from one place — with the delivery stats that tell you what broke, and none of the vanity charts you would never open.
Posts
Everything you scheduled, in one list
Scheduled, published, failed and draft, with the account icons right there. Cancel or reschedule a queued post without opening it.
- A result per account, and partly published posts marked as such
- Cancel and reschedule straight from the list
Insights
Delivery stats that tell you what broke
Published against failed, bucketed by your local days, with the same period before it alongside. Failures are grouped by reason, so a platform-wide problem looks different from one bad post.
- 7, 30 and 90 day ranges, in your own timezone
- Failure reasons grouped, not a wall of API errors
- Last post at a glance, so a silent week is obvious
Per-platform overrides
Rewrite the post for X without touching the LinkedIn version.
Threads that split themselves
Paste a long draft and it becomes a thread that fits the tightest platform you picked, counted the way each one counts.
Publish now or schedule
Send it immediately or pick a time. Every account carries its own status.
Retries handle themselves
Retryable failures back off on their own — five attempts, then they park in Failed.
Images and video
Up to four images or one video per post, with alt text on each. Your browser converts the video so every platform takes it.
Your media
Every image and video you have posted, ready to attach to the next post without storing it twice.
Link previews
See the card a URL will make while you are still writing the post.
An API and an MCP server
Let scripts, Shortcuts and AI agents like Claude Code draft, schedule and publish with a personal key. It can never connect accounts or mint keys.
No developer app needed
Rather not register apps with X, Threads, Instagram and LinkedIn? Connect them through Zernio instead.
A scheduler you can see
Settings → Instance shows the running version, whether the tick (the check every minute that sends what is due) is arriving, and installs a newer release.
Install
One click, about five minutes.
You need a Cloudflare account with Workers, D1 and R2, and a GitHub or GitLab account. Nothing to install.
Generate your key
A random key, made in your browser and sent nowhere. Keep a copy in your password manager: the next two steps ask for it.
Deploy to Cloudflare
Sign in to Cloudflare and GitHub. Cloudflare copies a prebuilt release into a repository of yours, creates the database and the bucket, and deploys it. Paste the key when the form asks.
Create your account
Open your new URL, enter the same key, an email and a password, and scan the QR with an authenticator app. Later releases install from your repository, no token needed.
Prefer a terminal?
For changing the code, or deploying without GitHub. You need Node 22.17+, 24 or 26+ and the same Cloudflare account; setup is the whole install.
Clone and run setup
It creates the D1 database and the R2 bucket, generates the secrets, creates your account, applies migrations and deploys. Safe to re-run.
$ git clone --depth 1 https://
github.com/ cogsend/ cogsend.git cogsend $ cd cogsend && npm install && npm run setup Check it worked
Read-only. It confirms the Cloudflare account, the database, the bucket, the secret and the deploy. Every failure prints the command that fixes it.
$ npm run doctor # add -- --app-url <url> to ask the live app too
Sign in and connect
Open the URL setup printed, sign in, and scan the QR with an authenticator app. Mastodon and Bluesky connect straight away; LinkedIn, Threads, Instagram and X each need a developer app of your own (an OAuth app, which gives the Worker its client id and secret) or Zernio.
Every command, flag and failure mode is in the install and deploy guide.
Questions
Before you deploy.
What does it cost?
Nothing, for a personal instance. There is no subscription, nothing to cancel, and no account with us — you deploy it to your own Cloudflare account, on Cloudflare's free plan. A personal instance stays well inside it.
The one thing Cloudflare asks for is a card on file for R2, the bucket that stores your images and videos. Workers and D1 never ask for one, and you are only charged if you go past the free limits.
What happens if I hit a Cloudflare limit?
- Storage. R2 keeps the first 10 GB free, and traffic out is always free.
- Cron triggers. Five per account, shared with every other Worker you run. If they are taken, drive the scheduler from your own timer instead.
- The database. D1 pauses for the day past 100,000 rows written. It resumes at midnight UTC, and nothing is lost.
Numbers can change: Workers limits, D1, R2.
Which platforms does it post to, and what can each do?
Mastodon, Bluesky, LinkedIn, Threads, Instagram and X. A post can carry text, up to four images with alt text, or one video. Mastodon, Bluesky, Threads and X post a thread as a thread; LinkedIn and Instagram get it joined into one post.
Instagram needs a photo or video, and sends one photo as a photo post, two to ten as a carousel, and a video as a Reel. X allows 280 characters, or 25,000 on a paid plan, and the counter follows the strictest account you picked. See every platform's limits.
Do I need a developer app for every platform?
No. Mastodon and Bluesky connect with what you already have. LinkedIn, Threads, Instagram and X need an app you register with them first, because they issue the client id and secret your Worker uses. Pick one and the app shows you exactly what to create, takes the credentials in a form, and can hand the whole setup to a browser agent.
X also charges for posting. Its API is pay-per-use, so fund a small balance before you connect it. See OAuth app setup.
If you would rather not register apps, you can connect them through Zernio instead. It has a free plan, though X needs a card there.
Can AI agents like Claude Code use CogSend?
Yes. Your instance includes an MCP server, so Claude Code, Codex or any MCP client can draft, schedule and publish with your personal API key. A read-only key lets an agent look without posting. See MCP server.
Can more than one person use it?
Not as separate users. An instance has one admin account, with one email, password and authenticator, and no roles. To get feedback on a draft without sharing the login, send a preview link, which shows the draft read-only. Scripts and AI agents use an API key instead of the login.
Anyone who wants their own account can deploy their own instance, which costs nothing on the free plan.
How do I update it later?
CogSend tells you when a release is out, with a dot on your avatar and a line in Settings. Installed with the Deploy to Cloudflare button, run the Update CogSend action in your repository, which checks the release's signature and lets Cloudflare deploy it, or let it install patch releases by itself. No Cloudflare token is needed.
Any install can also update from Settings with a Cloudflare token, which it can remember, locked with your password, or from a checkout with
npm run deploy:release. Your posts, images and secrets live in your Cloudflare account, so an update cannot touch them. See Updating.Where do my posts and credentials live?
In your Cloudflare account, in the database and bucket the deploy created for you. Platform tokens are encrypted at rest with AES-256-GCM, and the single admin account signs in with an authenticator app and backup codes. Nothing about your instance lives with us.
Yours in about five minutes.
One click and the Cloudflare account you already have. No signup, no trial, no monthly bill, and no one else holding your credentials.