Skip to main content
JAW provides smart account infrastructure for Celo applications. Give users passkey-secured accounts with ENS identity, sponsor their gas, and enable programmable permissions for subscriptions and delegated agent execution.

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. Use localhost 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)

Installation
Configure Create your wagmi config with the JAW connector, then wrap your app with WagmiProvider and QueryClientProvider. Both are required.
For testnet (Celo Sepolia), enable showTestnets in the connector:
Connect a Wallet Use useConnect from @jaw.id/wagmi (not from wagmi) to support JAW-specific capabilities like SIWE and subname issuance during connection.
In CrossPlatform mode, clicking the button opens a 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
Enable Gasless Transactions Add a paymaster to your config to sponsor gas fees so users never need to hold CELO. JAW requires an ERC-7677 compatible paymaster using EntryPoint v0.8.
Once configured, transactions via 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.
Use usePermissions to query active permissions and useRevokePermissions to revoke them, both from @jaw.id/wagmi.

@jaw.id/core (Framework-agnostic)

Installation
Configure Initialize once in a dedicated file and import the instance wherever needed. No provider wrapping required.
For testnet (Celo Sepolia), enable showTestnets:
Connect a Wallet
Send a Transaction
Enable Gasless Transactions Add a paymaster to sponsor gas fees. JAW requires an ERC-7677 compatible paymaster using EntryPoint v0.8.
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.
Once a permission is granted, a server-side spender can execute calls against it using 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.id via 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.
See the JAW configuration docs for setup details and UIHandler implementation.

Common Setup Issues

Next Steps

Resources