@clerk/nuxt
3.1.16 · 21 Oct 2026MIT11.4k / weekRepositoryHomepagenpmAtom feed
249 stable releases, newest first, by release line. Notes are quoted as the maintainers published them.
- 3.x · latest line
3.1.6 – 3.1.1611 releases that only update dependencies@clerk/backend 3.26.1@clerk/shared 4.41.0@clerk/vue 2.5.13Show each
- 3.1.1621 Oct 2026@clerk/backend 3.26.1
- 3.1.1520 Oct 2026@clerk/backend 3.26.0@clerk/shared 4.41.0@clerk/vue 2.5.13
- 3.1.1416 Oct 2026@clerk/backend 3.25.0
- 3.1.1315 Oct 2026@clerk/backend 3.24.0
- 3.1.129 Oct 2026@clerk/shared 4.40.0@clerk/backend 3.23.2@clerk/vue 2.5.12
- 3.1.117 Oct 2026@clerk/shared 4.39.1@clerk/backend 3.23.1@clerk/vue 2.5.11
- 3.1.105 Oct 2026@clerk/backend 3.23.0@clerk/shared 4.39.0@clerk/vue 2.5.10
- 3.1.91 Oct 2026@clerk/backend 3.22.0@clerk/shared 4.38.0@clerk/vue 2.5.9
- 3.1.830 Sep 2026@clerk/backend 3.21.1@clerk/shared 4.37.1@clerk/vue 2.5.8
- 3.1.729 Sep 2026@clerk/backend 3.21.0@clerk/shared 4.37.0@clerk/vue 2.5.7
- 3.1.625 Sep 2026@clerk/shared 4.36.0@clerk/backend 3.20.1@clerk/vue 2.5.6
3.1.5
24 Sep 2026Fix
clerkMiddleware()dropping all but the lastSet-Cookieheader when Clerk sets multiple cookies in one response, such as after a handshake or a session refresh.
Patch Changes
Fix
clerkMiddleware()dropping all but the lastSet-Cookieheader when Clerk sets multiple cookies in one response, such as after a handshake or a session refresh.
3.1.1 – 3.1.44 releases that only update dependencies@clerk/shared 4.34.0@clerk/backend 3.19.0@clerk/vue 2.5.4Show each
3.1.0
2 Sep 2026Add an authenticated OAuth device verification component and workflow hook for approving or denying OAuth Device Authorization Grant requests.
Minor Changes
Add an authenticated OAuth device verification component and workflow hook for approving or denying OAuth Device Authorization Grant requests.
3.0.1 – 3.0.1715 releases that only update dependencies@clerk/backend 3.17.0@clerk/shared 4.30.2@clerk/vue 2.4.34Show each
- 3.0.171 Sep 2026@clerk/backend 3.17.0
- 3.0.1628 Aug 2026@clerk/backend 3.16.13@clerk/shared 4.30.2@clerk/vue 2.4.34
- 3.0.1525 Aug 2026@clerk/shared 4.30.1@clerk/backend 3.16.12@clerk/vue 2.4.33
- 3.0.1424 Aug 2026@clerk/shared 4.30.0@clerk/backend 3.16.11@clerk/vue 2.4.32
- 3.0.1320 Aug 2026@clerk/shared 4.29.3@clerk/backend 3.16.10@clerk/vue 2.4.31
- 3.0.1219 Aug 2026@clerk/backend 3.16.9@clerk/vue 2.4.30
- 3.0.1118 Aug 2026@clerk/backend 3.16.8
- 3.0.1018 Aug 2026@clerk/backend 3.16.7@clerk/shared 4.29.2@clerk/vue 2.4.30
- 3.0.914 Aug 2026@clerk/shared 4.29.1@clerk/backend 3.16.6@clerk/vue 2.4.29
- 3.0.813 Aug 2026@clerk/shared 4.29.0@clerk/backend 3.16.5@clerk/vue 2.4.28
- 3.0.711 Aug 2026@clerk/backend 3.16.4
- 3.0.610 Aug 2026@clerk/shared 4.28.1@clerk/backend 3.16.3@clerk/vue 2.4.27
- 3.0.47 Aug 2026@clerk/backend 3.16.1@clerk/shared 4.27.1@clerk/vue 2.4.25
- 3.0.36 Aug 2026@clerk/backend 3.16.0@clerk/shared 4.27.0@clerk/vue 2.4.24
- 3.0.131 Jul 2026@clerk/backend 3.15.0@clerk/shared 4.25.10@clerk/vue 2.4.22
3.0.0
29 Jul 2026- breaking
Drop support for Nuxt 3, which reaches end-of-life on July 31, 2026.
@clerk/nuxtnow requires Nuxt 4, and the minimum supported Node.js version is now^20.19.0 || >=22.12.0to match Nuxt 4's own requirement. If you are still on Nuxt 3, follow the Nuxt upgrade guide to upgrade your project before updating@clerk/nuxt. - breaking
Remove
createRouteMatcherfrom@clerk/nuxt/serverand the auto-imported client-sidecreateRouteMatcher. Middleware-based auth checks rely on path matching, which can diverge from how requests are actually routed and leave protected resources reachable. Move auth checks into the resources themselves.Protect API routes inside the event handler itself:
export default defineEventHandler(event => { const { isAuthenticated, userId } = event.context.auth(); if (!isAuthenticated) { throw createError({ statusCode: 401, statusMessage: 'Unauthorized' }); } return { userId }; });Protect pages with a named route middleware and opt pages into it with
definePageMeta(). Child routes inherit the middleware applied to their parent, so a single declaration can protect a whole section:// app/middleware/auth.ts export default defineNuxtRouteMiddleware(() => { const { isSignedIn } = useAuth(); if (!isSignedIn.value) { return navigateTo('/sign-in'); } });<script setup> definePageMeta({ middleware: 'auth' }); </script>If you want to hand this work to a coding agent, use this migration prompt:
Migrate my Nuxt project away from Clerk's removed `createRouteMatcher` API. 1. Find every matcher created with `createRouteMatcher`, along with the logic that uses it (throwing 401 errors, calling `navigateTo('/sign-in')`, etc.). Matchers can appear in Nitro server middleware (imported from `@clerk/nuxt/server`) or in Nuxt route middleware (auto-imported). 2. For every API route those matchers protected, move the auth check into the event handler itself: const { isAuthenticated } = event.context.auth(); if (!isAuthenticated) throw createError({ statusCode: 401, statusMessage: 'Unauthorized' }); Keep any role or permission checks (`event.context.auth().has(...)`) with the resource as well. 3. For every page those matchers protected, create a named route middleware in `app/middleware/` that checks `useAuth()` and redirects with `navigateTo()`, then opt pages into it with `definePageMeta({ middleware: 'auth' })`. Child routes inherit the middleware applied to their parent. 4. Remove the `createRouteMatcher` imports and calls. Keep `clerkMiddleware()` itself. Middleware logic unrelated to auth protection (headers, locale redirects, etc.) may stay, using plain `getRequestURL(event).pathname` checks. Plain pathname checks do not normalize percent-encoding (`/api/%61dmin` will not match a check for `/api/admin`), so never use them for auth or security decisions. Those belong on the resource itself, as in steps 2 and 3. 5. Make sure every route previously covered by a matcher pattern (including glob patterns like `/dashboard(.*)`) now has its own check, then verify the project builds.
Major Changes
- breaking
Drop support for Nuxt 3, which reaches end-of-life on July 31, 2026.
@clerk/nuxtnow requires Nuxt 4, and the minimum supported Node.js version is now^20.19.0 || >=22.12.0to match Nuxt 4's own requirement. If you are still on Nuxt 3, follow the Nuxt upgrade guide to upgrade your project before updating@clerk/nuxt. - breaking
Remove
createRouteMatcherfrom@clerk/nuxt/serverand the auto-imported client-sidecreateRouteMatcher. Middleware-based auth checks rely on path matching, which can diverge from how requests are actually routed and leave protected resources reachable. Move auth checks into the resources themselves.Protect API routes inside the event handler itself:
export default defineEventHandler(event => { const { isAuthenticated, userId } = event.context.auth(); if (!isAuthenticated) { throw createError({ statusCode: 401, statusMessage: 'Unauthorized' }); } return { userId }; });Protect pages with a named route middleware and opt pages into it with
definePageMeta(). Child routes inherit the middleware applied to their parent, so a single declaration can protect a whole section:// app/middleware/auth.ts export default defineNuxtRouteMiddleware(() => { const { isSignedIn } = useAuth(); if (!isSignedIn.value) { return navigateTo('/sign-in'); } });<script setup> definePageMeta({ middleware: 'auth' }); </script>If you want to hand this work to a coding agent, use this migration prompt:
Migrate my Nuxt project away from Clerk's removed `createRouteMatcher` API. 1. Find every matcher created with `createRouteMatcher`, along with the logic that uses it (throwing 401 errors, calling `navigateTo('/sign-in')`, etc.). Matchers can appear in Nitro server middleware (imported from `@clerk/nuxt/server`) or in Nuxt route middleware (auto-imported). 2. For every API route those matchers protected, move the auth check into the event handler itself: const { isAuthenticated } = event.context.auth(); if (!isAuthenticated) throw createError({ statusCode: 401, statusMessage: 'Unauthorized' }); Keep any role or permission checks (`event.context.auth().has(...)`) with the resource as well. 3. For every page those matchers protected, create a named route middleware in `app/middleware/` that checks `useAuth()` and redirects with `navigateTo()`, then opt pages into it with `definePageMeta({ middleware: 'auth' })`. Child routes inherit the middleware applied to their parent. 4. Remove the `createRouteMatcher` imports and calls. Keep `clerkMiddleware()` itself. Middleware logic unrelated to auth protection (headers, locale redirects, etc.) may stay, using plain `getRequestURL(event).pathname` checks. Plain pathname checks do not normalize percent-encoding (`/api/%61dmin` will not match a check for `/api/admin`), so never use them for auth or security decisions. Those belong on the resource itself, as in steps 2 and 3. 5. Make sure every route previously covered by a matcher pattern (including glob patterns like `/dashboard(.*)`) now has its own check, then verify the project builds.
- 2.x
2.6.23
27 Jul 2026Only updates dependencies:@clerk/backend 3.13.2@clerk/vue 2.4.20
2.6.22
24 Jul 2026Reading the note…
2.6.21
23 Jul 2026Reading the note…
2.6.20
21 Jul 2026Reading the note…
2.6.19
16 Jul 2026Reading the note…
2.6.18
15 Jul 2026Reading the note…
2.6.17
14 Jul 2026Reading the note…
2.6.16
10 Jul 2026Reading the note…
2.6.15
9 Jul 2026Reading the note…
2.6.14
9 Jul 2026Reading the note…
2.6.13
7 Jul 2026Reading the note…
2.6.12
6 Jul 2026Reading the note…
2.6.11
1 Jul 2026Reading the note…
2.6.10
30 Jun 2026Reading the note…
2.6.9
29 Jun 2026Reading the note…
2.6.8
25 Jun 2026Reading the note…
2.6.7
23 Jun 2026Reading the note…