Open source · MIT licensed
Your self-hosted social scheduler,
on your own Cloudflare account.
Mastodon, Bluesky, LinkedIn, Threads and X. Write a draft, customize it per platform, then publish it now or schedule it. No subscription — it runs on Cloudflare's free plan.
git clone --depth 1 https://github.com/deepakness/cogsend.git cogsend && cd cogsend && npm install && npm run setup Node 22.12+, a Cloudflare account, and five minutes.
Features
A thread editor, a queue and a retry rule.
Enough to run a presence on five 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.
- Per-destination results
- 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 destination carries its own status.
Retries handle themselves
Retryable failures back off on their own — five attempts, then they park in Failed.
Media with alt text
Up to four images per post, with alt text on each one.
Link previews
See the card a URL will make while you are still writing the post.
A personal API key
Drafts, publishing and scheduling from scripts, Shortcuts and cron. It can never connect accounts or mint keys.
A scheduler you can see
Settings shows the running version, whether the tick is arriving, and when a newer release is out.
Install
Three steps, about five minutes.
You need Node 22.12+ and a Cloudflare account with Workers, D1 and R2. 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/ deepakness/ cogsend.git cogsend $ cd cogsend && npm install && npm run setup Check it worked
Read-only. It confirms 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 and X each need a developer app of your own first.
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. 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.
Do I need a developer app for every platform?
No. Mastodon and Bluesky connect with what you already have. LinkedIn, Threads 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.
X also charges for posting. Its API is pay-per-use, so fund a small balance before you connect it. See OAuth app setup.
How do I update it later?
Pull the new code and run the release script. That runs the tests, applies database migrations, rebuilds and deploys:
git pull npm ci npm run deploy:releaseSettings tells you when a newer release is out. Your data is never in the repository, so a pull cannot touch it — posts, images and secrets live in your Cloudflare account.
Where do my posts and credentials live?
In your Cloudflare account, in the database and bucket that setup 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 clone, one setup command, and the Cloudflare account you already have. No signup, no trial, no monthly bill, and no one else holding your credentials.
git clone --depth 1 https://github.com/deepakness/cogsend.git cogsend && cd cogsend && npm install && npm run setup