Write once. Shape every channel. Know what shipped.
One social publishing workspace for founders, creators, teams, and agencies.
Start a 14-day trial · Self-host · Docs · Discord
You already have the material. A launch. An update. Something you learned the hard way. OpenPost takes that and makes it fit each channel. It shows you what each destination allows before you publish, lets you schedule it, and then shows you what actually happened. No hidden rules.
- A composer that respects each channel. Write once, then fix the text, media, and timing for each account. It will not let you push a 280-character thread to LinkedIn and pretend it worked.
- A queue that remembers. Everything scheduled lives in the database. Restart the server and it is still there. You see if it is queued, published, failed, or waiting to retry.
- One place for your work. Publications, media, calendar, analytics, comments — all in the same workspace. Not five tabs pretending to be one product.
- Tools where you need them. Edit an image. Cut a short video. Make a meme. Write alt text. It saves back to your library. No need to open another app.
- Same app everywhere. Web, Android, API, CLI, MCP. Same words, same permissions, same state. I built it that way because different behavior on different surfaces breaks trust.
You will not find a CRM, ad manager, or social listening here. There are better tools for that. I run the hosted version for you. Self-hosting is there if you want to own the box, the backups, and the provider setup yourself.
Use the Hosted service if you want OpenPost managed for you.
To run it yourself:
git clone https://github.com/getopenpost/openpost.git
cd openpost
cp .env.example .env
# Set OPENPOST_APP_URL and replace the two example secrets in .env.
docker compose up -dOpen http://localhost:8080, create the first account, and connect a social account. The default setup uses one container, SQLite, local media, and database-backed jobs. The current amd64 image is published at ghcr.io/getopenpost/openpost.
Read the self-hosting quickstart · Installation reference · Hosted and self-hosted boundary
OpenPost talks to X, Mastodon, Bluesky, LinkedIn profiles and company pages, Threads, Facebook Pages, Instagram, TikTok, YouTube, and Discord webhooks.
An adapter means I built it, not that it is ready on the hosted service. Some need app review. Some need the right account type or scopes. Those checks stay separate so you see the real state before you publish.
The checked-in public certification manifest contains 0 exact provider-format claims.
No Hosted service provider-format certification claim is current. Implementation descriptions do not assert Hosted service availability.
Provider readiness · Platform limits
Give a token to the API, CLI, or MCP server and it works like you do. Same workspace. Same permissions. You can automate a post without handing over your social logins. I use one permission model everywhere. Separate models are where things quietly break.
CLI guide · MCP guide · API reference
OpenPost uses Go, Svelte 5, SvelteKit, Bun, and Devenv.
direnv allow
devenv shell -- setup
bun run verifyRead CONTRIBUTING.md and the development docs before opening a pull request.
If OpenPost is useful to you, star the repository. It helps other self-hosters find the project and tells us which work is worth continuing.
OpenPost is licensed under AGPL-3.0-only. Report vulnerabilities privately through the security policy.




