npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

@onmax/nuxt-better-auth

v0.0.1

Published

Nuxt module for Better Auth integration with NuxtHub, route protection, session management, and role-based access

Downloads

99

Readme

@onmax/nuxt-better-auth

npm version npm downloads License Nuxt

Nuxt module for Better Auth with auto schema generation, route protection, and session management. Works with NuxtHub and future @nuxt/db.

Features

  • Auto Schema Generation - Generates Drizzle schema from your better-auth plugins
  • Route Protection - Declarative access rules via routeRules
  • Session Management - SSR-safe session handling with client hydration
  • Role-Based Access - Support for admin, user, and custom roles
  • Auto-Imports - useUserSession, requireUserSession, getUserSession
  • BetterAuthState Component - Ready-to-use Vue component with slots

Requirements

  • NuxtHub with database enabled (hub: { database: true }) or future @nuxt/db

Quick Start

1. Install

pnpm add @onmax/nuxt-better-auth better-auth drizzle-orm @nuxthub/core

2. Configure Nuxt

export default defineNuxtConfig({
  modules: ['@nuxthub/core', '@onmax/nuxt-better-auth'],

  hub: { database: true },

  runtimeConfig: {
    betterAuthSecret: '', // BETTER_AUTH_SECRET env var
    public: { siteUrl: 'http://localhost:3000' },
  },

  routeRules: {
    '/app/**': { auth: 'user' },
    '/admin/**': { auth: { role: 'admin' } },
    '/login': { auth: 'guest' },
  },
})

3. Create Server Config

Create server/auth.config.ts:

import { admin } from 'better-auth/plugins'
import { defineServerAuth } from '@onmax/nuxt-better-auth'

export default defineServerAuth(({ db }) => ({
  appName: 'My App',
  plugins: [admin()],
  emailAndPassword: { enabled: true },
}))

Schema is auto-generated from your plugins! No manual Drizzle schema needed.

4. Create Client Config

Create app/auth.client.ts:

import { adminClient } from 'better-auth/client/plugins'
import { createAuthClient } from 'better-auth/vue'

export function createAppAuthClient(baseURL: string) {
  return createAuthClient({
    baseURL,
    plugins: [adminClient()],
  })
}

export type AppAuthClient = ReturnType<typeof createAppAuthClient>

5. Add Type Extensions

Create shared/types/auth.d.ts:

import '#nuxt-better-auth'

declare module '#nuxt-better-auth' {
  interface AuthUser {
    role?: string | null
    banned?: boolean | null
  }
}

Route Rules

| Option | Type | Description | |--------|------|-------------| | auth | false \| 'guest' \| 'user' \| { role: string } | Auth requirement |

Examples:

  • auth: false - Public (default)
  • auth: 'guest' - Only unauthenticated users
  • auth: 'user' - Any authenticated user
  • auth: { role: 'admin' } - Requires specific role

Composables

useUserSession()

const { user, session, loggedIn, ready, client } = useUserSession()

<BetterAuthState>

<BetterAuthState>
  <template #default="{ loggedIn, user, signOut }">
    <p v-if="loggedIn">Welcome, {{ user?.name }}</p>
    <p v-else>Not logged in</p>
  </template>
  <template #placeholder>
    <p>Loading...</p>
  </template>
</BetterAuthState>

Server Utils

// Require auth
const { user, session } = await requireUserSession(event)

// Require admin
const { user } = await requireUserSession(event, { role: 'admin' })

// Optional session
const session = await getUserSession(event)

Module Aliases

| Alias | Points To | |-------|-----------| | #auth/server | server/auth.config.ts | | #auth/client | app/auth.client.ts | | #nuxt-better-auth | Module type augmentation |

Development

pnpm install
pnpm dev:prepare
pnpm dev

License

MIT