@edgeone/vite
v2.0.1
Published
EdgeOne universal Vite adapter — supports Vite SSR, Vike, and TanStack Start
Downloads
1,291
Readme
@edgeone/vite
Vite plugin adapter for deploying SSR applications to EdgeOne Pages. Built on @universal-deploy/store, with out-of-the-box support for Vite SSR, TanStack Start, and Vike.
Installation
Note: This package is currently in beta. Install with the
betatag:
npm install @edgeone/vite@betaPeer dependency: Vite 7 or 8.
Quick Start
TanStack Start
// 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()],
});Vike
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()],
});Standard Vite SSR
// 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.
API
edgeoneAdapter(options?)
Universal adapter for any framework that registers a Fetchable entry in the Universal Deploy store.
Options
| Option | Type | Default | Description |
| ----------- | --------- | ------------ | ----------------------------------------- |
| outputDir | string | ".edgeone" | Output directory for deployment artifacts |
| verbose | boolean | false | Enable verbose logging during build |
How It Works
The adapter is composed of 6 Vite plugins:
| 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
Build Output
.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 configLicense
MIT
