Bluesky

Free Bluesky bot hosting.

Scheduled posters, reply bots, feeds from elsewhere and bots that watch the network for something specific. An app password and your code is the whole setup.

Choose a runtime

Pick your language

All three are installed and tested. Each page covers the libraries, the deployment and what fits in 256 MB for that runtime specifically.

Three kinds of Bluesky bot

Posting bots are the simplest: they log in, create a post on a timer or when something happens elsewhere, and wait. Reply bots poll their own notifications for mentions and answer them. Watching bots follow a live stream of the network and act on the posts that match something.

All three only ever connect outwards. None needs a domain, a certificate or an open port, which is exactly the kind of program a free allocation is for.

Do not drink from the firehose

The firehose is every event on the whole network, encoded in a binary format that has to be decoded before you can filter it. A bot that subscribes to it on 25% of a core falls behind within minutes, and a bot that falls behind eventually gets disconnected.

Jetstream is the alternative built for exactly this: the same events as JSON, filtered on the server to the record types or accounts you ask for. A watching bot here should use Jetstream. A reply bot does not need a stream at all; polling its own notifications every few seconds is lighter still.

Save the session, do not log in every time

Creating a session is limited far more tightly than ordinary API calls. A bot that logs in afresh on every start works until it crashes in a loop, then locks itself out for hours at the moment you most need it back.

Your 512 MB of disk persists across restarts, crashes and redeploys. Write the session to a file when it is created or refreshed, resume from it on start, and only log in again when resuming fails.

Be a bot people are glad to see

Use an app password, never your account's real password, so the bot can be cut off without touching anything else. Say in its profile that it is automated and who runs it.

Bluesky's guidance for automated accounts comes down to consent: reply to people who mention or follow the bot, not to strangers whose posts contain a keyword. A bot that ignores that gets muted, blocked and labelled by users faster than any rule would catch it, and our acceptable use policy forbids unsolicited messaging anyway.

FAQ

Questions

Do I need a domain or a public URL?

No. Posting, polling notifications and reading Jetstream are all outbound connections. Nothing on the internet needs to reach your bot.

Can I host a custom feed generator here?

Not well. A feed generator is a web service that Bluesky calls over HTTPS at a public hostname, and what you get here is an allocated port rather than a hostname with a certificate. The bot that decides what goes into a feed can run here; the endpoint that serves it belongs somewhere else.

Where do I get credentials?

Create an app password in the bot account's settings. That and the account's handle go into environment variables on your server here. An app password can be revoked on its own if it ever leaks.

Can the bot use its own domain as a handle?

Yes, and that is set up with a DNS record on a domain you own. It is separate from hosting: the bot runs here and the domain only proves who it is.

Node.js, Python, Bun or Ruby for a Bluesky bot?

Bluesky's own SDK is TypeScript, so Node and Bun get new protocol features first. The Python SDK is well kept and complete for bots. Choose the language you already write; all four fit comfortably here. Ruby has the skyfall and minisky gems.