Installation
🚀 Get up and running in seconds.
Automatic Setup (Recommended)
Run the interactive CLI scaffolder:
bash
npm create nevr@latest my-apibash
pnpm create nevr my-apibash
bun create nevr my-apiThen:
bash
cd my-api
npm install
npm run generate # Generate Prisma schema
npm run db:push # Push to database
npm run dev # Start serverYour API is now live at http://localhost:3000/api! 🎉
What you get:
- ✅ nevr.config.ts - Configuration with
defineConfig - ✅ TypeScript - Strict mode enabled
- ✅ Prisma - SQLite/PostgreSQL/MySQL
- ✅ NextJs/Express/Hono - Your choice of framework
Manual Setup
Adding Nevr to an existing project:
1. Install Dependencies
bash
npm install nevr @prisma/client
npm install -D prisma typescript tsx @types/node2. Create your first Entity
Create src/entities/user.ts:
typescript
import { entity, string } from "nevr"
export const user = entity("user", {
name: string,
email: string.unique(),
})Export it from src/entities/index.ts:
typescript
export { user } from "./user.js"Recommended folder structure
Keep entities in a dedicated folder — one file per entity, with a barrel index.ts that re-exports them all:
Express / Hono:
src/
├── entities/
│ ├── user.ts
│ ├── post.ts
│ └── index.ts # re-exports all entities
├── nevr.config.ts # defineConfig — imports from entities/
└── server.ts # nevr({ ...config, driver })Next.js:
lib/
├── entities/
│ ├── user.ts
│ ├── post.ts
│ └── index.ts # re-exports all entities
├── nevr.config.ts # defineConfig — imports from entities/
└── nevr.ts # nevr({ ...config, driver })
app/
└── api/
└── [...nevr]/
└── route.ts # nextjsAdapter(api)3. Create Configuration
Create src/nevr.config.ts:
typescript
import { defineConfig } from "nevr"
import * as entities from "./entities/index.js"
export const config = defineConfig({
database: "sqlite", // or "postgresql", "mysql"
entities: Object.values(entities).filter(e => e && typeof e === "object"),
plugins: [],
})
export default configConfig is the single source of truth
Define your entities and plugins once in nevr.config.ts. The CLI uses it for schema generation, and your server imports it at runtime — no duplication.
4. Create the Server
typescript
import express from "express"
import { nevr } from "nevr"
import { prisma } from "nevr/drivers/prisma"
import { expressAdapter } from "nevr/adapters/express"
import { PrismaClient } from "@prisma/client"
import { config } from "./nevr.config.js"
const db = new PrismaClient()
const api = nevr({ ...config, driver: prisma(db) })
const app = express()
app.use(express.json())
app.use("/api", expressAdapter(api))
app.listen(3000, () => console.log("Server running on http://localhost:3000"))typescript
import { Hono } from "hono"
import { serve } from "@hono/node-server"
import { nevr } from "nevr"
import { prisma } from "nevr/drivers/prisma"
import { honoAdapter } from "nevr/adapters/hono"
import { PrismaClient } from "@prisma/client"
import { config } from "./nevr.config.js"
const db = new PrismaClient()
const api = nevr({ ...config, driver: prisma(db) })
const app = new Hono()
app.route("/api", honoAdapter(api))
serve({ fetch: app.fetch, port: 3000 }, () => {
console.log("Server running on http://localhost:3000")
})typescript
import { nevr } from "nevr"
import { prisma } from "nevr/drivers/prisma"
import { PrismaClient } from "@prisma/client"
import { config } from "./nevr.config.js"
const db = new PrismaClient()
export const api = nevr({ ...config, driver: prisma(db) })typescript
import { toNextHandler } from "nevr/adapters/nextjs"
import { api } from "@/lib/nevr"
export const { GET, POST, PUT, PATCH, DELETE } = toNextHandler(api)5. Generate and Run
bash
# Generate Prisma schema from config
npx nevr generate
# Push schema to database
npx nevr db:push
# Start server
npx tsx src/server.tsConfiguration Reference
defineConfig
typescript
import { defineConfig } from "nevr"
export default defineConfig({
// Database provider (required for schema generation)
database: "postgresql", // "sqlite" | "postgresql" | "mysql"
// Output directory for Prisma schema
outDir: "./prisma", // default: "./prisma"
// Your entities
entities: [user, post, comment],
// Plugins (auth, payments, etc.)
plugins: [
// auth({ ... }),
],
// Enable incremental generation (caching)
incremental: true, // default: true
})Config file locations
The CLI auto-discovers config in this order:
nevr.config.tsnevr.config.jssrc/nevr.config.tssrc/nevr.config.jslib/nevr.config.ts,lib/nevr.config.js,lib/nevr.config.mjs,
Or specify custom path: npx nevr generate --config ./custom/config.ts
CLI Commands
| Command | Description |
|---|---|
npx nevr generate | Generate Prisma schema from entities |
npx nevr db:push | Push schema to database |
npx nevr db:migrate | Create a migration |
npx nevr db:studio | Open Prisma Studio |
npx nevr db:reset | Reset database |
npx nevr introspect | Show all entities |
Next Steps
- Basic Usage - Learn the workflow
- Entities - Define your data model
- Actions - Add custom logic
- Generator Reference - Advanced generation options
