Cross-posting for creators
Post once, echo wide.
Lands onX, Bluesky, Threads, Mastodon, LinkedIn, Facebook, Instagram, YouTube Shorts, TikTok
Post where you already like posting. We republish it everywhere else you keep an audience, and tell you plainly what landed.
Spent the morning reading the firehose. Every post on the network, arriving as it happens. Still the most underrated thing about this place.
14:02:11 · you posted this
An illustration. The timings are the shape of a real delivery: Bluesky and Mastodon push to us on an open socket, so detection costs nothing and what is left is one write per destination. A poller would still be waiting.
- platforms, with their real limits held in one file
- 10platforms, with their real limits held in one file
- to Bluesky and Mastodon, on a socket we keep open
- 0.4sto Bluesky and Mastodon, on a socket we keep open
- characters, the widest limit the splitter works to
- 63,206characters, the widest limit the splitter works to
How it works
Three steps, and only one of them is yours.
- 01
Connect an account
Pick the account you post from and the ones you want it echoed to. Bluesky takes an app password, the rest use OAuth. Nothing publishes until you switch a flow on.
- 02
Post as you always do
Keep posting where you like posting. We notice it there. Or compose here once and send it out to every destination together. This step is the only one that is yours.
- 03
Watch it land everywhere
Each destination reports back in a sentence you can act on: when it arrived, or why it did not. Not a spinner, and not a dashboard you have to refresh.
Why it is faster
We hold the socket open.
A tool running on serverless functions cannot keep a connection to anything. It wakes on a timer, asks each of your accounts whether something happened, and goes back to sleep. A shorter timer is then something it can sell you. We run one long-lived process on our own hardware, so on the platforms that push, there is no timer to shorten.
What a serverless competitor does for every account you own, including the two that could have pushed. The wait is the poll interval, and the shorter one is a paid tier.
Bluesky's Jetstream firehose and Mastodon's streaming API push each new post to a socket we already have open. Included on every plan, because it costs us less than polling did.
One second is 0.33% of five minutes. At this width the teal bar is about three pixels, and that is the honest drawing of it — not a shortened bar standing in for a shorter wait.
Where the sub-second figure applies
Bluesky and Mastodon only. Those are the two platforms that hand us a stream. On X, Threads, Instagram, YouTube Shorts, TikTok and Twitch there is no free push to subscribe to, so we poll — tightening the interval after a burst of activity and backing off while an account is quiet. That is fast. It is not instant, and we will not print “instant” next to it.
Fail closed
We would rather miss a post than publish one you did not mean to share.
A missed cross-post is one click to fix. An unwanted one is public, permanent, and occasionally a disclosure problem. So when a rule cannot decide, the answer is no — and the ledger tells you which rule decided it and why.
- bluesky09:14
Rough cut of the cover, still deciding on the type #noferry
Skipped#noferry — skipped, as you askedAnywhere in the post, in any case. You can set a phrase of your own instead, and it works the same way.
- bluesky11:02
Completely agree with this — @someone else said it better than I could
SkippedReply to @someone else — not carriedA reply drags a stranger's context to an audience that cannot see it. Replies inside your own thread are carried.
- instagram16:47
Two weeks with the new pack and it has not let me down #ad
SkippedContains #ad — skipped by defaultA disclosure that fails to travel with the post is a regulatory problem, not a styling one. You can turn this off per flow. It is never off to start with.
Before anything goes out
A dry run shows exactly what would publish, to which accounts, split into which threads. Flows start switched off. You turn one on when the preview is what you expected, and not before.
And never twice
Each delivery is recorded against the post that caused it, so a retry after a platform outage cannot double-post. An edit is matched by content hash: the same post does not go out again wearing new words.
Every rule, in full
- #noferry, or a phrase you choose
- Skipped, case-insensitive, anywhere in the post.
- A reply to someone else
- Skipped. Replies inside your own thread carry through.
- A quote of someone else
- Skipped. Quoting yourself is carried.
- #ad or #BrandPartner
- Skipped by default, and never off to start with.
- Over the character limit
- Skipped, unless you asked for threads on that platform.
- An edit of something already sent
- Matched by content hash. The same post never goes twice.
- Instagram trial reels
- Skipped. They are hidden from your own followers on purpose.
- Composed in Echowide
- Never ingested back in. The tool does not feed itself.
Platforms
10 platforms, and the limits that come with them.
These are the exact numbers the rules engine works from, read from the one file that holds them. A post that will not fit is stopped here, before a platform rejects it out there. 2 of the 10 push their posts to us; the rest are polled.
- Xpolled
280 characters
No free push exists here, so we poll adaptively.
- Blueskyreal-time
300 characters
The platform pushes; we hear it in under a second.
- Threadspolled
500 characters
No free push exists here, so we poll adaptively.
- Mastodonreal-time
500 characters
The platform pushes; we hear it in under a second.
- LinkedInpolled
3,000 characters
No free push exists here, so we poll adaptively.
- Facebookpolled
63,206 characters
No free push exists here, so we poll adaptively.
- Instagrampolled
2,200 characters
No free push exists here, so we poll adaptively.
- YouTube Shortspolled
no text limit
No free push exists here, so we poll adaptively.
- TikTokpolled
2,200 characters
No free push exists here, so we poll adaptively.
- Twitchpolled
no text limit
No free push exists here, so we poll adaptively.
Substack is missing on purpose. The only way to post there is a session cookie that grants full access to your account, expires without warning, and sits outside their terms. We would rather be one platform short.
Post once. Echo wide.
Connect one account, make one post, and watch the ledger fill in. Switch the flow on when you are satisfied it does what you expected, and not before.
Nothing publishes until you switch a flow on.