Setup
Everything you need before deploying to Fly.io: the alchemy package, a Fly organization, and an API token stored in a profile.
Prerequisites
Section titled “Prerequisites”- Bun (recommended) or Node.js 22+
- A Fly.io account
- Docker for Services (Alchemy builds and pushes an image). Raw Machines with a public image do not need it. Neither do Sprites.
Create a Fly organization
Section titled “Create a Fly organization”Sign in at fly.io/dashboard. A personal
org is created with the account. Tokens are scoped to an org — the
org slug is what Fly.App uses when you omit orgSlug (Alchemy
reads it from the current token).
Generate an API token
Section titled “Generate an API token”In the dashboard:
- Open Account → Access Tokens (or run
fly tokens create orgif you have flyctl). - Create an organization token with permission to manage Apps and Machines.
- Copy the token — Fly shows it only once.
The official environment variable is FLY_API_TOKEN. That token is
enough for Apps, Machines, Services, Sprites, Postgres, Redis, and
Tigris. Alchemy mints a Sprites bearer from it when you deploy a
Sprite.
Create a project directory
Section titled “Create a project directory”mkdir my-app && cd my-app && bun init -ymkdir my-app && cd my-app && npm init -ymkdir my-app && cd my-app && pnpm initmkdir my-app && cd my-app && yarn init -yInstall
Section titled “Install”bun add "alchemy@latest" "effect@rc" "@effect/platform-bun@rc" "@effect/platform-node@rc"npm install "alchemy@latest" "effect@rc" "@effect/platform-bun@rc" "@effect/platform-node@rc"pnpm add "alchemy@latest" "effect@rc" "@effect/platform-bun@rc" "@effect/platform-node@rc"yarn add "alchemy@latest" "effect@rc" "@effect/platform-bun@rc" "@effect/platform-node@rc"Connect alchemy to Fly
Section titled “Connect alchemy to Fly”There is no separate credentials step. The first time you run
alchemy deploy (or plan, dev, destroy) on a stack that uses
Fly.providers(), alchemy walks you through an interactive login
with two options:
- API Token — paste the token you generated above. It’s verified
against the Machines API and saved under
~/.alchemy/credentials/<profile>/. - Environment Variables — reads
FLY_API_TOKENfrom the environment on every run (plus an optionalFLY_API_HOSTNAMEto override the Machines API root, defaulthttps://api.machines.dev/v1). This is the method for CI — when alchemy detectsCI=trueit skips the prompt and uses the environment automatically.
Either choice is saved to your default
profile and reused on every subsequent
command.
To re-run the setup later (e.g. to rotate the token, or configure a
separate prod profile):
alchemy login --configurealchemy login --profile prod --configureInspect what’s stored (secrets are redacted):
alchemy profile showState storage
Section titled “State storage”Fly has no object-storage state backend of its own, so pick one of:
Alchemy.localState()— state on disk under.alchemy/next to your code. Zero setup; right for solo projects and trying things out.- A cloud state store — if you also use Cloudflare or AWS, pass
Cloudflare.state()orAWS.state()so state is shared with your team and CI. See State Store.
Next steps
Section titled “Next steps”- Tutorial part 1 — deploy your first App.
- Sprites — an Effect program that hibernates. No Docker.
- Fly overview — the map of resources and guides.