Skip to main content

Quick Start

Create a New Project

npx @evjs/create-app my-app
cd my-app && npm install

Both arguments are optional — if omitted, the CLI prompts interactively.

Available Templates

TemplateDescription
basic-csrClient-side rendering only, no server functions
basic-server-fnsMinimal server functions with "use server"
configured-server-fnsServer functions with ev.config.ts + Query proxy
complex-routingParams, search, layouts, loaders, nested routes
with-tailwindTailwind CSS via plugin loaders

Development

ev dev

Your browser opens to http://localhost:3000 with Hot Module Replacement. Server functions in *.server.ts files are auto-discovered — no config needed.

Production Build

ev build

Project Structure

my-app/
├── index.html # HTML template (must have <div id="app">)
├── ev.config.ts # Optional config
├── src/
│ ├── main.tsx # App bootstrap
│ ├── global.ts # Global typings & transport init
│ ├── pages/ # Route pages (file-based routing)
│ │ ├── __root.tsx # Root layout
│ │ └── home.tsx # Home page (index route)
│ └── api/ # Server function files
│ └── *.server.ts
├── package.json
└── tsconfig.json

App Bootstrap

// src/main.tsx
import { createApp } from "@evjs/client";
import { rootRoute } from "./pages/__root";
import { homeRoute } from "./pages/home";
import "./global";

const routeTree = rootRoute.addChildren([homeRoute]);
const app = createApp({ routeTree });
app.render("#app");
// src/global.ts
import { initTransport } from "@evjs/client";

declare module "@tanstack/react-router" {
interface Register {
router: any;
}
}

Packages

PackagePurpose
@evjs/cliCLI binary (ev dev, ev build)
@evjs/evConfig, plugin, and bundler types (defineConfig)
@evjs/create-appProject scaffolding (npx @evjs/create-app)
@evjs/clientClient runtime (React + TanStack)
@evjs/serverServer runtime (Hono)
@evjs/build-toolsServer function transforms
@evjs/bundler-webpackWebpack adapter
@evjs/manifestShared manifest schema

Required Dependencies

{
"dependencies": {
"@evjs/client": "0.0.0",
"@evjs/server": "0.0.0",
"react": "^19.0.0",
"react-dom": "^19.0.0"
},
"devDependencies": {
"@evjs/cli": "*",
"@types/react": "^19.0.0",
"@types/react-dom": "^19.0.0",
"typescript": "^6.0.2"
}
}

Key Rules

  • Config file: ev.config.ts (not evjs.config.ts)
  • Import defineConfig from @evjs/ev, not from @evjs/server
  • HTML must have <div id="app"> for the render target
  • Do NOT add "type": "module" to your project's package.json — the server bundle uses CJS format
  • src/main.tsx should be minimal — define routes in pages/