Self-hosting

Deploy Rowflare to your Cloudflare account

One button creates everything Rowflare needs in your account. Budget $5/month for the Cloudflare Workers Paid plan; that covers the whole team, with unlimited users.

Rowflare needs the Cloudflare Workers Paid plan, which costs $5/month per Cloudflare account. The free plan is not enough for a real team:

The Paid plan includes 25 billion rows read per month, which is far more than a team normally uses. See the cost table.

One-click deploy

  1. Click Deploy to Cloudflare above and sign in to Cloudflare. Cloudflare forks the repository into your GitHub or GitLab account and builds it.
  2. Confirm the resource names it proposes (you can keep the defaults).
  3. Open the URL Cloudflare shows when the deploy finishes, for example https://rowflare.your-subdomain.workers.dev.
  4. Sign up right away. The first user to sign up becomes the owner of the instance. After that, signup is closed and other people join by invite from the owner.

What the button creates

ResourceUsed for
WorkerServes the web app and the REST API, and routes each base to its Durable Object.
Durable Object namespaceOne SQLite-backed Durable Object per base. All rows, fields, views and formulas live here.
D1 databaseUsers, workspaces, memberships, invites and API tokens.
R2 bucketAttachments, including files copied from Airtable.
Cron triggerHourly maintenance jobs.

Settings (environment variables)

Set these in the Cloudflare dashboard under your Worker, Settings, Variables and Secrets, or in wrangler.jsonc. Put keys and passwords in secrets, never in plain variables.

VariableValuesWhat it does
MODE"selfhost" (default) or "cloud"selfhost: the first user to sign up becomes the owner and everyone else joins by invite. cloud: open sign-up for anyone (for running a hosted service). There are no plans or payments in the open-source edition.
ALLOW_SIGNUP"false" (default) or "true"Allow anyone who can reach the instance to create an account. Keep it off for a private team.
APP_URLhttps://your-domainPublic URL of the instance, used to build absolute links such as invite links.
SECRET_KEYany long random stringEncrypts the AI keys and mail credentials that workspace owners save. Changing it makes saved credentials unreadable.
EMAIL_FROMnoreply@your-domainSender address for system and account email through the Cloudflare Email Service binding EMAIL.
AUTH_EMAILunset or "code"code: people sign in with a 6-digit code mailed to them instead of a password. Needs account email.

Manual deploy from the command line

If you prefer not to use the button, or want to change the code first:

git clone https://github.com/rowflare/rowflare.git
cd rowflare
npm install
npx wrangler login
npm run deploy

npm run deploy builds the web app and deploys the Worker with its Durable Object, D1, R2 and cron bindings. Wrangler creates the D1 database and R2 bucket on the first deploy, and the Worker creates its D1 tables on the first request, so there is no separate migration step.

Run it with Docker

No Cloudflare account? The Docker image runs the same Worker code on any server, in workerd (Cloudflare's open-source Workers runtime). Durable Objects, D1 and R2 are stored as SQLite databases and files in /data, so mount a volume there.

docker run -d --name rowflare \
  -p 8787:8787 \
  -v rowflare-data:/data \
  ghcr.io/rowflare/rowflare:latest

Or run docker compose up -d with the docker-compose.yml from the repository. The settings above are passed as environment variables, for example -e APP_URL=https://rowflare.example.com. Images are published for linux/amd64 and linux/arm64. Put a reverse proxy with HTTPS in front of it, and sign up right away: the first user becomes the owner.

Updating

Pull the latest code and deploy again. Database migrations run as part of the deploy.

git pull
npm install
npm run deploy

If you used the button, Cloudflare connected your fork to Workers Builds: sync your fork with the upstream repository on GitHub and the new commit deploys automatically.

With Docker, run docker compose pull and docker compose up -d. The data volume is kept.

Backups

What it costs on Cloudflare

Everything below is included in the $5/month Workers Paid plan. You only pay more if your account goes above the included amounts.

Cloudflare Workers Paid plan, $5/month minimum, checked 2026-10-12. Sources:Durable Objects pricing, Workers pricing.
UsageIncluded in $5/monthAbove the included amount
Durable Object requests1 million / month$0.15 per million
Durable Object duration400,000 GB-s / month$12.50 per million GB-s (idle time with WebSocket Hibernation is not billed)
SQLite rows read25 billion / month$0.001 per million
SQLite rows written50 million / month$1.00 per million
SQLite storage5 GB-month$0.20 per GB-month

Worked example (estimate)

A team that runs 2,000 filters or sorts a day on a 50,000-row base reads about 50,000 x 2,000 x 30 = 3 billion rows a month, well inside the 25 billion included. Recomputing a formula column on that base 100 times a month writes about 5 million rows, inside the 50 million included. A 50,000-row base at about 678 bytes per row is roughly 34 MB of row data, far below 5 GB. That team pays $5/month.

Estimate based on the published prices above; your Cloudflare bill is the source of truth. The included amounts are shared across everything in your Cloudflare account.

Next steps