Key Features
- Passkey authentication: phishing-resistant, synced across devices via iCloud/Google (works as transport layer)
- ERC-4337 smart accounts: gasless, batchable, and programmable
- EIP-1193 compatible: drop-in replacement for MetaMask or any injected wallet
- Delegated permissions: let contracts or agents perform scoped actions (ERC-7715)
- ENS subname issuance: assign human-readable identities on onboarding
- Headless/server-side support: AI agent wallets or backend-triggered transactions
Getting Started
Get an API key from the JAW Dashboard and add your domain to the allowed list. Uselocalhost for local development, your production domain for production.
@jaw.id/wagmi: React connector with wagmi hooks. Use this for React and Next.js apps.
@jaw.id/core: Framework-agnostic EIP-1193 provider. Use this for vanilla JS, server-side, or headless environments.
@jaw.id/wagmi (React)
InstallationWagmiProvider and QueryClientProvider. Both are required.
showTestnets in the connector:
useConnect from @jaw.id/wagmi (not from wagmi) to support JAW-specific capabilities like SIWE and subname issuance during connection.
keys.jaw.id popup where the user registers or authenticates with their passkey. In AppSpecific mode, the uiHandler renders the UI inside your app instead.
Send a Transaction
useSendCalls and useWriteContract are automatically sponsored. No changes to your transaction code needed.
Delegated Permissions
Permissions (ERC-7715) let you grant a spender (a backend wallet, contract, or AI agent) the ability to perform scoped actions on behalf of the user. Permissions define exactly which contracts can be called, how much can be spent, and for how long. Use them for subscription payments, recurring charges, and autonomous agent wallets.
usePermissions to query active permissions and useRevokePermissions to revoke them, both from @jaw.id/wagmi.
@jaw.id/core (Framework-agnostic)
InstallationshowTestnets:
Account.fromLocalAccount() from @jaw.id/core. See Subscription Payments and Account API for full details.
Authentication Modes
- CrossPlatform (default): passkey operations run on
keys.jaw.idvia a popup, giving users a portable wallet that works across any JAW-powered app. - AppSpecific: passkey operations run inside your app via a
uiHandler, giving you full UI control at the cost of wallet portability.
Common Setup Issues
| Symptom | Likely cause |
|---|---|
| Passkey popup doesn’t open | Your domain isn’t in the allowed list on the JAW Dashboard |
| Testnet chain not available | Set preference: { showTestnets: true } when using a testnet defaultChainId |
| AppSpecific mode throws on init | uiHandler is missing, required when using Mode.AppSpecific |
Next Steps
- Quickstart guide: full end-to-end walkthrough
- Account API: headless smart accounts for agents and server-side use
- Gas Sponsoring: paymaster setup and sponsorship policies
- Sign-In With Ethereum: SIWE during connection
- Subscription Payments: recurring charges with delegated permissions
- Onchain Identity: ENS subname issuance on onboarding
- Configuration reference: all config options