Self-hosting
Run Flowblocks locally or on your own infrastructure with Node.js and Postgres.
Flowblocks needs Node.js and a Postgres database. The free Developer plan runs locally. Enterprise plans cover self-hosting in production and VPC installs.
Requirements
- Node.js 20.9 or newer
- pnpm
- Postgres
Quick preview
To try it without setting anything up:
pnpm install
pnpm previewpnpm preview writes .env.local if it is missing, starts an embedded Postgres on port 54329, applies migrations, and runs the dev server at http://localhost:3000.
Full setup
Install
pnpm install
cp .env.example .env.localGenerate the secrets
openssl rand -base64 32 # BETTER_AUTH_SECRET
openssl rand -hex 32 # INTEGRATION_ENCRYPTION_KEYPut both in .env.local.
Point at your database
Set DATABASE_URL to your Postgres connection string, then apply the schema:
pnpm db:migrateAdd a model key
Set at least one of OPENAI_API_KEY, ANTHROPIC_API_KEY or XAI_API_KEY. See Environment variables.
Start
pnpm devThe encryption key
INTEGRATION_ENCRYPTION_KEY encrypts connector tokens and MCP tokens at rest. It must be 64 hex characters.
Set the key before you store real tokens, and keep it stable. Changing it makes every stored token unreadable, and each person has to reconnect their accounts.
If the key is unset, Flowblocks derives one from BETTER_AUTH_SECRET. A value of the wrong length is rejected rather than ignored, so a placeholder cannot silently fall back to the auth secret.
Sign-in
Sign-in is email and password, and every page requires it. A new account confirms its email with a six-digit code. Set RESEND_API_KEY and EMAIL_FROM to send it; without them, a development server prints the code in its log. To add social sign-in, set GITHUB_CLIENT_ID and GITHUB_CLIENT_SECRET, or reuse the Google client from the connectors.
| Provider | Callback |
|---|---|
| GitHub | http://localhost:3000/api/auth/callback/github |
http://localhost:3000/api/auth/callback/google |
Connectors
A connector only appears as connectable once its client id and secret are set. Each provider has a setup guide: Google, Microsoft, Dropbox and every other provider. Restart the server after changing them.
Trying it without a model
Set AGENT_DEMO=true to skip the model. The Agent step then shapes the message and calls a tool on a connected step, so a local preview spends nothing.