Run Cloudflare Workers anywhere.
- AWS
- Google Cloud
- Azure
- Rivet Cloud
- Your servers
The same developer experience, without the runtime limits, for a fraction of the bill.
Built for serious scale.
Run it where you want.
Next to your database, in the cloud and region you choose.
-
Rivet Cloud
Fully managed
- Runs on
- A dedicated cluster on AWS or Google Cloud, in the region you choose
- Operated by
- Rivet
-
BYOC
Your cloud, our ops
- Runs on
- Your AWS, Google Cloud or Azure account
- Operated by
- Rivet, over an outbound connection
-
Self-hosted
Open source, Apache 2.0
- Runs on
- Any cloud, Hetzner or on-prem
- Operated by
- You
Same work. A fraction of the bill.
Cloudflare's meters, priced on raw AWS.
- cheaper compute
- 4.8×
- cheaper storage
- 8.7×
- cheaper writes
- 5.7×
OpenOrange
Same work. Less bill.
AWS Graviton · us-east-1AWS on-demand Graviton (ARM) prices in us-east-1, provisioned 40% above use for autoscaling. Reserved pricing, spot and credits are lower. Cloudflare and AWS list prices checked 2026-10-08.
- DO computeDurable Object compute, per GB-hour. Cloudflare: $12.50 per million GB-s. OpenOrange: r7g.xlarge (Graviton), 32 GB for $0.2142/h, plus 40% headroom. 4.8× cheaper. /GB-h $0.045 $0.0094 4.8×
- Workers CPUWorkers compute, per vCPU-hour. Cloudflare: $0.02 per million CPU-ms, plus $0.30 per million requests. OpenOrange: c7g.xlarge (Graviton), 4 vCPU for $0.145/h, plus 40% headroom. No request fee.. 1.4× cheaper. /vCPU-h $0.072 $0.051 1.4×
- DO SQLiteDurable Object SQLite, per GB-month. Cloudflare: $0.20 per GB-month. OpenOrange: S3 Standard in your account. 8.7× cheaper. /GB-mo $0.20 $0.023 8.7×
- SQLite writesSQLite rows written, per million rows. Cloudflare: $1.00 per million rows, Durable Objects and D1. OpenOrange: One SQLite write per row, at the measured S3 request cost per write. 5.7× cheaper. Measured on Rivet: 5,000 concurrent agents, each writing a 64-byte SQLite upsert every 10 s, made 1.32 billion writes a month for $232 in S3 requests. Your cost per write depends on your workload. /1M rows $1.00 $0.18 5.7×
- D1D1, per GB-month. Cloudflare: $0.75 per GB-month. OpenOrange: S3 Standard in your account. 32.6× cheaper. /GB-mo $0.75 $0.023 32.6×
- KVKV, per GB-month. Cloudflare: $0.50 per GB-month. OpenOrange: S3 Standard in your account. 21.7× cheaper. /GB-mo $0.50 $0.023 21.7×
- WorkflowsWorkflows, per GB-month. Cloudflare: $0.20 per GB-month. OpenOrange: S3 Standard in your account. 8.7× cheaper. /GB-mo $0.20 $0.023 8.7×
- KV writesKV writes, per million writes. Cloudflare: $5.00 per million writes, deletes or lists. OpenOrange: One SQLite write per KV write, at the measured S3 request cost per write. 28.4× cheaper. Measured on Rivet: 5,000 concurrent agents, each writing a 64-byte SQLite upsert every 10 s, made 1.32 billion writes a month for $232 in S3 requests. Your cost per write depends on your workload. /1M writes $5.00 $0.18 28.4×
- Queue msgsQueues messages, per million messages. Cloudflare: $0.40 per million operations, 3 per message. OpenOrange: Two SQLite writes per message, send and ack, at the measured S3 request cost per write. 3.4× cheaper. Measured on Rivet: 5,000 concurrent agents, each writing a 64-byte SQLite upsert every 10 s, made 1.32 billion writes a month for $232 in S3 requests. Your cost per write depends on your workload. /1M messages $1.20 $0.35 3.4×
- Workflow stepsWorkflows steps, per million steps. Cloudflare: $0.80 per 100,000 steps. OpenOrange: A few SQLite rows per step: log, state and result, at the measured S3 request cost per write. 45.4× cheaper. Measured on Rivet: 5,000 concurrent agents, each writing a 64-byte SQLite upsert every 10 s, made 1.32 billion writes a month for $232 in S3 requests. Your cost per write depends on your workload. /1M steps $8.00 $0.18 45.4×
- Egress taxTraffic inside your VPC is free. Every call from Cloudflare back to your database or APIs in AWS pays AWS egress, $0.09 per GB.$0.00 Free
- Cloud creditsAWS, Google and Azure credits and committed spend pay for OpenOrange. Cloudflare is a second bill.Accepted
Keep this for your CFO
No runtime limits.
128 MB is all the memory a Cloudflare Worker gets. OpenOrange runs your Workers and Durable Objects on machines you choose, so the limits are your hardware's.
| Limit | Cloudflare Workers Paid | OpenOrange |
|---|---|---|
| Memory per Worker or Durable Object | Up to your machine's memory Node.js heap: up to about 4 GB by default, configurable | |
| CPU time per request | No cap | |
| Cron, queue and alarm handlers | No cap | |
| Open connections per request | OS limits | |
| Storage per Durable Object | No cap | |
| Worker bundle | No cap | |
| Node.js | Stock Node.js |
Workers Paid plan, from Cloudflare's docs. Free plan limits are stricter.
Don't sacrifice your DX.
Your wrangler.jsoncBindings, environments, build commands and .dev.vars work as they do with Wrangler. stays the source of truth. Same commands, new name.
$ orange dev
● Ready in 1.4s
Local http://127.0.0.1:8787
$ orange deploy -e staging
✓ Deployed pied-piper to staging
URL https://staging.piedpiper.com
$ orange deploy --dry-run
Dry run. Nothing was built or sent to Rivet Cloud.
Get started.
Run this project's Cloudflare Worker on Rivet with OpenOrange. First, ask me where it should run: on my machine, on a Rivet cluster, or on my own Rivet Engine. Then read https://github.com/rivet-dev/open-orange/blob/main/README.md and follow its quickstart. Do not change my app code.
-
Step 1: Install
Install the
orangeCLI globally, then run it in your Worker project. Your code and your Wrangler configuration do not change.$ pnpm add -g open-orange
-
Step 2: Run your Worker
Reads your Wrangler configuration. Each Durable Object runs as a Rivet Actor with its own SQLite database.
$ orange dev
● Ready in 0.9s
Local http://127.0.0.1:8787
-
Step 3: Deploy
Builds an image of your Worker and rolls it out to your own cloud (AWS, GCP, Azure) or on-prem servers. Or use Rivet Cloud: a fully managed, dedicated cluster on AWS or Google Cloud, in the region you choose.
$ orange login
$ orange link --cluster <name>
$ orange deploy
✓ Deployed my-worker
URL https://api.example.com
Migrate your data without downtime.
orange migrate copies every Durable Object and D1*Cloudflare doesn't provide a way to migrate D1 live, so requests to a D1 database are interrupted while its data copies. This takes a few minutes. database from Cloudflare while your app keeps serving. No maintenance window, no lost writes.
Supported bindings.
Every Cloudflare binding OpenOrange runs, plus the fetch handler and runtime globals. Each is documented with its status, configuration and known differences from Cloudflare.
- Fetch handler
- Durable Objects
- KV
- D1
- R2
- Queues
- Workflows
- Cron Triggers
- Static Assets
- Cache API
- Service bindings
- Hyperdrive
- Workers AI
- Browser Rendering
- Rate Limiting
- Secrets Store
- Tail Workers
- Version Metadata
- Worker Loader
- Sandbox
- Runtime globals
Questions.
Wait, wasn't Cloudflare supposed to be cheaper?
For small, spiky Workers, it often is: the free tier and per-request pricing are hard to beat. The meters add up once Durable Objects stay busy. Duration is billed per GB-second while an object is active, and every SQLite row written costs $1 per million. The same GB-hours on Graviton EC2 cost about a fifth as much, and writes cost a fraction of that.
Is OpenOrange a fork of Cloudflare?
No. OpenOrange implements the Workers API on Node.js and maps each Cloudflare service onto Rivet. It uses Wrangler to read your configuration, and it reuses some MIT-licensed Cloudflare code, such as the Workflows engine. It does not run workerd.
Why not just run workerd directly?
workerd is Cloudflare's runtime, not its platform. It runs your fetch handler, but KV, D1, R2, Queues, Workflows and the Cache API are bindings that call services you have to build, and Durable Objects keep their data on one machine with nothing to place, replicate or scale them. It also keeps limits designed around Cloudflare's network rather than your servers: only the nodejs_compat subset of Node.js, no native npm modules, and alarms capped at 15 minutes. OpenOrange runs your Worker on Node.js with real SQLite, and Rivet provides the services, so your code keeps working on infrastructure you control. Compare OpenOrange and workerd
Do I need to learn Rivet?
No. Rivet is the control plane underneath. You use the orange CLI and your Wrangler configuration.
What does it cost?
OpenOrange is Apache 2.0 and free. Self-host Rivet and your cloud bill is the only bill. Rivet Cloud and BYOC pricing is at rivet.dev/pricing.
What happens to the data already in KV, Durable Objects and R2?
orange migrate moves Durable Objects while your app serves, with no downtime. D1 databases are interrupted for a few minutes while they copy, because Cloudflare doesn't provide a way to migrate D1 live. R2 is S3-compatible, so rclone or aws s3 sync moves buckets.
Does it run at the edge?
It runs wherever you deploy it, in as many regions as you want. Most backends talk to one database; running next to it is faster than running at the edge. For stateless Worker requests, this works fine today. For Durable Objects, an upcoming Rivet update adds multi-region support, including edge regions.
Who maintains OpenOrange?
Rivet. OpenOrange is not affiliated with or endorsed by Cloudflare, Inc.
Keep the platform. Lose the walls.
Your Cloudflare project in your datacenter.
Built for serious scale.