Skip to content

Nuxt Directus SDKSeamlessly connect Nuxt with Directus

Featuring authentication, realtime, file management, visual editing and more

Installation

bash
npm install nuxt-directus-sdk
typescript
// nuxt.config.ts
export default defineNuxtConfig({
  modules: ['nuxt-directus-sdk'],
})
env
# .env
DIRECTUS_URL=https://your-directus-instance.com
DIRECTUS_ADMIN_TOKEN=your_admin_token

That's it! The module handles:

  • ✅ Auto-generated TypeScript types
  • ✅ Auto-imports for all functions
  • ✅ Development proxy (no CORS issues)
  • ✅ WebSocket proxy with authentication
  • ✅ Session-based authentication
  • ✅ Devtools integration

Quick Example

Get started in minutes with full type safety and auto-imports:

vue
<script setup>
// Everything is auto-imported and fully typed!
const { user, login, logout, loggedIn } = useDirectusAuth()
const directus = useDirectus()

// Fetch data with type safety
const { data: posts } = await useAsyncData('posts', () =>
  directus.request(readItems('posts', {
    fields: ['*'],
    limit: 10
  })))

// Subscribe to realtime updates
await directus.connect()
const { subscription } = await directus.subscribe('posts')
</script>

<template>
  <div>
    <!-- Authentication state -->
    <div v-if="loggedIn">
      <p>Welcome, {{ user.email }}</p>
      <button @click="logout()">
        Logout
      </button>
    </div>

    <!-- Visual editing in preview mode -->
    <div v-for="post in posts" :key="post.id">
      <DirectusVisualEditor collection="posts" :item="post.id">
        <h2>{{ post.title }}</h2>
        <p>{{ post.content }}</p>
      </DirectusVisualEditor>
    </div>
  </div>
</template>

Why Choose This Module?

Key Advantages

  • Session-based auth (more secure) - httpOnly cookies vs. exposed tokens
  • Full WebSocket support - Dev proxy with cookie forwarding
  • Visual editor - Integrated live preview mode
  • Auto-generated types - Always in sync with your Directus schema
  • Active maintenance - Regular updates and community support

License

MIT License - Free to use in personal and commercial projects