
Description
Vue 3 patterns with Clerk — composables (useAuth, useUser, useClerk, useOrganization), Vue Router guards, Pinia auth store integration. Triggers on: vue clerk, useAuth vue, clerk composables, vue router clerk guard, pinia auth clerk. For Nuxt, use clerk-nuxt-patterns instead.
SKILL.md
Vue Patterns
SDK: @clerk/vue v2+ (Vue 3). For Nuxt, use clerk-nuxt-patterns.
What Do You Need?
| Task | Reference |
|---|---|
| Composables: useAuth, useUser, useOrganization | references/composables.md |
| Vue Router navigation guards | references/vue-router-guards.md |
| Pinia store with auth state | references/pinia-integration.md |
Mental Model
Vue uses composables from @clerk/vue:
useAuth()— reactiveisSignedIn,userId,signOutuseUser()— reactiveuserobjectuseClerk()— full Clerk instance for advanced operationsuseOrganization()— reactiveorganization,membership
Setup
Vue (Plain)
// main.ts
import { clerkPlugin } from '@clerk/vue'
import { createApp } from 'vue'
import App from './App.vue'
const app = createApp(App)
app.use(clerkPlugin, {
publishableKey: import.meta.env.VITE_CLERK_PUBLISHABLE_KEY,
})
app.mount('#app')
Composables Usage
<script setup lang="ts">
import { useAuth, useUser } from '@clerk/vue'
const { isSignedIn, userId, signOut } = useAuth()
const { user } = useUser()
</script>
<template>
<div v-if="isSignedIn">
<p>Hello {{ user?.firstName }}</p>
<button @click="signOut()">Sign Out</button>
</div>
<SignInButton v-else />
</template>
Org Switching
<script setup lang="ts">
import { useOrganizationList } from '@clerk/vue'
const { userMemberships, setActive } = useOrganizationList()
</script>
<template>
<button
v-for="mem in userMemberships.data ?? []"
:key="mem.organization.id"
@click="setActive({ organization: mem.organization.id })"
>
{{ mem.organization.name }}
</button>
</template>
Common Pitfalls
| Symptom | Cause | Fix |
|---|---|---|
Composables return undefined | Not inside ClerkProvider tree | Ensure app.use(clerkPlugin, { publishableKey }) is called |
userId reactive but not updating | Destructuring loses reactivity | Use const { userId } = useAuth() (toRefs-style composable, reactive) |
Import Map
| What | Import |
|---|---|
| Composables | @clerk/vue |
| Plugin setup | @clerk/vue |
| Components | @clerk/vue |
See Also
clerk-setup- Initial Clerk installclerk-custom-ui- Custom flows & appearanceclerk-orgs- B2B organizations
Docs
More skills from the skills repository
View all 20 skillsclerk
route Clerk authentication requests
Jul 18AuthenticationClerkMobileWeb Developmentclerk-android
implement Clerk auth for native Android apps
Apr 10AndroidClerkKotlinMobileclerk-astro-patterns
implement Clerk auth in Astro apps
Apr 7AstroAuthenticationClerkFrontend +1clerk-backend-api
execute Clerk Backend API requests
Apr 10API DevelopmentAuthenticationBackendClerk +1clerk-billing
manage subscriptions with Clerk Billing
Apr 29AuthenticationClerkFrontendPayments +1clerk-chrome-extension-patterns
implement Clerk auth in Chrome Extensions
Apr 7AuthClerkFrontendOAuth +1
More from Clerk
View publisherclerk-cli
manage Clerk authentication and instances via CLI
skills
Jul 24API DevelopmentAuthenticationClerkCLI +2clerk-custom-ui
customize Clerk UI and auth flows
skills
Apr 10AuthenticationBrandingClerkDesign +1clerk-expo
implement Clerk authentication in Expo apps
skills
May 19AuthenticationClerkExpoFrontend +2clerk-nextjs-patterns
implement advanced Next.js patterns with Clerk
skills
Apr 10ClerkFrontendNext.jsPerformanceclerk-nuxt-patterns
implement Clerk auth in Nuxt 3 apps
skills
Apr 7AuthenticationBackendClerkFrontend +1clerk-orgs
manage Clerk Organizations for B2B SaaS
skills
Apr 10ClerkMulti-TenantRBACSaaS