Skip to main content
Compressed PDAs are derived using a specific program address and seed, like regular PDAs. Custom programs invoke the to create and update compressed accounts, instead of the System program. Compressed PDAs are compressed accounts with an address.
Compressed PDAs are suited for:
  • Per-user state (profiles, preferences, credentials)
  • DePIN node accounts and stake accounts
  • Nullifiers to prevent an on-chain instruction from being executed twice (little implementation overhead and useful e.g. for payments or ZK programs)
  • App state that is written to and read from infrequently
For DeFi pools, vaults, shared state, pool accounts, or config accounts, use Light-PDA with minimal code changes.

Start Building with the Program Template

1

Prerequisites

Required versions:
  • Rust: 1.90.0 or later
  • Solana CLI: 2.3.11 or later
  • Anchor CLI: 0.31.1
  • Zk compression CLI: 0.27.0 or later
  • Node.js: 22 or later
Install Solana CLI:
Install Anchor CLI:
Install the Light CLI:
Verify installation:
2

Initialize your Program

Instantiate a template Solana program with compressed accounts with all required dependencies.
The light init command creates only Anchor-based projects . For Pinocchio programs, manually configure dependencies using light-sdk-pinocchio.
Rust Crates
  • light-sdk - Core SDK for compressed accounts in native and anchor programs
  • light-sdk-pinocchio Core SDK for compressed accounts in pinocchio programs
  • light-client - RPC client and indexer for interacting with compressed accounts
  • light-program-test - Testing utilities for compressed programs.
TypeScript/JavaScript Packages
  • @lightprotocol/stateless.js - Client library for interacting with compressed accounts
  • @lightprotocol/zk-compression-cli - Command-line tools for ZK compression development
3

Build and Test

Now cd testprogram and run:

Common Errors

Guides

CreateInitialize compressed PDAs in your program
UpdateModify state in compressed accounts
CloseReclaim lamports from compressed accounts
ReinitializeReset and reuse compressed accounts
BurnPermanently delete compressed accounts
Nullifier PDAsPrevent replay attacks with one-time use accounts

Program Examples

SDK Reference

Client

@lightprotocol/stateless.js

TypeScript RPC client for compressed accounts, validity proofs, and address derivation.

light-client

Rust RPC client and indexer for compressed accounts.

Program

light-sdk

Core SDK for compressed accounts in Anchor programs.

light-sdk-macros

Procedural macros for LightAccount derivation.

light-program-test

Local testing framework for programs.

Next Steps

Build a client for your program.