Better Auth client bindings for the Octane UI framework.
npm install @octanejs/better-auth
pnpm add @octanejs/better-authBetter Auth keeps its authentication client and session state framework-agnostic.
This package reuses that public vanilla client unchanged and adapts its Nanostores
atoms to Octane's useSyncExternalStore. Endpoint actions, plugins, $fetch,
$store, $ERROR_CODES, and $Infer retain Better Auth's inferred types.
// auth-client.ts
import { createAuthClient } from '@octanejs/better-auth';
export const authClient = createAuthClient();// Account.tsrx
import { authClient } from './auth-client';
export function Account() @{
const { data: session, isPending } = authClient.useSession();
@if (isPending) {
<p>Loading…</p>
} @else if (session) {
<p>Signed in as {session.user.name}</p>
} @else {
<button onClick={() => authClient.signIn.social({ provider: 'github' })}>
Sign in
</button>
}
}Plugin-provided atoms become hooks in the same way as better-auth/react. For
example, an activeOrganization atom is exposed as
authClient.useActiveOrganization().
The server-side Better Auth configuration remains unchanged because
auth.handler(request) consumes and returns standard Fetch API objects. Framework
helpers that explicitly import React framework packages, such as
better-auth/tanstack-start, are not re-exported by this binding.
createAuthClientcreates an Octane-bound Better Auth client.useStoresubscribes an Octane component to any Nanostore and supports the upstreamkeysanddepsoptions.- Better Auth client types and utility types are re-exported from
better-auth/client.
Current scope, divergences, and verification are tracked in the generated
bindings status table, sourced from this
package's status.json.