For the complete documentation index, see llms.txt. This page is also available as Markdown.

Quickstart

⚠️ Forking the boilerplate repo is a great starting point for your project to integrate Self. It contains a basic working example that demonstrates how to integrate Self. From this, you can add your own logic/requirements as needed.

Before You Start

New to Self Protocol? We highly recommend watching our ETHGlobal Buenos Aires Workshop first. This essential workshop walks through the core concepts and provides a hands-on introduction to building with Self.

Examples

Working examples of Self Protocol integration are available to use as a foundation to build upon.

Choose Your Verification Path

Every Self Pass integration has two parts: a frontend that displays a QR code (or deeplink) for users to scan with the Self app, and a verification method that checks the proof. You must choose one verification method:

Smart Contract Verification
Backend Verification

How it works

Proof is verified on-chain by the IdentityVerificationHub

Proof is verified on your Node.js server using SelfBackendVerifier

Trust model

Trustless — anyone can verify the result on-chain

Trust assumption — users trust your backend verifies correctly

Best for

DeFi, airdrops, token gates, on-chain access control

Web apps, APIs, off-chain services, rapid iteration

Trade-offs

Gas costs per verification; config changes require redeployment

No gas costs; easier to update; requires a running server

Both paths use the same frontend SDK (@selfxyz/qrcode) to display the QR code. The only difference is where verification happens.

Choose Your Environment

Environment

Documents

Network

endpointType

When to use

Staging

Mock passports

Celo Sepolia

staging_celo (contract) or staging_https (backend)

Development and testing

Production

Real passports

Celo Mainnet

celo (contract) or https (backend)

Live applications

Key Concepts

  • scopeSeed — A short string (max 31 ASCII characters) that uniquely identifies your application, e.g. "my-airdrop-app". You pass this into your smart contract constructor as scopeSeed, and it gets hashed together with the contract address (using Poseidon) to produce the final scope — a uint256 value used in proofs to ensure nullifiers are unique to your app and prevent proof replay. Note: the frontend SelfAppBuilder currently names this field scope, but you are passing in the scopeSeed value.

  • endpointType — Determines where the proof is sent and which network is used (see table above).

  • endpoint — The destination address. For contract verification, this is your deployed contract address. For backend verification, this is your API URL.

Overview

Installation

Install the required frontend packages:

Package purposes:

  • @selfxyz/qrcode: QR code generation and display components

  • @selfxyz/core: Core utilities including getUniversalLink for deeplinks

  • ethers: Ethereum utilities for address handling

Basic Usage

Here's a complete Next.js component example based on the workshop:

If you instead want to use the Self App on a mobile then we check out the Use Deeplinking and Usage (Mobile) sections!

Verification Flow

The QR code component displays the current verification status with an LED indicator and changes its appearance based on the verification state:

  1. QR Code Display: Component shows QR code for users to scan

  2. User Scans: User scans with Self app and provides proof

  3. Verification:

    1. Onchain Verification: Your smart contract receives the proof and verifies it on the Self VerificationHub contract.

    2. Backend Verification: Your API endpoint receives and verifies the proof

  4. Success Callback: onSuccess callback is triggered when verification completes

Add SelfBackendVerifier to your backend

If you want to verify your proofs with the backend verifier, then you would implement the following.

Requirements

  • Node v16+

Install dependencies

Set Up SelfBackendVerifier

Key Points

Configuration Matching

Your frontend and backend configurations must match exactly:

Next Steps

Last updated