Quickstart
Let's create a Void app, run it locally, and deploy it. You can start in an empty directory or add Void to an existing Vite app.
Use Node.js 24.21.0 or later. New projects pin the SDK's tested Workers compatibility date, so the bundled local runtime can start them. An existing compatibility date in your project is preserved.
Start in an Empty Directory
Install Void in your project directory:
npm install -D voidpnpm add -D voidyarn add -D voidbun add -D voidThen run the setup command:
With pnpm, you can also start with pnpm create void my-app; the scaffolder sets up the required native build permissions before installing Void. If a manual installation reports blocked build scripts, approve esbuild, sharp, and workerd with pnpm approve-builds. Set better-sqlite3: false in pnpm-workspace.yaml's allowBuilds: Void uses version 13's bundled binaries, so it does not need a native rebuild.
The setup install updates the pnpm lockfile to match the generated dependencies, including when setup runs in CI. Later builds can use pnpm install --frozen-lockfile.
npx void initpnpm void inityarn void initbunx void initVoid asks you to choose Vite+ or plain Vite, a UI framework, and a starter. Vite+ is the default. For a database app, D1 needs no local database server; PostgreSQL and MySQL are available if you want to use an external database. Static Pages starts with pages only.
Setup also asks where you want to deploy. Choose Cloudflare to use your own account, or Void to connect to your team's platform. You can skip this and decide later.
💡 Notes on void binary usage
The docs use void for brevity. Because it's installed in your project, run it through your package manager outside package scripts: npx void, pnpm void, yarn void, or bunx void.
Alternatively, you can add ./node_modules/.bin to your PATH so that you can invoke void directly when you are in the root directory of your app.
⚠️ Prefer local install
Install void locally so the CLI and your app use the same version.
Using with Coding Agents
void init detects your coding agent and sets up the matching instructions and skills.
If auto-detection fails, void init asks you to choose from a short list (Claude, Cursor, Codex, Gemini CLI, Generic).
In agents that support it, use the /void skill to load the relevant guidance, then describe the app you want to build. See Coding Agents for setup details.
Meta Frameworks
You can build pages directly with Void's Pages routing, or keep an existing framework such as TanStack Start, React Router, or SvelteKit. Follow the framework integration guides for framework-specific setup.
Adding to an Existing Vite App
npm install -D voidpnpm add -D voidyarn add -D voidbun add -D voidEnable the plugin in vite.config.ts:
import { defineConfig } from 'vite';
import { voidPlugin } from 'void';
export default defineConfig({
plugins: [voidPlugin()],
});Run setup to configure the remaining project files:
npx void initpnpm void inityarn void initbunx void initOnce You Have a Working App
1. Edit the generated API route
Database-backed starters include routes/api/hello.ts. You can edit its GET handler, or create this file if you started with Static Pages:
import { defineHandler } from 'void';
export const GET = defineHandler(() => {
return { message: 'Hello from Void' };
});2. Run locally
npm run devThen visit:
- App:
http://localhost:5173 - API route:
http://localhost:5173/api/hello
3. Choose where to deploy
If you chose a deployment target during setup, you're ready. If you skipped it, run void init again or choose Cloudflare for the first deploy:
void deploy --platform cloudflareVoid opens your browser to sign in when needed. To use your team's platform, connect using the API URL from your administrator:
void connect https://platform.example.com
void project link4. Deploy
With your target configured, run:
void deployVoid builds the app, provisions the resources it uses, applies pending migrations, and prints the deployed URL. If it reports a missing production secret, configure that secret and deploy again.
Subsequent deploys use the same target. See Deployment for CI setup, migrations, and rollback. To generate a supported push-to-deploy workflow, run void init --github.
Next steps
- To understand what kind of apps are supported: Supported App Types
- Server Routing: dynamic params, middleware, and validation
- Database: queries, migrations, and generated types
- Type Safety: end-to-end typed fetch client