Skip to main content
Email/password, magic links and one-time codes work against a fresh local Supabase stack with no extra credentials. OAuth, account linking and passkeys need project configuration described in Provider setup.

Prerequisites

  • A Tauri v2 app with a Rust src-tauri/ crate
  • A Supabase project (hosted, or a local stack via supabase start)
  • A GitHub token with read:packages to install the bindings package from GitHub Packages (@exegia/use-auth comes from the public npm registry and needs no token)
1

Install the plugin

src-tauri/Cargo.toml
src-tauri/src/lib.rs
2

Install the frontend packages

Both packages live on the public npm registry, so this needs no .npmrc and no token:
Adding the hooks pulls the bindings in with them — install the bindings on their own only if you are not using React.
3

Configure the project

src-tauri/tauri.conf.json
Never use the service-role key here. It is readable from the app bundle and bypasses row-level security.
Everything else has defaults — see Configuration.
4

Grant permissions

src-tauri/capabilities/default.json
supabase-auth:default covers the everyday lifecycle. Account mutations such as password reset, profile updates, identity linking and passkey management are opt-in — see Permissions.
5

Sign someone in

The fastest path from React is the hooks — headless, so the markup is yours:
Or call the bindings directly:
And from Rust, symmetrically:

Try the example app

The repository ships a runnable multi-window demo wired to every block against a local Supabase stack.

Next steps

Handle errors

Every rejection is a structured AuthError with a switchable kind.

Add social sign-in

How the loopback + PKCE round-trip works, and what to allow-list.