Bun

Free Bun Bluesky bot hosting.

Bluesky's SDK is TypeScript, and Bun runs TypeScript as it is. Add a built-in WebSocket for Jetstream and SQLite for state, and a bot needs very little else.

Libraries

Libraries that run here

@atproto/api

The official SDK, and the reason Bun suits this platform: your .ts entry file and the SDK's types run with no compile step between them.

@skyware/bot

Runs from the same package.json it would use under Node. The quickest route to a bot that answers mentions.

Plain WebSocket

Jetstream is JSON over a WebSocket, and Bun has WebSocket built in. A watching bot can subscribe with a URL and a message handler.

Deploying

Getting it running

  1. 1

    Upload your project

    Drag the folder in or push it over SFTP, without node_modules. It is installed on deploy.

  2. 2

    bun install runs for you

    Your package.json is read and installed before the bot starts. The same file works under Node, so choosing Bun is not a commitment.

  3. 3

    Point us at your entry file

    bot.ts or index.ts, uncompiled. Handle and app password come from the environment; the session goes into a file or a SQLite row.

Memory

What actually fits in 256 MB

Plenty for a posting or reply bot, which sits in tens of megabytes on Bun just as it would on Node.

A Jetstream bot stays small if it filters on the server and handles events as they arrive. Where state has to outlive the process, such as the posts already answered or the session itself, bun:sqlite keeps it on your 512 MB of disk rather than in memory.

FAQ

Questions

Does the official SDK work on Bun?

It runs the same code it runs on Node. If a release ever misbehaves, the same package.json runs unchanged on the Node.js runtime, so you are never stuck.

Where should the session live?

In bun:sqlite or a JSON file, written every time the SDK tells you the session changed. Resume from it at start-up so a crash loop never burns through the login limit.

Do I need to compile TypeScript first?

No. Point us at the .ts file and it runs. Bun strips the types without checking them, so run tsc locally if you want errors caught first.

Does Bun read a .env file?

Automatically. A .env uploaded with your code sits in your file manager like any other file, so environment variables set on the server are the safer home for an app password.