Configuration Reference
Complete reference for all nuxt-directus-sdk configuration options.
Module Options
Configure the module in your nuxt.config.ts:
export default defineNuxtConfig({
modules: ['nuxt-directus-sdk'],
directus: {
// Configuration options here
},
})Core Options
url
- Type:
string - Required: Yes
- Default:
process.env.DIRECTUS_URL - Environment Variable:
DIRECTUS_URL
Your Directus instance URL.
export default defineNuxtConfig({
directus: {
url: 'https://your-directus-instance.com',
},
})Or use environment variable:
DIRECTUS_URL=https://your-directus-instance.comadminToken
- Type:
string - Required: No (required for type generation and admin operations)
- Default:
process.env.DIRECTUS_ADMIN_TOKEN - Environment Variable:
DIRECTUS_ADMIN_TOKEN
Admin token for privileged operations and type generation.
export default defineNuxtConfig({
directus: {
},
})Or use environment variable:
DIRECTUS_ADMIN_TOKEN=your-admin-token-hereSecurity Note: Never commit admin tokens to version control. Always use environment variables.
Development Options
devProxy
- Type:
boolean | { enabled?: boolean, path?: string } - Default:
{ enabled: true, path: '/directus' }in dev mode - Default:
falsein production
Development proxy configuration. When enabled, creates a proxy that forwards requests to your Directus instance, eliminating CORS issues.
export default defineNuxtConfig({
directus: {
// Simple boolean
devProxy: true,
// Or detailed configuration
devProxy: {
enabled: true,
path: '/directus', // Proxy mount path
},
},
})How it works:
- In development: Requests to
http://localhost:3000/directusforward to your Directus URL - In production: Direct connection to Directus URL
- WebSocket proxy available at
${path}-wsfor realtime features
Disable proxy:
export default defineNuxtConfig({
directus: {
devProxy: false, // Use direct connection in dev
},
})devtools
- Type:
boolean - Default:
true
Add Directus admin panel to Nuxt Devtools.
export default defineNuxtConfig({
directus: {
devtools: true, // Enable Directus tab in devtools
},
})When enabled, you can access the Directus admin panel directly from Nuxt Devtools.
visualEditor
- Type:
boolean - Default:
true
Enable visual editor capabilities for live preview and inline editing.
export default defineNuxtConfig({
directus: {
visualEditor: true, // Enable DirectusVisualEditor component
},
})When disabled, the DirectusVisualEditor component will be a no-op.
Type Generation
types
Configure TypeScript type generation from your Directus schema.
types.enabled
- Type:
boolean - Default:
true
Enable/disable automatic type generation.
export default defineNuxtConfig({
directus: {
types: {
enabled: true, // Generate types from Directus schema
},
},
})Requires adminToken to be set.
types.prefix
- Type:
string - Default:
''
Add a prefix to your custom collection types.
export default defineNuxtConfig({
directus: {
types: {
prefix: 'App', // Types become: AppArticles, AppProducts, etc.
},
},
})Authentication Options
auth
Authentication configuration.
export default defineNuxtConfig({
directus: {
auth: {
// Auth options here
},
},
})auth.enabled
- Type:
boolean - Default:
true
Enable/disable authentication features.
export default defineNuxtConfig({
directus: {
auth: {
enabled: true,
},
},
})auth.enableGlobalAuthMiddleware
- Type:
boolean - Default:
false
Enable global authentication middleware on all routes.
export default defineNuxtConfig({
directus: {
auth: {
enableGlobalAuthMiddleware: true, // All routes require auth by default
},
},
})When enabled, all routes are protected. Allow public routes with:
<script setup>
definePageMeta({
middleware: [] // Override global middleware
})
</script>auth.autoRefresh
- Type:
boolean - Default:
true
Automatically refresh authentication tokens before expiry.
export default defineNuxtConfig({
directus: {
auth: {
autoRefresh: true, // Auto-refresh session tokens
},
},
})auth.credentials
- Type:
'include' | 'omit' | 'same-origin' - Default:
'include'
Credentials mode for cross-domain requests.
export default defineNuxtConfig({
directus: {
auth: {
credentials: 'include', // Required for cross-domain cookies
},
},
})Options:
'include'- Always send cookies (required for cross-domain)'same-origin'- Only send cookies for same-origin requests'omit'- Never send cookies
auth.realtimeAuthMode
- Type:
'public' | 'handshake' | 'strict' - Default:
'public'
WebSocket authentication mode for realtime features.
export default defineNuxtConfig({
directus: {
auth: {
realtimeAuthMode: 'handshake',
},
},
})Modes:
'public'- No authentication required'handshake'- Authenticate during connection'strict'- Full authentication required
auth.readMeFields
- Type:
Array<string> - Default:
[](fetches all fields)
Fields to fetch for the current user.
export default defineNuxtConfig({
directus: {
auth: {
readMeFields: ['id', 'email', 'first_name', 'last_name', 'avatar'],
},
},
})Reduces payload size by only fetching needed fields.
auth.redirect
Redirect configuration for authentication.
export default defineNuxtConfig({
directus: {
auth: {
redirect: {
home: '/', // After login
login: '/account/login', // When not authenticated
logout: '/', // After logout
},
},
},
})auth.redirect.home
- Type:
string - Default:
'/'
Where to redirect after successful login.
auth.redirect.login
- Type:
string - Default:
'/account/login'
Where to redirect when authentication is required.
auth.redirect.logout
- Type:
string - Default:
'/'
Where to redirect after logout.
Complete Configuration Example
// nuxt.config.ts
export default defineNuxtConfig({
modules: ['nuxt-directus-sdk'],
directus: {
// Core configuration
adminToken: process.env.DIRECTUS_ADMIN_TOKEN,
// Development
devProxy: {
enabled: true,
path: '/directus',
},
devtools: true,
visualEditor: true,
// Type generation
types: {
enabled: true,
prefix: 'App',
},
// Authentication
auth: {
enabled: true,
enableGlobalAuthMiddleware: false,
autoRefresh: true,
credentials: 'include',
realtimeAuthMode: 'handshake',
readMeFields: ['id', 'email', 'first_name', 'last_name', 'avatar', 'role'],
redirect: {
home: '/dashboard',
login: '/auth/login',
logout: '/auth/login',
},
},
},
})Environment Variables
Development (.env)
# Required
DIRECTUS_URL=http://localhost:8055
# Optional (for type generation and admin operations)
DIRECTUS_ADMIN_TOKEN=your-admin-token-hereProduction
For production, set environment variables in your hosting platform:
Vercel:
vercel env add DIRECTUS_URL production
vercel env add DIRECTUS_ADMIN_TOKEN productionNetlify:
# In Netlify UI: Site settings → Environment variables
DIRECTUS_URL=https://your-directus.com
DIRECTUS_ADMIN_TOKEN=your-tokenDocker:
ENV DIRECTUS_URL=https://your-directus.com
ENV DIRECTUS_ADMIN_TOKEN=your-tokenRuntime Config Access
Access configuration at runtime:
// Client-side and server-side
const config = useRuntimeConfig()
console.log(config.public.directus.url)
// Server-side only (includes adminToken)
const config = useRuntimeConfig()
console.log(config.directus.adminToken)Note: adminToken is automatically excluded from public runtime config for security.
TypeScript Configuration
The module automatically adds type declarations. Ensure your tsconfig.json extends Nuxt's config:
{
"extends": "./.nuxt/tsconfig.json"
}Generated types are available globally:
// Access generated types
type Article = DirectusSchema['articles']
type User = DirectusUsers
type File = DirectusFiles
// Use with Directus SDK
const directus = useDirectus()
const articles = await directus.request(readItems('articles'))
// articles is typed as Article[]Directus Server Configuration
Required Directus Settings
For the module to work correctly, configure your Directus instance:
# Directus .env
# Authentication
AUTH_LOCAL_MODE=session
# Session cookies
SESSION_COOKIE_SECURE=true # false in development
SESSION_COOKIE_SAME_SITE=Lax # None for cross-domain
SESSION_COOKIE_DOMAIN=.yourdomain.com # For cross-domain
# CORS (required)
CORS_ENABLED=true
CORS_ORIGIN=https://your-nuxt-app.com
CORS_CREDENTIALS=true
# Realtime/WebSocket (optional)
WEBSOCKETS_ENABLED=true
WEBSOCKETS_REST_AUTH=strictSame Domain Setup
If Nuxt and Directus are on the same domain:
# Directus .env
SESSION_COOKIE_SECURE=false # true in production
SESSION_COOKIE_SAME_SITE=Lax
CORS_ORIGIN=http://localhost:3000Cross-Domain Setup
If on different domains (e.g., app.example.com and api.example.com):
# Directus .env
SESSION_COOKIE_DOMAIN=.example.com # Shared parent domain
SESSION_COOKIE_SECURE=true
SESSION_COOKIE_SAME_SITE=None # Required for cross-domain
CORS_ORIGIN=https://app.example.com