Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

Getting Started · Passkey Wallet

The default path for end-user wallets. The wallet is authorized by a passkey (Face ID, Touch ID, Windows Hello, or a hardware security key). The private key never leaves the device's secure hardware.

This is what most consumer apps should build on.

Install

npm install @functornetwork/agentic-wallet viem

Create the wallet

import { createPasskeyWallet } from "@functornetwork/agentic-wallet";
 
const wallet = await createPasskeyWallet({
  rpId: "myapp.example",
  user: {
    name: "alice@example.com",
    displayName: "Alice",
  },
});
 
console.log(wallet.address);

The user sees a single biometric prompt. After that, you have a fully usable smart-account wallet. wallet.signer is drop-in compatible with every other SDK function.

Browser only. Uses navigator.credentials (WebAuthn).

Run a transaction

import { execute } from "@functornetwork/agentic-wallet";
 
const result = await execute(wallet, wallet.signer, {
  to: "0xRecipient...",
  value: 1_000_000_000_000_000n, // 0.001 ETH
});
 
console.log(result.status, result.transactionHash);

Each execute triggers one biometric prompt to sign. No popups, no extensions, no seed phrase.

Returning users

When a user comes back to your app on the same device (or any device with their passkeys synced), recover their wallet without any state of your own:

import { recoverFromPasskey } from "@functornetwork/agentic-wallet";
 
const wallet = await recoverFromPasskey({ rpId: "myapp.example" });
// OS shows the passkey picker, biometric prompt, done.

Two on-chain reads, one biometric. No localStorage, no server side-channel, no seed phrase. The user's wallet handle is rebuilt from on-chain state.

What's next