Self-hosted · 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 monthly fee, ever.
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.
Publish now or schedule
Send it immediately or pick an offset. Every destination carries its own status.
Retries handle themselves
Retryable failures back off on their own — five attempts, then they park.
Two-factor, one account
TOTP on the single admin account, with backup codes.
A personal API key
Read and write scopes for scripts, Shortcuts and cron jobs.
Media with alt text
Up to four images per post, alt text per image, or one MP4 for LinkedIn.
A scheduler you can see
Settings shows the running version, whether the tick is arriving, and when a newer release is out.
Disconnect safely
Dropping an account keeps what it already published; only its queued posts go.
Install
Three steps. Free forever.
Setup is the whole install. Free, because Cloudflare is already paying for the hard part.
- 1
Clone it
Your fork works too. You need Node 22.12+ and a Cloudflare account with Workers, D1 and R2 available.
- 2
Run setup
It sets up D1, R2, generates secrets, applies migrations, deploys, and signs in once against the live Worker.
- 3
Sign in and connect
Open the URL it prints. The first sign-in asks for an authenticator app. Then add accounts — LinkedIn, Threads and X each need a developer app of your own first — OAuth app setup.
Questions
Before you deploy.
What does it cost?
Nothing to us. 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