Skip to content

permissionless.js

Build with ERC-4337 smart accounts, bundlers, paymasters, and user operations
npm install permissionless
permissionless.js is a TypeScript library built on viem for building with ERC-4337 smart accounts, bundlers, paymasters, and user operations. The core focuses are avoiding provider lock-in, having no dependencies, maximum viem compatibility, and a small bundle size. permissionless.js also provides high-level support for the major ERC-4337 smart accounts, including Safe, Kernel, Biconomy, and SimpleAccount.

Overview

// Import the required modules.
import { createBundlerClient } from "permissionless"
import { sepolia } from "viem/chains"
import { http } from "viem"
 
// Create the required clients.
const bundlerClient = createBundlerClient({
    chain: sepolia,
    transport: http(bundlerUrl) // Use any bundler url
})
 
// Consume bundler, paymaster, and smart account actions!
const opReceipt = await bundlerClient.getUserOperationReceipt({
    hash: userOpHash
})
 
// Build with strict TypeScript types
opReceipt!.
actualGasUsed: bigint
actualGasUsed

Features

  • 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...

Source Code

The source code for permissionless.js is available on GitHub

permissionless.js is distributed under an MIT License.

We welcome contributions from the community. If you would like to contribute, please open an issue or a pull request.

Feel free to ask any questions in our Telegram group