Getting Started
Nuxt Auto API automatically generates type-safe REST APIs from your Drizzle ORM schemas with built-in authorization, validation, and multi-tenancy support.
Getting Started
Nuxt Auto API automatically generates type-safe REST APIs from your Drizzle ORM schemas with built-in authorization, validation, and multi-tenancy support.
Features
- Automatic CRUD endpoints from Drizzle schemas
- Plugin system for extending the request pipeline
- Multi-database support (SQLite, Postgres, MySQL, D1, Turso, PlanetScale)
- Multi-tier authorization (operation, SQL-level list filter, object-level, field-level)
- Validation with Zod and drizzle-zod
- Custom endpoints with
createEndpoint()and standalone helpers - Cursor & offset pagination
- Soft delete support (auto-detected)
- Multi-tenancy with flexible configuration
- M2M relationships with auto-detection
- Type-safe frontend with TanStack Query integration
Installation
npm install @websideproject/nuxt-auto-api
Basic Setup
1. Add the module to nuxt.config.ts
export default defineNuxtConfig({
modules: ['@websideproject/nuxt-auto-api'],
autoApi: {
prefix: '/api',
database: {
client: 'better-sqlite3',
},
},
})
2. Create your Drizzle schema
// server/database/schema.ts
import { sqliteTable, text, integer } from 'drizzle-orm/sqlite-core'
export const users = sqliteTable('users', {
id: integer('id').primaryKey({ autoIncrement: true }),
email: text('email').notNull().unique(),
name: text('name'),
role: text('role', { enum: ['user', 'admin'] }).default('user'),
createdAt: integer('created_at', { mode: 'timestamp' }).$defaultFn(() => new Date()),
})
3. Initialize the database
// server/plugins/database.ts
import { drizzle } from 'drizzle-orm/better-sqlite3'
import Database from 'better-sqlite3'
import { initializeDatabase } from '@websideproject/nuxt-auto-api/database'
import * as schema from '../database/schema'
export default defineNitroPlugin(() => {
const sqlite = new Database('sqlite.db')
const db = drizzle(sqlite, { schema })
initializeDatabase(db, 'better-sqlite3')
})
For other databases, see Database Adapters.
4. Register resources via module
// modules/base/index.ts
import { defineNuxtModule, createResolver } from '@nuxt/kit'
import { createModuleImport } from '@websideproject/nuxt-auto-api'
export default defineNuxtModule({
meta: {
name: 'base',
},
setup(_options, nuxt) {
const resolver = createResolver(import.meta.url)
nuxt.hook('autoApi:registerSchema', (registry) => {
registry.register('users', {
schema: createModuleImport(
resolver.resolve('../../server/database/schema'),
'users'
),
})
})
},
})
5. Start using your API
The following endpoints are automatically generated:
GET /api/users # List users
GET /api/users/:id # Get user by ID
POST /api/users # Create user
PATCH /api/users/:id # Update user
DELETE /api/users/:id # Delete user
Frontend Usage
Use the auto-generated composables with TanStack Query:
<script setup lang="ts">
// Fetch list of users
const { data: users, isLoading } = useAutoApiList('users', {
filter: { role: 'admin' },
sort: '-createdAt',
limit: 10,
})
// Create mutation
const { mutateAsync: createUser } = useAutoApiMutation('users', 'create', {
toast: {
success: { title: 'User created!' },
error: { title: 'Failed to create user' }
}
})
// Update mutation
const { mutateAsync: updateUser } = useAutoApiMutation('users', 'update')
// Delete mutation
const { mutateAsync: deleteUser } = useAutoApiMutation('users', 'delete')
const handleCreate = async () => {
await createUser({
email: 'user@example.com',
name: 'John Doe',
})
}
</script>
For detailed frontend documentation, see the Composables Guide.
Next Steps
- Validation - Add custom validation rules
- Custom Endpoints -
createEndpoint()and standalone helpers - Pagination - Cursor and offset pagination
- Soft Deletes - Soft delete support
- Multi-Tenancy - Multi-tenant applications
- Better-Auth Integration - Authentication setup
- Plugin System - Extend the request pipeline
- Database Adapters - Multi-engine support
- M2M Relationships - Many-to-many relations
Quick Start
This guide will walk you through creating your first API and admin panel with Nuxt Auto in under 10 minutes.
Aggregations
Nuxt Auto API provides powerful aggregation capabilities for analyzing your data, including simple aggregates on list endpoints and complex grouped aggregations.