Oct 23, 20265 min read

Encore vs Void: Where Should Your AI-Built Internal Apps Run?

Cloudflare's Void and Encore both let an agent write code that gets its infrastructure provisioned on deploy. Void targets Vite apps on Cloudflare, and Encore targets TypeScript and Go backends in your own AWS or GCP account. Here is how they differ for internal tools.

Cloudflare open-sourced Void in October 2026 with a pitch aimed at the same problem many teams have with internal tools: employees build apps with coding agents, and IT does not want to hand cloud access to every one of them.

The New Stack's coverage describes the three parts as an SDK, a CLI that provisions Cloudflare resources on deploy, and a platform companies host to manage those apps. Encore solves an overlapping problem with a different runtime and a different cloud.

Encore vs Void at a glance

QuestionEncoreVoid
What you writeTypeScript or Go backend servicesFull-stack Vite app with server routes
Where it runsYour own AWS or GCP accountCloudflare Workers, in your Cloudflare account
DatabasePostgreSQL, on RDS or Aurora in AWSD1 by default, or PostgreSQL and MySQL through Hyperdrive
Other infrastructurePub/Sub, cron jobs, object storage, caching, secretsQueues, scheduled jobs, storage, AI bindings, auth
Local developmentencore run starts Postgres and the services locallyLocal resources through the Vite plugin
DeployPush to a branch, Encore provisions in your cloudvoid deploy to Cloudflare or a Void Platform
GovernanceRoles, per-environment infrastructure approval, preview environmentsSelf-hosted platform with login providers, quotas and deployment history
FrontendBring your own, or serve static filesBuilt in, with React, Vue, Svelte and Solid adapters

Void: Vite apps on a self-hosted Cloudflare platform

Void

Void comes from VoidZero, the team behind Vite, which Cloudflare acquired. You add it as a Vite plugin and write server routes and pages in the same project. Importing void/db gives the app a local database in development, and void deploy provisions D1 in production and applies migrations. Projects can instead use PostgreSQL or MySQL that you host, connected through Hyperdrive. Imports for AI, queues and other resources work the same way, and the CLI records resource IDs in a lock file you commit.

The platform is the part aimed at internal tools. A company installs it in its own Cloudflare account on Workers for Platforms with R2, a PostgreSQL database for platform state and a login provider. Employees run void connect against it and deploy with the same command, while admins manage users, project access, resource limits, logs and rollbacks. Employees do not need their own Cloudflare credentials to ship.

Good to know

Apps run on the Workers runtime, so Node APIs and long-running processes follow Workers' rules. The default D1 is built on SQLite, which the SQLite project describes as a strong fit for many workloads with fewer concurrent writers than a client-server database. If your internal data is in Postgres on AWS, the app reaches it through Hyperdrive, either over the public internet or through a tunnel you set up.

Encore: backends in your own AWS account

Encore

Encore combines an open source SDK for TypeScript and Go with a platform that provisions and deploys each service's infrastructure into your own cloud account. A service declares its database, Pub/Sub topics, cron jobs and secrets in code, and the platform creates them on AWS, for example RDS for databases and SNS with SQS for topics, inside a VPC it sets up per environment.

// refunds/refunds.ts import { api } from "encore.dev/api"; import { SQLDatabase } from "encore.dev/storage/sqldb"; import { Topic } from "encore.dev/pubsub"; const db = new SQLDatabase("refunds", { migrations: "./migrations" }); export const refundRequested = new Topic<{ refundID: number }>("refund-requested", { deliveryGuarantee: "at-least-once", }); export const request = api( { expose: true, auth: true, method: "POST", path: "/refunds" }, async (p: { orderID: number; reason: string }): Promise<{ id: number }> => { const row = await db.queryRow<{ id: number }>` INSERT INTO refunds (order_id, reason) VALUES (${p.orderID}, ${p.reason}) RETURNING id`; await refundRequested.publish({ refundID: row!.id }); return { id: row!.id }; }, );

encore run starts Postgres locally and runs the topic and its subscribers on your machine, and the agent can inspect traces and schemas through the local MCP server. An agent that adds the topic above has also declared the queue behind it and can run the change locally before review.

On the governance side, an Admin can require manual infrastructure approval per environment, and only Admins can approve it.

Roles decide who can deploy and who can change cloud connections. On the Encore Pro plan, pull requests get preview environments with their own databases. The agent pushes code, and cloud access sits with Encore's IAM role, not the agent.

Good to know

Encore covers the backend, and the frontend comes from you, either served with api.static or deployed to a frontend host. Custom roles beyond Admin, Member and Viewer are an add-on to the Encore Pro plan.

Get started
brew install encoredev/tap/encore &&
encore app create
Copy

Run in your terminal to get started locally.

How to choose

  • Encore when internal tools need to sit next to your data in AWS or GCP and go through reviewed infrastructure changes.
  • Void when your company runs on Cloudflare and wants a self-hosted portal for employee-built Vite apps.

Frequently asked questions

What is the difference between Encore and Void?

Void is an open source Vite SDK, CLI and self-hosted platform that deploys full-stack JavaScript apps to Cloudflare Workers with D1 or, through Hyperdrive, PostgreSQL and MySQL. Encore is an open source SDK for TypeScript and Go backends plus a platform that provisions and deploys them into your own AWS or GCP account, with RDS Postgres, Pub/Sub, cron jobs and object storage.

Which is better for internal tools that need data in AWS?

Encore. If the data is in AWS, Encore runs the tool in a VPC in your account next to it, while Void runs on Cloudflare and reaches AWS data through Hyperdrive over the internet or a tunnel.

How do I move an internal tool an agent built onto Encore?

Ask the agent to move the server routes into Encore API endpoints and the data into a database declared with the SDK, then run it with encore run, which starts Postgres locally. Connect your AWS account in Encore and push to deploy. Encore's AI integration docs cover generating rules files so the agent follows Encore's conventions.

Deploy to your cloud on AWS and Google Cloud
without managing infrastructure

Encore lets developers and agents define application infrastructure directly in code, then automatically provisions it from local development to production in your AWS or GCP account.

~/orders — claude
Claude Code
Claude Code v2.1.180Opus 5.5~/orders