permissionless.js is a TypeScript library built on top of viem for deploying and managing ERC-4337 smart accounts, interacting with bundlers and paymasters, and leveraging custom signers.
- High-Level Smart Account Support: We support a high-level API for deploying and managing smart accounts, including some of the most popular implementations (Safe, Kernel, Biconomy, etc.)
- Bundler Support: We support all bundler actions following ERC-4337.
- Gas Sponsorship: We support paymaster actions to allow you to easily sponsor gas fees.
- User Operation Utility Functions: We provide many low-level utility functions useful for dealing with User Operations.
- Modular and Extensible: We allow you to easily create and plug in your own smart account systems, bundlers, paymasters, and signers.
- Built on & for viem: permissionless.js is designed to be a thin wrapper around viem, maintaining the same style and overall feel viem provides.
- and a lot more...
Take a look at our documentation to learn more about permissionless.js.
Install viem as a peer dependency.
Then install permissionless.js:
npm install viem permissionless
bun install viem permissionless
yarn add viem permissionless
For WebAuthn functionality (passkeys), you'll also need to install the ox package:
npm install ox
bun install ox
yarn add ox
Note: The ox package is optional and only required if you plan to use WebAuthn/passkey features. The library will throw a helpful error message if you try to use WebAuthn functionality without installing ox.
// Import the required modules. import { createSmartAccountClient } from "permissionless"; import { createPaymasterClient } from "viem/account-abstraction"; import { sepolia } from "viem/chains"; import { http } from "viem"; const paymaster = createPaymasterClient({ transport: http(`https://api.pimlico.io/v2/sepolia/rpc?apikey=${pimlicoApiKey}`) }) const account = toSimpleSmartAccount<entryPointVersion>({ client: getPublicClient(anvilRpc), owner: privateKeyToAccount(generatePrivateKey()) }) // Create the required clients. const bundlerClient = createSmartAccountClient({ account, paymaster, chain: sepolia, bundlerTransport: http( `https://api.pimlico.io/v2/sepolia/rpc?apikey=${pimlicoApiKey}`, ), // Use any bundler url }); // Consume bundler, paymaster, and smart account actions! const userOperationReceipt = await bundlerClient.getUserOperationReceipt({ hash: "0x5faea6a3af76292c2b23468bbea96ef63fb31360848be195748437f0a79106c8", });
For a full explanation of permissionless.js, please visit our docs page
Build permissionless.js locally with:
bun run build
Distributed under an MIT License. See LICENSE for more information.
Feel free to ask any questions in our Telegram group