Skip to main content
Blog

Introducing OpenOrange: Run Cloudflare Workers Anywhere

OpenOrange runs your existing Cloudflare Workers project on AWS, Google Cloud, Azure or your own servers.

Introducing OpenOrange: Run Cloudflare Workers Anywhere

Today we’re launching OpenOrange. It runs your existing Cloudflare Workers project on AWS, Google Cloud, Azure or your own servers. You get the same developer experience as Cloudflare, without the runtime limits, for a fraction of the bill.

We built OpenOrange with four goals:

  • Zero refactoring, zero-downtime migration: your Workers and Durable Objects run as they are, and your data moves off Cloudflare while your app keeps serving
  • The same developer experience: wrangler dev becomes orange dev, and everything underneath is open source and self-hostable
  • Simpler bills: you pay for the machines you run on, not Cloudflare’s metering or an enterprise contract. Compute is 4.8× cheaper and storage 8.7× cheaper.
  • Built for scale: storage is backed by S3 with an SSD layer in front, so scaling out is a matter of adding machines
pnpm add -g open-orange
orange dev

wrangler dev → orange dev

orange doctor scans your project, checks that it’s compatible, and lists every binding with what it runs on in OpenOrange.

Then run orange dev instead of wrangler dev. It reads the same Wrangler config and runs the same code. The code you run locally is the code that runs in production, so if it works on your laptop, it works on your servers.

$ wrangler dev$ orange devCloudflare’s local runtimeOpenOrange, on Node.jsSame Wrangler config, same code, same bindings

Follow the quickstart to try it on your project.

How it works

OpenOrange is powered by Rivet, a scalable control plane that runs your Cloudflare workloads.

  • Storage: Rivet stores data on WarpDrive, which is backed by S3 for cheap, durable, bottomless storage, with an SSD layer in front so it stays fast
  • Containers: OpenOrange packages your Workers, Durable Objects, Workflows and the rest of your Cloudflare code into a standard Docker container, so it runs anywhere Docker runs. The containers connect to the Rivet control plane, which scales your workload across them.
  • Runtime: OpenOrange runs on plain Node.js instead of the Workers runtime, which only supports part of Node.js. You can use anything in the Node.js ecosystem, including native extensions.
  • Bindings: each Cloudflare binding maps to the best-fit service
Cloudflare bindingRuns on OpenOrangeRivet Actorson WarpDrive storageS3 or built-in storageAmazon SES or any SMTP serverOpenAI-compatible API such as OpenRouterYour sandbox providerDurable ObjectsKVD1WorkflowsQueuesCron TriggersR2EmailWorkers AISandboxes

Read more about the architecture and every binding.

Deploy to Rivet Cloud or your own cloud

Rivet Cloud is optional, and it’s the fastest way to run OpenOrange in the region you choose. It’s one command:

orange deploy

To run on your own infrastructure, self-host Rivet. Its control plane is a single Rust binary backed by S3. Then deploy your app in three steps:

# 1. Write the Dockerfile and build context
orange deploy --dry-run --outdir deploy

# 2. Build a standard container image
docker build -t my-app -f deploy/Dockerfile deploy/context

# 3. Deploy the image the way you deploy any container, such as on AWS Fargate

See deploying and the production checklist.

Migrate off Cloudflare with zero downtime

Cloudflare has no built-in way to export your Durable Objects’ data, so OpenOrange brings its own migration. It takes three steps:

  1. Prepare: orange migrate prepare wraps your existing Worker with the OpenOrange migrator, with no code changes. Deploy it to Cloudflare with a secret token, then give OpenOrange the same token so it can fetch your data from Cloudflare securely.
  2. Cut over DNS: point your domain at OpenOrange. The first time a Durable Object gets a request, OpenOrange copies its data from Cloudflare and then serves it. Cloudflare marks that object as moved, so no write can land on the old copy.
  3. Backfill: orange migrate backfill copies every object that hasn’t had a request yet. Once it reports zero failed, you can shut down your Cloudflare project.
Before. Every request goes to Cloudflare.

There’s no maintenance window. See the migration guide.

Simpler bills

With OpenOrange, you pay for the machines you run on, out of the AWS, Google Cloud or Azure commitment you may already have. There’s no per-request metering and no enterprise contract to negotiate.

Cloudflaremetered, product by productWorkers Paid plan$Workers requests$Workers CPU time$Durable Objects requests$Durable Objects duration$SQLite rows read$SQLite rows written$KV reads and writes$R2 Class A and B operations$Queues operations$OpenOrangethe machines you run onYour machines$Object storage (S3)$Paid from the AWS, Google Cloud or Azurecommitment you may already have

Priced on raw AWS, the same work costs a fraction of Cloudflare’s meters:

CloudflareOpenOrange on AWSCheaper
Durable Object compute, per GB-hour$0.045$0.00944.8×
Workers CPU, per vCPU-hour$0.072$0.0511.4×
Durable Object SQLite storage, per GB-month$0.20$0.0238.7×
SQLite writes, per million rows$1.00$0.185.7×
D1 storage, per GB-month$0.75$0.02332.6×
KV storage, per GB-month$0.50$0.02321.7×
KV writes, per million$5.00$0.1828.4×
Queue messages, per million$1.20$0.353.4×
Workflow steps, per million$8.00$0.1845.4×

OpenOrange is priced on on-demand AWS Graviton in us-east-1, with 40% headroom for autoscaling, using list prices as of October 8, 2026. Reserved pricing, spot instances and credits are lower. Traffic inside your VPC is free, while every call from Cloudflare back to a database in AWS pays AWS egress. See the full comparison.

Get started

OpenOrange is open source under the Apache 2.0 license, and it’s on GitHub and npm today.

  • Check your project: copy the prompt from openorange.dev into your coding agent to check whether your project is compatible
  • Tell us what’s missing: if something isn’t compatible, open an issue and we’ll fix it as soon as we can
  • Get help migrating: the Rivet team helps with enterprise deployments, BYOC, and deploying into your customers’ environments. Talk to an engineer.