> ## Documentation Index
> Fetch the complete documentation index at: https://luminouslabs-cc5545c6-swen-add-code-runner.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Program Development

> Overview of on-chain program development using Anchor, Pinocchio, or native Rust SDKs.

## Rust Crates

ZK Compression's Rust crates are published to [crates.io](https://docs.rs/releases/search?query=zk+compression) and can be found on [docs.rs](https://crates.io/search?q=zk%20compression) with the `light-` prefix.

* [`light-sdk`](https://github.com/Lightprotocol/light-protocol/tree/main/sdk-libs/sdk) — For Anchor and native programs. Includes CPI utilities, compressed account abstractions similar to anchor Account, and metadata structs for CPIs to the Light System program.
* [`light-sdk-pinocchio`](https://github.com/Lightprotocol/light-protocol/tree/main/sdk-libs/sdk-pinocchio) — For Pinocchio programs. Pinocchio-optimized SDK with compressed account abstractions and CPI utilities.

## Light Programs Overview

<Info>
  Your custom program invokes the *Light system program* via Cross-Program Invocation (CPI) to leverage ZK Compression.
</Info>

| Program                                                                                                       | Description                                                                                                                                                                                |
| :------------------------------------------------------------------------------------------------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [light-system-program](https://github.com/Lightprotocol/light-protocol/tree/main/programs/system)             | Enforces compressed account layout, ownership checks, and validity proof verification. Used to create/write compressed accounts and PDAs.                                                  |
| [light-compressed-token](https://crates.io/crates/light-compressed-token)                                     | SPL-compatible compressed token implementation with arbitrary compression/decompression support.                                                                                           |
| [account-compression](https://github.com/Lightprotocol/light-protocol/tree/main/programs/account-compression) | State and address tree implementation used by the Light System program. Clients and custom programs do not interact with the Account Compression Program — this is handled under the hood. |

## Version Requirements

<Info>
  Required versions:

  * **Rust**: 1.86.0 or later
  * **Solana CLI**: 2.2.15
  * **Anchor CLI**: 0.31.1
  * **Zk compression CLI**: 0.27.0 or later
  * **Node.js**: 23.5.0 or later
</Info>

<Accordion title="Installation">
  **Install Solana CLI:**

  ```bash theme={null}
  sh -c "$(curl -sSfL https://release.solana.com/v2.2.15/install)"
  ```

  **Install Anchor CLI:**

  ```bash theme={null}
  cargo install --git https://github.com/coral-xyz/anchor avm --force
  avm install latest
  avm use latest
  ```

  **Install the Light CLI:**

  <Tabs>
    <Tab title="npm">
      ```bash theme={null}
      npm install -g @lightprotocol/zk-compression-cli@alpha
      ```
    </Tab>

    <Tab title="yarn">
      ```bash theme={null}
      yarn global add @lightprotocol/zk-compression-cli@alpha
      ```
    </Tab>

    <Tab title="pnpm">
      ```bash theme={null}
      pnpm add -g @lightprotocol/zk-compression-cli@alpha
      ```
    </Tab>
  </Tabs>

  **Verify installation:**

  ```bash theme={null}
  light --version
  ```
</Accordion>

## Next Steps

Build your own program or view program examples.

<CardGroup>
  <Card title="Program Guides" icon="chevron-right" color="#0066ff" href="/compressed-pdas/guides" horizontal />

  <Card title="Program Examples" icon="chevron-right" color="#0066ff" href="/compressed-pdas/program-examples" horizontal />
</CardGroup>
