Getting started
Deploy your first instance
Choose a domain, provision Cloudflare resources, deploy, and verify federation from end to end.
Before you begin
SiliconBeest is a Fediverse server that runs on the Cloudflare developer platform without a traditional server.
Changing the instance domain after federation begins breaks existing follows, conversations, and ActivityPub actor URIs cached by remote servers. Finalize the domain before launch.
- A Cloudflare account with Workers enabled
- A dedicated domain managed by Cloudflare
- Node.js 22.13+, 24.11+, or 26+
- A GitHub account and a repository with Actions enabled
Install and provision resources
- 1 Create a repository from the template
Select Use this template in SJang1/siliconbeest to create your own repository.
- 2 Run the installation script
The interactive installer provisions D1, R2, KV, Queues, and the required keys.
- 3 Add the GitHub values
Store the generated resource IDs as repository variables, and the API token and account ID as secrets.
- 4 Run the Deploy workflow
Run the Deploy workflow in Actions to deploy all three Workers and the database migrations.
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/SJang1/siliconbeest/HEAD/scripts/install.sh)"Required GitHub settings
| Type | Key | Purpose |
|---|---|---|
| Secret | CLOUDFLARE_API_TOKEN | API token used to deploy Workers and data resources |
| Secret | CLOUDFLARE_ACCOUNT_ID | Cloudflare account identifier |
| Variable | PROJECT_PREFIX | Prefix used for Cloudflare resource names |
| Variable | INSTANCE_DOMAIN | The finalized instance domain |
| Variable | INSTANCE_TITLE | The display name of the service |
| Variable | REPOSITORY_URL | Public source repository URL |
| Variable | REGISTRATION_MODE | open, approval, or closed |
| Variable | D1_DATABASE_ID · KV_*_ID | Resource identifiers created by the installer |
Verify your first federation
Bot Fight Mode can return 403 for ActivityPub requests to /users/* and /inbox. Configure a WAF Skip rule for ActivityPub content types.
- Confirm the local actor URL in the /.well-known/webfinger response
- Check the /nodeinfo/2.0 response and software name
- Find and follow the local account from a remote Mastodon or Misskey account
- Confirm two-way delivery of public posts and custom emoji reactions
- Ensure the federation queue and DLQ are not accumulating in the admin console