Skip to content

@xid-kit/vue

Vue 3 plugin, composables, and headless components on top of @xid-kit/core.

Status

Package status is Current package. Vue 3 plugin, composables, and headless components are implemented. A real IdP round-trip on production infrastructure is still pending manual verification.

Plugin setup

Register XidPlugin once in main.ts. It creates an XidClient singleton, provides it via XID_INJECTION_KEY, and calls client.load() to hydrate session state.

// main.ts
import { createApp } from 'vue'
import { XidPlugin } from '@xid-kit/vue'
import App from './App.vue'

const app = createApp(App)
app.use(XidPlugin, { apiUrl: 'https://your-tenant.xid.dev' })
app.mount('#app')

Composables

import { useAuth, useUser, useOrganization, useSession } from '@xid-kit/vue'

const auth = useAuth()
// auth.isLoaded / auth.isSignedIn / auth.userId
// auth.getToken()  -> Promise<Result<string, XidError>>
// auth.signOut()   -> Promise<Result<null, XidError>>

const userRef = useUser()
// userRef.value.isLoaded && userRef.value.isSignedIn -> userRef.value.user.id

const orgRef = useOrganization()
// orgRef.value.organization / orgRef.value.membership / orgRef.value.setActive()

const sessionRef = useSession()
// sessionRef.value.session / sessionRef.value.getToken()

Components

<template>
  <SignInButton sign-in-url="/sign-in" redirect-url="/dashboard">Log in</SignInButton>
  <SignOutButton redirect-url="/">Log out</SignOutButton>

  <Protect role="org:admin">
    <AdminPanel />
    <template #fallback><p>Access denied.</p></template>
  </Protect>

  <Protect permission="org:member:read">
    <MemberList />
  </Protect>
</template>

<script setup lang="ts">
import { SignInButton, SignOutButton, Protect } from '@xid-kit/vue'
</script>

Exported API

Export Kind Purpose
XidPlugin Vue plugin app.use entry point; registers XidClient and calls client.load()
createXidClient function Factory that returns a standalone XidClient instance
useXidClient composable Returns the injected XidClient; throws if plugin is not registered
XID_INJECTION_KEY InjectionKey Symbol used to provide and inject the XidClient singleton
useXid composable Full state ref plus all client actions (UseXidReturn)
useAuth composable isLoaded, isSignedIn, userId, getToken, signOut
useUser composable Ref wrapping discriminated union on isLoaded / isSignedIn / user
useOrganization composable Active org, membership, and setActive action
useSession composable Active session and getToken action
SignInButton component Headless button that redirects to the sign-in URL on click
SignOutButton component Headless button that calls client.signOut() on click
Protect component Slot-based role and permission gate with default and fallback slots
Navigation

Type to search...

Use arrow keys to navigateEnter to selectEscape to close