This is a work in progress.
PubKey Protocol is the social layer on Solana. It allows users to create and manage a profiles and verify their Social or Solana identities. The identities are verified by the communities in the network.
For more information join our Discord or reach out to @PubKeyApp on X.
The following terms are used throughout the documentation and code:
A Community is an account that represents a team or project that creates Profiles and verifies their Identities.
A Profile is an account that represents a user and their verified Identities.
An Identity is a Social or Solana identity that is verified by one or more Communities.
An IdentityProvider represents the origin of an Identity.
An IdentityProviderId is the unique remote identifier for an IdentityProvider.
A Pointer is an account that maps an Identity to a Profile based on the IdentityProvider and IdentityProviderId.
The following identity providers are supported or in active development:
- Discord
- Github
- Solana
- X
The following identity providers are planned or need investigation:
- Farcaster
- Telegram
The following diagram shows the relationships between the different entities in PubKey Protocol:
erDiagram
    Community ||--o{ Profile : "Creates"
    Community ||--o{ Identity : "Verifies"
    Profile ||--o{ Identity : "Has verified"
    Pointer ||--o{ Profile : "Points to"
    Pointer |o--|| Identity : "Points from"
    Community {
        string slug
        IdentityProvider[] providers
    }
    Identity {
        string IdentityProvider
        string IdentityProviderId
        string name
        Community[] communties
    }
    Pointer {
        string IdentityProvider
        string IdentityProviderId
    }
    Profile {
        string username
        string[] authorities
        Identity[] identities
    }
    Tip
If you don't have PNPM installed, you can install it using corepack:
corepack enable
corepack prepare pnpm@latest --activate- Clone the repository:
git clone https://github.com/pubkeyapp/pubkey-protocol
cd pubkey-protocol
pnpm installStart web app
pnpm dev:webBuild web app
pnpm build:webBuild the Anchor program
pnpm build:anchorLint all projects
pnpm lintTest all projects
pnpm testTo iterate on the anchor program using a local validator, this is the recommended workflow:
Open this in one terminal:
pnpm anchor localnetAnd this in another:
pnpm anchor test --skip-deploy --skip-local-validatorMIT