English | 简体中文
Vite plugin adapter for deploying SSR applications to EdgeOne Pages. Built on the Universal Deploy (UD) framework, with out-of-the-box support for Vite SSR, TanStack Start, and Vike.
npm install @edgeone/vitePeer dependency: Vite 7 or 8.
// vite.config.ts
import { defineConfig } from "vite";
import { tanstackStart } from "@tanstack/react-start/plugin";
import { edgeoneAdapter } from "@edgeone/vite";
export default defineConfig({
plugins: [tanstackStart(), edgeoneAdapter()],
});Requires Vike ≥ 0.4.257. Add server: true to your Vike config to enable Vike's built-in Universal Deploy integration:
// pages/+config.ts
export default {
server: true,
}// vite.config.ts
import { defineConfig } from "vite";
import vike from "vike/plugin";
import { edgeoneAdapter } from "@edgeone/vite";
export default defineConfig({
plugins: [vike(), edgeoneAdapter()],
});// vite.config.ts
import { defineConfig } from "vite";
import { edgeoneAdapter } from "@edgeone/vite";
export default defineConfig({
build: { ssr: "src/entry-server.ts" },
plugins: [edgeoneAdapter()],
});SSR entry requirement: The entry file must default-export a
{ fetch(request: Request): Response | Promise<Response> }interface.
Universal adapter for any framework that registers a Fetchable entry in the Universal Deploy store.
| Option | Type | Default | Description |
|---|---|---|---|
outputDir |
string |
".edgeone" |
Output directory for deployment artifacts |
verbose |
boolean |
false |
Enable verbose logging during build |
The adapter is composed of 6 core Vite plugins, plus an optional 7th that is added only when ssrEntry is set:
| Plugin | Source | Purpose |
|---|---|---|
edgeone:bundle-deps |
Adapter | Force-bundle all npm deps (EdgeOne has no node_modules) |
compat |
@universal-deploy/store | Auto-discover SSR entries from rollupOptions.input |
catchAll |
@universal-deploy/store | Generate a catch-all virtual module aggregating all registered entries |
resolver |
@universal-deploy/store | Resolve store virtual module IDs |
edgeone:apply-catch-all |
Adapter | Append the catch-all entry to the SSR build input |
edgeone:output |
Adapter | Generate EdgeOne deployment artifacts after build |
edgeone:ssr-entry |
Adapter | Auto-trigger SSR build after client build (when ssrEntry is set) |
The adapter is completely framework-agnostic — it reads entries from the Universal Deploy store and produces EdgeOne deployment artifacts. Frameworks (Vike, TanStack Start, etc.) are responsible for registering their own Fetchable entries in the store.
After the build completes, the edgeone:output plugin:
- Copies SSR build output into
<outputDir>/cloud-functions/ssr-node/ - Generates a bridge entry (
handler.js) that converts Node.jsIncomingMessageto WebRequest(compatible with EdgeOne Pages bootstrap) - Copies static assets into
<outputDir>/assets/ - Generates
config.jsonwith route definitions from store-registered entries
.edgeone/
├── assets/ # Client-side static assets
└── cloud-functions/
└── ssr-node/
├── handler.js # Bridge entry (adapter-generated, IncomingMessage → Request)
├── _handler.js # Catch-all handler (Vite build output)
├── server.js # Framework SSR entry
├── assets/ # Server-side chunks
└── config.json # EdgeOne Pages route config
MIT