Skip to content

Conversation

@mintlify-migrations
Copy link

@mintlify-migrations mintlify-migrations commented Nov 12, 2025

Your Mintlify docs migration is now complete and available at staging site hosted by us here:https://lightprotocol-migration.mintlify.app/

Resources

What's Included:

  • All documentation content migrated to MDX format
  • Navigation structure preserved
  • Mintlify configuration (docs.json) set up
  • Basic styling and branding applied

Next Steps
To complete your documentation setup, please merge the PR containing the contents of the folder as you see fit and :

  1. Connect Repository to Dashboard
  • Go to Settings > Git settings in your Mintlify dashboard
  • Connect the repository linked above
  1. Set Up Redirects (if needed)
  1. Configure Custom Domain
  1. Review and Provide Feedback
  • Timeline: Until 11/14, Friday EoD
  • Method: Please consolidate feedback in a Google Doc and send to us over email
  • Delivery: We will review the feedback, outline what’s in scope and try our best to address that feedback within 3 business days

Support: support@mintlify.com

Summary by CodeRabbit

  • Documentation
    • New comprehensive docs for compressed PDAs and tokens: step-by-step guides, examples, troubleshooting, and core concepts (Merkle proofs, transaction lifecycle, reinit/update/close/burn flows).
    • Added learning & AI tooling guides, examples, overviews, and advanced integration guides (wallets, airdrops, Token-2022).
    • Public API specs for photon-indexer endpoints covering compressed accounts, proofs, balances, token queries, and pagination.
  • Chores
    • Project licensed under the MIT License and added starter README and site configuration.

Your Mintlify docs migration is now complete and available at staging site hosted by us here:https://lightprotocol-migration.mintlify.app/

Resources

* Migrated Repository: https://github.com/Lightprotocol/developer-content/tree/95d96aab42cdc79d0badcb694d7684de61b55a31/zk-compression-docs
* Staging Domain: https://lightprotocol-migration.mintlify.app/

What's Included:

* All documentation content migrated to MDX format
*  Navigation structure preserved
* Mintlify configuration (docs.json) set up
* Basic styling and branding applied

Next Steps
To complete your documentation setup, please merge the PR containing the contents of the folder as you see fit and :

1. Connect Repository to Dashboard
* Go to Settings > Git settings in your Mintlify dashboard
* Connect the repository linked above

2. Set Up Redirects (if needed)
* Add any necessary redirects for existing URLs
* Our docs here: https://mintlify.com/docs/settings/broken-links#redirects-and-broken-links

3. Configure Custom Domain
* Add your custom domain to go live
* Our docs here: https://mintlify.com/docs/settings/custom-domain#custom-domain

4. Review and Provide Feedback
* Timeline: Until 11/14, Friday EoD
* Method: Please consolidate feedback in a Google Doc and send to us over email
* Delivery: We will review the feedback, outline what’s in scope and try our best to address that feedback within 3 business days

Support: support@mintlify.com
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 12, 2025

Walkthrough

Adds a Mintlify docs site under zk-compression-docs/mintlify-docs/: many new MDX pages for compressed PDAs and tokens, core learning content, site config/README/LICENSE, and a large set of OpenAPI 3.0.3 specification YAML files for the photon-indexer API surface.

Changes

Cohort / File(s) Summary
Site config & frontpage
zk-compression-docs/mintlify-docs/LICENSE, zk-compression-docs/mintlify-docs/README.md, zk-compression-docs/mintlify-docs/docs.json, zk-compression-docs/mintlify-docs/index.mdx
Added MIT LICENSE; starter-kit README.md; Mintlify docs.json site config; site index/overview page with feature cards and quick-start content.
Compressed PDAs guides
.../compressed-pdas/*.mdx
zk-compression-docs/mintlify-docs/compressed-pdas/client-library.mdx, .../create-a-program-with-compressed-pdas.mdx, .../guides.mdx, .../program-examples.mdx, .../guides/how-to-*.mdx
New multi-page documentation for compressed PDA workflows (create/update/close/reinit/burn), with detailed Anchor + native Rust examples, CPI patterns, errors/troubleshooting, and example program links.
Compressed Tokens guides
.../compressed-tokens/*.mdx and .../advanced-guides/*.mdx
New token-focused docs: overview, core guides (mint/create/transfer/compress/decompress, pools), and advanced guides (airdrops, merging, delegation, Token-2022, wallet integration, combined transactions, client examples). Includes many runnable TypeScript snippets.
Core learning content
zk-compression-docs/mintlify-docs/learn/*.mdx and nested core-concepts/*
Added foundational content: compressed-account model, Merkle trees & validity proofs, transaction lifecycle, considerations, and AI tools guide (DeepWiki/MCP guidance).
OpenAPI specs (photon-indexer)
zk-compression-docs/mintlify-docs/openapi/*.yaml (many files)
Added a broad set of OpenAPI 3.0.3 specs describing JSON-RPC-like POST endpoints for compressed accounts, proofs, balances, token lists, signatures, and paginated results; includes component schemas used across endpoints.
Resources / links
zk-compression-docs/mintlify-docs/deepwiki.mdx, .../discord.mdx, .../github.mdx
Added simple frontmatter/link pages for DeepWiki, Discord, and GitHub resources.

Sequence Diagram(s)

(Skipped — changes are documentation and API specs only; no control-flow code changes to diagram.)

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

  • OpenAPI specifications are numerous and large — validate cross-file schema consistency (Context, SerializablePubkey, Hash, paginated types).
  • Verify example request/response shapes, required/nullable fields, and additionalProperties constraints in each YAML.
  • Check MDX code examples (Rust/Anchor and TypeScript) for API/identifier accuracy and CPI parameter correctness.
  • Confirm internal MDX links and docs.json paths/ordering resolve correctly.

Possibly related PRs

Poem

🌲 In docs and specs the new pages grow,
Merkle leaves and proofs in tidy rows,
PDAs and tokens learn their song,
OpenAPI maps where queries belong,
A guide-lit path to compress and show. ✨

Pre-merge checks and finishing touches

❌ Failed checks (1 inconclusive)
Check name Status Explanation Resolution
Title check ❓ Inconclusive The title 'added mintlify docs' is generic and vague, using non-descriptive terms that fail to convey the scope or significance of the changeset. Consider a more specific title like 'Migrate documentation to Mintlify format with configuration setup' to clearly communicate that this is a comprehensive documentation migration, not just adding files.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 52

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
zk-compression-docs/mintlify-docs/openapi/getCompressedTokenAccountBalance.yaml (1)

1-933: Consolidate these OpenAPI spec files into organized, non-overlapping definitions.

Your investigation confirms the review comment's core finding: the three files contain severely overlapping endpoint definitions with misleading filenames. Here's what's happening:

The Problem:

  • getCompressedAccount.yaml contains 1 endpoint (correct)
  • getCompressedAccountsByOwner.yaml contains 6 endpoints, including /getCompressedAccount and /getCompressedAccountProof (misleading name, incorrect scope)
  • getCompressedTokenAccountBalance.yaml contains 8 endpoints—the union of both previous files plus 2 additional endpoints

Why This Is Critical:

  1. Endpoint duplication: /getCompressedAccount is defined identically in all three files. Any future fix to this endpoint must be made in three places—a maintenance nightmare and a source of consistency bugs.

  2. File names don't match content: A developer looking at getCompressedAccountsByOwner.yaml expects to find only the getCompressedAccountsByOwner endpoint and related helpers, not account proof queries or token delegate methods.

  3. Single Responsibility Principle violated: Each file should serve one purpose. Conflating multiple unrelated endpoints into one spec file defeats the organizational structure.

Recommended Fix:

Either:

  • Option A (Recommended): Create individual spec files per endpoint, each containing only its own RPC method definition and shared schema components
  • Option B: Create a single monolithic api.yaml that contains all endpoints, and remove the individual misleading files

Verify which approach matches your documentation generation pipeline (Mintlify appears to use individual files, based on the directory structure), then reorganize accordingly.

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 89e81fb and 53b2468.

⛔ Files ignored due to path filters (105)
  • zk-compression-docs/mintlify-docs/favicon.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/1000x-cypherpunk-docs (1).svg is excluded by !**/*.svg and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/1000x-cypherpunk-docs (2).svg is excluded by !**/*.svg and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/1000x-cypherpunk-docs (3).svg is excluded by !**/*.svg and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/1000x-cypherpunk-docs (4).svg is excluded by !**/*.svg and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/1000x-cypherpunk-docs.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/1000x-cypherpunk-docs.svg is excluded by !**/*.svg and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/1000x-germany 1.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/1000x-germany.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/1000x-pt 1-2.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/1000xHackathon_banner.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/1000x_35_banner.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/Build_Anything.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/Design ohne Titel-2.mp4 is excluded by !**/*.mp4 and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/Group 632668.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/Light Protocol v2 - Batched Merkle trees (3).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/Light Protocol v2 - Batched Merkle trees (4) (1).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/Light-Protocol-v2 -Batched-Merkle-trees-(4).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/ScaleAnything (1).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/ScaleAnything.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/Screenshot 2024-05-10 at 06.22.52.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/Screenshot 2024-05-10 at 06.37.41.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/Screenshot 2024-05-13 at 14.40.53.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/Untitled (5).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/Untitled (6).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/Untitled-1.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/Untitled-4.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/Untitled.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/banner-image.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/burn-dark.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/burn.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/client-burn (1).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/client-burn.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/client-close (1).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/client-close.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/client-create (1).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/client-create.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/client-reinit (1).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/client-reinit.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/client-update (1).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/client-update.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/close-dark.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/close.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/create-dark.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/create.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/ger-banner.svg is excluded by !**/*.svg and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/ger-card (1).svg is excluded by !**/*.svg and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/ger-card.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/ger-card.svg is excluded by !**/*.svg and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (1) (1).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (1).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (10).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (11).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (12).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (13).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (14).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (16).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (17).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (18).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (19).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (2) (1).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (21).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (24).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (25).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (3) (1).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (32).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (34).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (4).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (5).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (6).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (7) (1).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (7).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (8).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (9).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image-(2).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image-(3).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image-1.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image-20.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image-22.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image-23.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/program-burn-1.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/program-burn.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/program-close.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/program-closes.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/program-create-1.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/program-create.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/program-reinit-1.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/program-reinit.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/program-update-1.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/program-update.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/pt-card (1).svg is excluded by !**/*.svg and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/pt-card.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/pt-card.svg is excluded by !**/*.svg and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/pt-new.svg is excluded by !**/*.svg and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/reinit-dark.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/reinit.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/solanazero-banner Large 2.jpeg is excluded by !**/*.jpeg and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/solanazero-banner Large.jpeg is excluded by !**/*.jpeg and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/solanazero-banner.jpg is excluded by !**/*.jpg and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/update-dark.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/update.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/zkc24-ezgif.com-video-to-gif-converter.gif is excluded by !**/*.gif and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/zkcompression_1000x_banner.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/logo/dark.svg is excluded by !**/*.svg and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/logo/light.svg is excluded by !**/*.svg and included by zk-compression-docs/**
📒 Files selected for processing (54)
  • zk-compression-docs/mintlify-docs/LICENSE (1 hunks)
  • zk-compression-docs/mintlify-docs/README.md (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-pdas/client-library.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-pdas/create-a-program-with-compressed-pdas.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-pdas/guides.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-pdas/guides/how-to-burn-compressed-accounts.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-pdas/guides/how-to-close-compressed-accounts.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-pdas/guides/how-to-create-compressed-accounts.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-pdas/guides/how-to-reinitialize-compressed-accounts.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-pdas/guides/how-to-update-compressed-accounts.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-pdas/program-examples.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-tokens/advanced-guides.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-tokens/advanced-guides/add-wallet-support-for-compressed-tokens.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-tokens/advanced-guides/create-an-airdrop-with-claim.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-tokens/advanced-guides/create-an-airdrop.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-tokens/advanced-guides/example-node-js.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-tokens/advanced-guides/example-web-client.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-tokens/advanced-guides/how-to-combine-operations-in-one-transaction.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-tokens/advanced-guides/use-token-2022-with-compression.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-tokens/guides.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-tokens/guides/how-to-approve-and-revoke-delegate-authority.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-tokens/guides/how-to-compress-and-decompress-spl-tokens.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-tokens/guides/how-to-compress-complete-spl-token-accounts.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-tokens/guides/how-to-create-and-register-a-mint-account-for-compression.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-tokens/guides/how-to-create-compressed-token-accounts.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-tokens/guides/how-to-create-compressed-token-pools-for-mint-accounts.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-tokens/guides/how-to-merge-compressed-token-accounts.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-tokens/guides/how-to-mint-compressed-tokens.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-tokens/guides/how-to-transfer-compressed-token.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-tokens/overview.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/deepwiki.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/discord.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/docs.json (1 hunks)
  • zk-compression-docs/mintlify-docs/github.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/index.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/learn/ai-tools-guide.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/learn/core-concepts.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/learn/core-concepts/compressed-account-model.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/learn/core-concepts/considerations.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/learn/core-concepts/merkle-trees-validity-proofs.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/learn/core-concepts/transaction-lifecycle.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/openapi/getCompressedAccount.yaml (1 hunks)
  • zk-compression-docs/mintlify-docs/openapi/getCompressedAccountBalance.yaml (1 hunks)
  • zk-compression-docs/mintlify-docs/openapi/getCompressedAccountProof.yaml (1 hunks)
  • zk-compression-docs/mintlify-docs/openapi/getCompressedAccountsByOwner.yaml (1 hunks)
  • zk-compression-docs/mintlify-docs/openapi/getCompressedBalanceByOwner.yaml (1 hunks)
  • zk-compression-docs/mintlify-docs/openapi/getCompressedMintTokenHolders.yaml (1 hunks)
  • zk-compression-docs/mintlify-docs/openapi/getCompressedTokenAccountBalance.yaml (1 hunks)
  • zk-compression-docs/mintlify-docs/openapi/getCompressedTokenAccountsByDelegate.yaml (1 hunks)
  • zk-compression-docs/mintlify-docs/openapi/getCompressedTokenAccountsByOwner.yaml (1 hunks)
  • zk-compression-docs/mintlify-docs/openapi/getCompressedTokenBalancesByOwner.yaml (1 hunks)
  • zk-compression-docs/mintlify-docs/openapi/getCompressedTokenBalancesByOwnerV2.yaml (1 hunks)
  • zk-compression-docs/mintlify-docs/openapi/getCompressionSignaturesForAccount.yaml (1 hunks)
  • zk-compression-docs/mintlify-docs/openapi/getCompressionSignaturesForAddress.yaml (1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
zk-compression-docs/**/*.md

⚙️ CodeRabbit configuration file

zk-compression-docs/**/*.md: Cross-verify documentation with source code using CLAUDE.md mappings.
Prioritize accuracy over assumptions - always check actual source files.

Files:

  • zk-compression-docs/mintlify-docs/README.md
🪛 Checkov (3.2.334)
zk-compression-docs/mintlify-docs/openapi/getCompressedAccountBalance.yaml

[high] 1-119: Ensure that the global security field has rules defined

(CKV_OPENAPI_4)


[high] 1-119: Ensure that security operations is not empty.

(CKV_OPENAPI_5)

zk-compression-docs/mintlify-docs/openapi/getCompressedMintTokenHolders.yaml

[high] 1-142: Ensure that the global security field has rules defined

(CKV_OPENAPI_4)


[high] 1-142: Ensure that security operations is not empty.

(CKV_OPENAPI_5)


[medium] 129-133: Ensure that arrays have a maximum number of items

(CKV_OPENAPI_21)

zk-compression-docs/mintlify-docs/openapi/getCompressedTokenBalancesByOwnerV2.yaml

[high] 1-146: Ensure that the global security field has rules defined

(CKV_OPENAPI_4)


[high] 1-146: Ensure that security operations is not empty.

(CKV_OPENAPI_5)


[medium] 138-142: Ensure that arrays have a maximum number of items

(CKV_OPENAPI_21)

zk-compression-docs/mintlify-docs/openapi/getCompressedAccountsByOwner.yaml

[high] 1-789: Ensure that the global security field has rules defined

(CKV_OPENAPI_4)


[high] 1-789: Ensure that security operations is not empty.

(CKV_OPENAPI_5)


[medium] 278-282: Ensure that arrays have a maximum number of items

(CKV_OPENAPI_21)

zk-compression-docs/mintlify-docs/openapi/getCompressedAccount.yaml

[high] 1-167: Ensure that the global security field has rules defined

(CKV_OPENAPI_4)


[high] 1-167: Ensure that security operations is not empty.

(CKV_OPENAPI_5)

zk-compression-docs/mintlify-docs/openapi/getCompressionSignaturesForAddress.yaml

[high] 1-1639: Ensure that the global security field has rules defined

(CKV_OPENAPI_4)


[high] 1-1639: Ensure that security operations is not empty.

(CKV_OPENAPI_5)


[medium] 1263-1267: Ensure that arrays have a maximum number of items

(CKV_OPENAPI_21)

zk-compression-docs/mintlify-docs/openapi/getCompressedTokenAccountsByDelegate.yaml

[high] 1-673: Ensure that the global security field has rules defined

(CKV_OPENAPI_4)


[high] 1-673: Ensure that security operations is not empty.

(CKV_OPENAPI_5)


[medium] 468-472: Ensure that arrays have a maximum number of items

(CKV_OPENAPI_21)

zk-compression-docs/mintlify-docs/openapi/getCompressionSignaturesForAccount.yaml

[high] 1-1517: Ensure that the global security field has rules defined

(CKV_OPENAPI_4)


[high] 1-1517: Ensure that security operations is not empty.

(CKV_OPENAPI_5)


[medium] 1149-1153: Ensure that arrays have a maximum number of items

(CKV_OPENAPI_21)

zk-compression-docs/mintlify-docs/openapi/getCompressedTokenAccountBalance.yaml

[high] 1-933: Ensure that the global security field has rules defined

(CKV_OPENAPI_4)


[high] 1-933: Ensure that security operations is not empty.

(CKV_OPENAPI_5)


[medium] 701-705: Ensure that arrays have a maximum number of items

(CKV_OPENAPI_21)

zk-compression-docs/mintlify-docs/openapi/getCompressedTokenBalancesByOwner.yaml

[high] 1-1294: Ensure that the global security field has rules defined

(CKV_OPENAPI_4)


[high] 1-1294: Ensure that security operations is not empty.

(CKV_OPENAPI_5)


[medium] 1044-1048: Ensure that arrays have a maximum number of items

(CKV_OPENAPI_21)

zk-compression-docs/mintlify-docs/openapi/getCompressedBalanceByOwner.yaml

[high] 1-1145: Ensure that the global security field has rules defined

(CKV_OPENAPI_4)


[high] 1-1145: Ensure that security operations is not empty.

(CKV_OPENAPI_5)


[medium] 925-929: Ensure that arrays have a maximum number of items

(CKV_OPENAPI_21)

zk-compression-docs/mintlify-docs/openapi/getCompressedAccountProof.yaml

[high] 1-132: Ensure that the global security field has rules defined

(CKV_OPENAPI_4)


[high] 1-132: Ensure that security operations is not empty.

(CKV_OPENAPI_5)


[medium] 116-120: Ensure that arrays have a maximum number of items

(CKV_OPENAPI_21)

zk-compression-docs/mintlify-docs/openapi/getCompressedTokenAccountsByOwner.yaml

[high] 1-554: Ensure that the global security field has rules defined

(CKV_OPENAPI_4)


[high] 1-554: Ensure that security operations is not empty.

(CKV_OPENAPI_5)


[medium] 349-353: Ensure that arrays have a maximum number of items

(CKV_OPENAPI_21)

🪛 LanguageTool
zk-compression-docs/mintlify-docs/github.mdx

[grammar] ~1-~1: Hier könnte ein Fehler sein.
Context: --- title: GitHub url: "https://github.com/Lightprotocol" ---

(QB_NEW_DE)

zk-compression-docs/mintlify-docs/learn/core-concepts.mdx

[grammar] ~18-~18: Use a hyphen to join words.
Context: ...composability, and performance. ## High Level System Overview This is how it wo...

(QB_NEW_EN_HYPHEN)

zk-compression-docs/mintlify-docs/compressed-tokens/overview.mdx

[locale-violation] ~139-~139: In American English, ‘afterward’ is the preferred variant. ‘Afterwards’ is more commonly used in British English and other dialects.
Context: ...ete SPL token accounts and reclaim rent afterwards | | [Merge Compressed Account...

(AFTERWARDS_US)

zk-compression-docs/mintlify-docs/compressed-pdas/client-library.mdx

[grammar] ~1-~1: Hier könnte ein Fehler sein.
Context: --- title: Client Library description: Overview to Rust and Typescript client guides. Guides include step-by-step implementation and full code examples. ---

(QB_NEW_DE)

zk-compression-docs/mintlify-docs/learn/core-concepts/considerations.mdx

[style] ~25-~25: As an alternative to the over-used intensifier ‘very’, consider replacing this phrase.
Context: ...ber of writes to the same account to be very large (>>1000x). - The account stores large a...

(EN_WEAK_ADJECTIVE)


[uncategorized] ~70-~70: The official name of this software platform is spelled with a capital “H”.
Context: ...xt step and start building! <Card horizontal icon="github" title="Compressed Tokens" href="https:...

(GITHUB)

zk-compression-docs/mintlify-docs/compressed-tokens/guides/how-to-compress-and-decompress-spl-tokens.mdx

[locale-violation] ~496-~496: In American English, ‘afterward’ is the preferred variant. ‘Afterwards’ is more commonly used in British English and other dialects.
Context: ...nts in one transaction and reclaim rent afterwards.

(AFTERWARDS_US)

zk-compression-docs/mintlify-docs/learn/core-concepts/merkle-trees-validity-proofs.mdx

[grammar] ~31-~31: Use a hyphen to join words.
Context: ...Hash"> Only this root hash is stored on chain as single value on chain to secure...

(QB_NEW_EN_HYPHEN)


[grammar] ~31-~31: Use a hyphen to join words.
Context: ...sh is stored on chain as single value on chain to secure the integrity of all com...

(QB_NEW_EN_HYPHEN)


[grammar] ~41-~41: Use a hyphen to join words.
Context: ... For compressed Solana accounts, the 32 byte leaf hashes effectively mirror the ...

(QB_NEW_EN_HYPHEN)


[style] ~114-~114: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ... Address trees store derived addresses in an ind...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)

zk-compression-docs/mintlify-docs/compressed-pdas/guides/how-to-create-compressed-accounts.mdx

[grammar] ~11-~11: Use a hyphen to join words.
Context: ...y write to the account. * For Solana PDA like behavior your compressed account ne...

(QB_NEW_EN_HYPHEN)

zk-compression-docs/mintlify-docs/compressed-tokens/advanced-guides/create-an-airdrop.mdx

[uncategorized] ~938-~938: The official name of this software platform is spelled with a capital “H”.
Context: ...mize claims. * Full Example on Github to [create an Airdrop with Claim](https...

(GITHUB)

zk-compression-docs/mintlify-docs/compressed-tokens/guides.mdx

[locale-violation] ~14-~14: In American English, ‘afterward’ is the preferred variant. ‘Afterwards’ is more commonly used in British English and other dialects.
Context: ...ete SPL token accounts and reclaim rent afterwards | | [How to Merge Compressed Accounts](...

(AFTERWARDS_US)

zk-compression-docs/mintlify-docs/compressed-tokens/guides/how-to-create-compressed-token-pools-for-mint-accounts.mdx

[style] ~135-~135: Using many exclamation marks might seem excessive (in this case: 3 exclamation marks for a text that’s 1290 characters long)
Context: ...pt to create token pools for an SPL mint! ```typescript create-token-pools.ts hi...

(EN_EXCESSIVE_EXCLAMATION)

zk-compression-docs/mintlify-docs/compressed-tokens/advanced-guides/example-web-client.mdx

[grammar] ~1-~1: Hier könnte ein Fehler sein.
Context: --- title: "Example Web Client" url: "https://github.com/Lightprotocol/example-web-client" ---

(QB_NEW_DE)

zk-compression-docs/mintlify-docs/compressed-pdas/guides/how-to-burn-compressed-accounts.mdx

[grammar] ~189-~189: Ensure spelling is correct
Context: ...uction_data.account_meta* Include the curent account data. * Anchor: BuildMyComp...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

zk-compression-docs/mintlify-docs/compressed-pdas/guides/how-to-update-compressed-accounts.mdx

[grammar] ~193-~193: Ensure spelling is correct
Context: ...es the output state tree. * Include the curent account data. * Anchor: Pass `current...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

zk-compression-docs/mintlify-docs/index.mdx

[style] ~11-~11: ‘at a fraction of’ might be wordy. Consider a shorter alternative.
Context: ...ve that lets you create tokens and PDAs at a fraction of the cost. Scale your application to mil...

(EN_WORDINESS_PREMIUM_AT_A_FRACTION_OF)

🪛 markdownlint-cli2 (0.18.1)
zk-compression-docs/mintlify-docs/README.md

19-19: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


25-25: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


42-42: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)

🔇 Additional comments (56)
zk-compression-docs/mintlify-docs/compressed-tokens/advanced-guides/example-node-js.mdx (1)

1-5: Empty file body is intentional and follows documented pattern—no action required.

Verification confirms both example-node-js.mdx and example-web-client.mdx follow the identical structure: front matter metadata (title + GitHub URL) with no body content. This is the intentional pattern for these reference files—they direct readers to external GitHub repositories via the url field rather than embedding documentation content. The front matter syntax is correct, and the structure is consistent with the PR's migration objectives.

zk-compression-docs/mintlify-docs/compressed-tokens/advanced-guides/how-to-combine-operations-in-one-transaction.mdx (1)

193-202: Verify TokenPoolInfo construction before pool creation.

The code creates a tokenPoolInfo object (lines 193–202) with manually set values before the pool creation instruction executes. This includes:

  • isInitialized: true (line 198) — marked initialized before the transaction confirms
  • bump: 0 with a placeholder comment (line 201) — the actual bump should be derived from deriveTokenPoolPda()

This pattern is unusual. Confirm with the SDK source that this is the correct approach for first-time compression. If the bump value is critical for the compress instruction, hardcoding 0 could cause issues.

Can you verify that this pattern matches the expected SDK usage and confirm whether the bump value should be derived or calculated?

zk-compression-docs/mintlify-docs/compressed-tokens/advanced-guides/use-token-2022-with-compression.mdx (4)

14-24: Token-2022 extension support list is accurate.

The supported extensions match the official Light Protocol documentation: MetadataPointer, TokenMetadata, InterestBearingConfig, GroupPointer, GroupMemberPointer, TokenGroup, and TokenGroupMember. Content is consistent with upstream sources.


37-39: SDK version requirements are correct.

The specified versions match official requirements: @lightprotocol/stateless.js ≥ 0.21.0, @lightprotocol/compressed-token ≥ 0.21.0, and @solana/web3.js ≥ 1.95.3.


184-190: TokenMetadata additionalMetadata field usage is correct.

The additionalMetadata field is a valid field in the TokenMetadata interface and follows the standard pattern of key-value pairs. The code correctly structures this as an array of tuples. The example metadata object is well-formed.


319-330: API return types verified and correct—no changes needed.

The code at lines 319–330 properly accesses the return structures:

  1. getCompressedTokenAccountsByOwner returns { items: Array<{ parsed: { amount } }> }

    • Line 320: senderCompressedAccounts.items.reduce()
    • Line 323: recipientCompressedAccounts.items.reduce()
    • Both correctly access account.parsed.amount
  2. getTokenAccountBalance returns { value: { amount, uiAmount } }

    • Line 328: splBalance.value.uiAmount

The code matches Light Protocol SDK patterns across all documented examples. No API contract violations detected.

zk-compression-docs/mintlify-docs/compressed-tokens/advanced-guides/example-web-client.mdx (1)

1-5: This review comment is incorrect regarding Mintlify best practices.

The file follows the correct, documented Mintlify pattern for external navigation links. Per Mintlify's official documentation, the frontmatter url field is the correct approach to make a page an external navigation link—not a redirect requiring mintlify.json configuration.

The metadata-only structure is intentional and systematic across your codebase. I verified six similar files in the repo using the same pattern:

  • github.mdx, discord.mdx, deepwiki.mdx (external org links)
  • example-node-js.mdx (sibling advanced guide with identical structure)
  • create-an-airdrop-with-claim.mdx and the file under review

All follow this convention. The review's core claim that this is "non-standard" or that mintlify.json should be used here is incorrect. Server-side 301 redirects via docs.json are configured separately for SEO and redirect chains, not for external navigation links.

If you want to add explanatory body content to all such pages for UX completeness, that's a valid enhancement choice—but the current structure is not a bug or violation of Mintlify best practices.

Likely an incorrect or invalid review comment.

zk-compression-docs/mintlify-docs/compressed-tokens/advanced-guides/create-an-airdrop-with-claim.mdx (1)

1-4: Verify that the stub page is intentional.

This file contains only front matter without any body content. If this page is meant to be a full guide (as the filename suggests), the content may have been lost during migration. However, if this is intentionally a lightweight redirect to the external GitHub repo, confirm it will render correctly in Mintlify.

zk-compression-docs/mintlify-docs/compressed-tokens/advanced-guides/create-an-airdrop.mdx (3)

1-4: ✓ MDX front matter and Mintlify component syntax look correct.

The document uses valid Mintlify components (CardGroup, Tabs, Steps, Accordion, Info, Warning, Tip) with proper syntax. Layout and structure are well-organized for a tutorial-style guide.


12-12: All external links are valid and active.

Verification confirms that all 7 external URLs in the airdrop guide are currently reachable and return HTTP 200 status codes. No stale or broken links were detected across the Helius documentation, Airship calculator, or GitHub repository references.


74-101: Version constraints allow latest stable releases; documentation context should be clarified.

The ≥ 0.21.0 constraint for both packages is not problematic—both @lightprotocol/stateless.js and @lightprotocol/compressed-token are at version 0.22.0, and this constraint permits users to install the latest release. The minimum version floor provides stability without locking to outdated packages. However, the documentation should be updated to reference that 0.22.0 is now the stable release, ensuring developers understand they're working with current versions when following this guide.

zk-compression-docs/mintlify-docs/LICENSE (1)

1-21: License file is appropriate.

Standard MIT License text with no issues.

zk-compression-docs/mintlify-docs/compressed-tokens/advanced-guides.mdx (1)

7-15: Verify external and internal documentation links are current.

The table references GitHub repository links and internal documentation paths. Please confirm:

  • External repos exist: example-compressed-claim, example-web-client, example-nodejs-client
  • Internal paths match actual file structure (e.g., /compressed-tokens/advanced-guides/create-an-airdrop)
zk-compression-docs/mintlify-docs/compressed-tokens/guides/how-to-merge-compressed-token-accounts.mdx (1)

136-232: Verify API signatures and function availability against current @Lightprotocol packages.

The code example uses mergeTokenAccounts(), mintTo(), and createMint() from @lightprotocol/compressed-token. Please confirm these functions exist in the current package version and that their signatures (parameters and return types) match the documented usage, particularly:

  • mergeTokenAccounts(rpc, payer, mint, tokenOwner) signature
  • RPC endpoint defaults (localhost:8899)
zk-compression-docs/mintlify-docs/compressed-pdas/guides/how-to-burn-compressed-accounts.mdx (1)

46-56: Verify light-sdk and anchor_lang versions are current and compatible.

The guide specifies light-sdk = "0.16.0" and anchor_lang = "0.31.1". Please confirm these are:

  • Current and not deprecated
  • Compatible with each other
  • Compatible with the actual Anchor and Native Rust implementations provided below
zk-compression-docs/mintlify-docs/openapi/getCompressedMintTokenHolders.yaml (1)

1-91: Add security definitions to OpenAPI spec.

The OpenAPI specification lacks global security field definitions (Checkov CKV_OPENAPI_4/5). While this may be intentional for a public indexer endpoint, it should be explicitly documented. Consider adding one of:

Option 1: Explicitly allow unauthenticated access

 openapi: 3.0.3
 info:
   title: photon-indexer
   description: Solana indexer for general compression
   license:
     name: Apache-2.0
   version: 0.50.0
+security: []
 servers:

Option 2: Document authentication requirements if applicable

components:
  securitySchemes:
    api_key:
      type: apiKey
      in: query
      name: api-key

Then add security: reference at the operation or global level.

Please confirm which approach is correct for your endpoint.

zk-compression-docs/mintlify-docs/compressed-tokens/guides/how-to-approve-and-revoke-delegate-authority.mdx (1)

146-235: Verify API signatures for approve(), revoke(), and getCompressedTokenAccountsByDelegate().

Please confirm these functions exist in current @Lightprotocol packages and their signatures match the documented usage:

  • approve(rpc, payer, mint, amount, owner, delegate)
  • revoke(rpc, payer, delegatedAccounts, owner)
  • rpc.getCompressedTokenAccountsByDelegate(delegate, {mint})
zk-compression-docs/mintlify-docs/compressed-pdas/guides/how-to-close-compressed-accounts.mdx (1)

45-56: Verify light-sdk version is current and API matches usage.

The guide specifies light-sdk = "0.16.0". Please confirm:

  • This version is current and not deprecated
  • LightAccount::new_close() API exists and signature matches the usage pattern shown in lines 159-179
  • All imported traits and functions are available: LightAccount, derive_address, CpiAccounts, LightSystemProgramCpi
zk-compression-docs/mintlify-docs/compressed-pdas/guides/how-to-update-compressed-accounts.mdx (1)

1-4: Verify external resources are current.

Similar to the reinitialize guide, ensure that GitHub links (lines 312, 438), zkcompression.com URLs (lines 298, 306), and SDK versions are current.

Combine verification of this file with the reinitialize guide using the shell script provided in that review.

zk-compression-docs/mintlify-docs/compressed-pdas/client-library.mdx (1)

1-3: Stub page needs body content.

This page contains only frontmatter metadata with no body content. If this is intended as an index/navigation page for client library guides, consider adding:

  • A brief introduction to the client libraries (Rust and TypeScript)
  • Links or cards pointing to available client guides
  • Quick start information
  • Feature overview

Verify whether this file is complete or if it requires body content for proper functionality.

zk-compression-docs/mintlify-docs/github.mdx (1)

1-3: LGTM; verify GitHub organization URL.

The GitHub link page follows the established url redirect pattern. Verify that https://github.com/Lightprotocol is the correct organization URL.

zk-compression-docs/mintlify-docs/compressed-pdas/create-a-program-with-compressed-pdas.mdx (1)

1-4: Comprehensive guide structure; verify technical content is accurate.

This guide provides a solid foundation for developers to start building with compressed PDAs. The structure, installation steps, and troubleshooting are well-presented. Consider requesting technical review of the:

  1. Version compatibility matrix
  2. Build/test success criteria
  3. Error scenarios and fixes
zk-compression-docs/mintlify-docs/compressed-tokens/guides.mdx (1)

7-17: All guide links verified—documentation files are present and correct.

All 9 referenced guide files exist at their expected paths in zk-compression-docs/mintlify-docs/compressed-tokens/guides/. The guides index is accurate and complete.

zk-compression-docs/mintlify-docs/discord.mdx (1)

1-4: Discord invite URL verified and valid.

The Discord invite link (https://discord.com/invite/CYvjBgzRFP) returns HTTP 200, confirming it is current and accessible. No action required for this file.

zk-compression-docs/mintlify-docs/deepwiki.mdx (1)

1-3: No changes required—DeepWiki URL and Mintlify configuration are correct.

The url field in frontmatter is a supported Mintlify feature that makes the sidebar link open the given external URL instead of an internal page. The DeepWiki URL returns HTTP 200 and is properly configured.

zk-compression-docs/mintlify-docs/compressed-pdas/guides/how-to-reinitialize-compressed-accounts.mdx (1)

1-4: Let me verify the light-sdk version to complete the validation:The search returned results for unrelated packages (different "light-sdk" packages). Let me search more specifically for the Light Protocol SDK:

Let me search for the actual Light Protocol SDK package on GitHub:

All external links verified; external resources are current and accessible.

Verification completed successfully. All GitHub repository links return HTTP 200 status, zkcompression.com URLs are accessible, and the CLI version 0.27.1-alpha.2 is available on npm. The documentation references are valid and current. The frontmatter, structure, and code examples in the guide are sound.

zk-compression-docs/mintlify-docs/compressed-pdas/guides.mdx (1)

7-15: Guides overview table is well-structured.

The links are correctly formatted with proper paths to individual guide pages. These appear to map correctly to the navigation hierarchy defined in docs.json.

zk-compression-docs/mintlify-docs/compressed-tokens/overview.mdx (1)

33-64: Verify all three package manager installation commands are synchronized.

The npm, yarn, and pnpm installation commands should remain in sync as dependencies are updated. This is a good practice checkpoint during future maintenance.

zk-compression-docs/mintlify-docs/learn/core-concepts/considerations.mdx (2)

22-26: General Recommendation section is clear and practical.

The guidance on when to use vs. not use compression is well-articulated with concrete criteria (update frequency, write lifetime, data access patterns). This helps developers make informed architectural decisions.


52-65: State Cost breakdown is comprehensive and accurate.

The table itemizing Solana base fee, leaf write cost, nullify cost, and address creation cost provides valuable transparency into the true cost model. The lamports values and formulas are helpful for cost estimation.

zk-compression-docs/mintlify-docs/compressed-tokens/guides/how-to-create-compressed-token-pools-for-mint-accounts.mdx (2)

133-201: Full code example is well-structured with clear comments.

The TypeScript code example (create-token-pools.ts) is comprehensive and includes:

  • Proper setup of payer and RPC connection
  • SPL mint creation
  • Token pool creation via createTokenPool()
  • Optional additional pools for write-lock capacity

The step-by-step comments make it easy to follow, and the return value structure is clear.


219-262: Advanced Configuration section provides practical examples.

The "Batch Pool Creation" and "Create Pool with Token-2022" examples demonstrate important use cases and extend the guide's utility for developers with more complex needs.

zk-compression-docs/mintlify-docs/compressed-tokens/guides/how-to-create-and-register-a-mint-account-for-compression.mdx (2)

40-46: npm installation commands are correct.

The npm command uses --save-dev correctly and includes all necessary dependencies for compressed token development.


162-203: Advanced Configurations section demonstrates important customization patterns.

The examples for customizing mint authority and adding freeze authority are valuable for developers who need additional security controls. These configurations align with standard SPL token patterns.

zk-compression-docs/mintlify-docs/docs.json (1)

1-194: All navigation paths verified—docs.json is deployment-ready.

Verification confirms all 72 pages referenced in the navigation hierarchy exist as .mdx files. The JSON configuration is syntactically valid, the color scheme is consistent, and all required Mintlify schema fields are present. No missing files or dangling references that would result in 404 errors post-deployment.

The documentation structure is well-organized and properly configured for the Mintlify platform.

zk-compression-docs/mintlify-docs/compressed-tokens/guides/how-to-transfer-compressed-token.mdx (1)

1-214: Well-structured transfer guide with clear code examples.

The documentation effectively covers prerequisites, full examples, troubleshooting, and advanced configurations. Code examples demonstrate proper error handling (balance checks, account limits) and follow consistent patterns with RPC setup and verification steps.

zk-compression-docs/mintlify-docs/compressed-tokens/guides/how-to-compress-complete-spl-token-accounts.mdx (1)

1-241: Clear compression guide with practical troubleshooting.

The document provides detailed setup, code examples with balance verification, and specific troubleshooting for common scenarios (insufficient balance, remaining amount exceeds balance). The distinction between complete and partial compression is well-explained with a helpful Check callout at lines 41–48.

zk-compression-docs/mintlify-docs/compressed-tokens/guides/how-to-compress-and-decompress-spl-tokens.mdx (1)

1-493: Comprehensive guide with dual-tab workflow examples.

The documentation effectively demonstrates compress-only and compress+decompress workflows in parallel tabs. Code examples include proper balance verification and error handling. Troubleshooting covers both insufficient balance and owner validation edge cases.

zk-compression-docs/mintlify-docs/compressed-tokens/advanced-guides/add-wallet-support-for-compressed-tokens.mdx (1)

1-360: Comprehensive wallet integration guide with end-to-end examples.

The guide provides both quick code snippets and step-by-step integration flows. Covers key wallet functions: balance display, transaction history retrieval, and token sending. Advanced integrations for decompress/compress operations are well-documented with detailed parameter explanations.

Also applies to: 363-631

zk-compression-docs/mintlify-docs/learn/core-concepts.mdx (1)

1-17: Clear conceptual overview with strong component usage.

The introductory page effectively uses Tooltip, Info, and Check components to explain core concepts without overwhelming detail. Logical flow from storage→access→validation→updates→indexing guides readers toward understanding the full system. DeepWiki integration and Card navigation to next topic are helpful.

Also applies to: 19-64

zk-compression-docs/mintlify-docs/learn/core-concepts/merkle-trees-validity-proofs.mdx (1)

1-30: Well-designed educational content on Merkle trees and validity proofs.

The documentation uses Steps, Frames, and Tooltips effectively to break down complex ZK concepts. Tables and diagrams support understanding. The progression from tree structure→root hashing→proof mechanisms→V1/V2 optimizations is logical. Resources section at the end provides valuable external references.

Also applies to: 32-96, 99-164

zk-compression-docs/mintlify-docs/learn/core-concepts/transaction-lifecycle.mdx (2)

41-41: Verify relative documentation links resolve correctly.

Lines 41, 76, and 140 use relative links to other documentation pages (e.g., /resources/json-rpc-methods/getcompressedaccount, /compressed-pdas/guides/how-to-update-compressed-accounts). Ensure these files exist in the Mintlify documentation structure and that Mintlify's routing configuration correctly resolves these paths after deployment.

Also applies to: 76-76, 140-140


6-176: Clear, well-structured documentation with good visual hierarchy.

The document effectively explains transaction lifecycle by progressing from overview → reading → writing → execution. The use of tabbed code examples (TypeScript/Rust) and diagrams supports developer learning. References to external resources (Solana docs, program examples, GitHub source) are contextually appropriate and help bridge to deeper understanding.

zk-compression-docs/mintlify-docs/compressed-pdas/program-examples.mdx (2)

55-55: Verify relative navigation link exists.

The Card component on line 55 references /compressed-pdas/create-a-program-with-compressed-pdas. Please confirm this documentation page exists in the Mintlify structure.


1-57: Well-organized index with clear categorization of examples.

The document serves its purpose as a reference guide, grouping examples by complexity and use case (basic operations, counter logic, combinations, identity, comparison). The Info block (lines 20–27) provides a helpful glossary of operations. External links to GitHub and DeepWiki are contextually appropriate and add value for developers seeking source code and codebase navigation.

zk-compression-docs/mintlify-docs/learn/ai-tools-guide.mdx (3)

114-130: Excellent precision guidance for AI tool usage.

The "Language precision" section (lines 114–130) provides concrete guidance on terminology and response formatting. Instructions to avoid vague verbs ("handles", "manages") and use exact names (function signatures, type names, operations) establish a high quality bar for AI-assisted development. The emphasis on source references (file:line from DeepWiki) adds verifiability and traceability. This is a model example of how to guide AI tool usage effectively.


52-54: All MCP URLs and syntax are accurate against current DeepWiki documentation.

I've cross-referenced every claim in your review comment against the latest DeepWiki MCP documentation:

  • Line 53's Claude CLI command (claude mcp add -s user -t http deepwiki https://mcp.deepwiki.com/mcp) correctly uses the HTTP transport endpoint.
  • Line 139's JSON configuration correctly references the SSE endpoint (https://mcp.deepwiki.com/sse) for Claude Desktop and other IDEs.
  • Lines 97–99 and the tool examples at 154, 160, 166 follow the documented invocation pattern and require no updates.

The code is in sync with current documentation. No corrective action needed.


26-36: Consider migrating embedded video to stable platform for docs durability.

The Google Drive iframe uses the official /preview endpoint (best practice) and correct attributes, so it works as designed. However, Google Drive embedded iframes can become unstable if permissions change or Google modifies viewer behavior, and best practice recommends alternatives like YouTube or Vimeo for public documentation. Since this is a permanent reference in your docs, migrating this video to YouTube, Vimeo, or self-hosted storage would eliminate dependency on Google's viewer platform and ensure the guide remains accessible if Drive permissions or policies change. If staying with Google Drive, add a fallback text link to ensure readers can access the content if the embed fails.

zk-compression-docs/mintlify-docs/compressed-tokens/guides/how-to-mint-compressed-tokens.mdx (2)

8-8: Verify relative documentation links and external API references.

Lines 8 (two links) reference related guides for creating mints and token pools. Line 103 references Helius API key documentation. Ensure these links are current and accessible:

  • /compressed-tokens/guides/how-to-create-and-register-a-mint-account-for-compression
  • /compressed-tokens/guides/how-to-create-compressed-token-pools-for-mint-accounts
  • https://www.helius.dev/zk-compression

Also applies to: 8-8, 103-103


22-186: Comprehensive, well-structured guide with practical examples.

The guide progresses logically from prerequisites → setup → working code → verification. The TypeScript example is concrete and includes actual API calls with proper error handling context. The Accordion sections make the guide scannable without overwhelming beginners. Troubleshooting section with specific error messages and solutions adds significant value for developers debugging integration.

zk-compression-docs/mintlify-docs/openapi/getCompressedAccountsByOwner.yaml (1)

667-933: Schema organization is clear and reusable.

The components/schemas section properly defines reusable schemas (Account, AccountData, Context, Hash, SerializablePubkey, etc.) with appropriate cross-references. The additionalProperties: false constraints on objects (lines 697, 711, 778, 927) enforce strict schemas, which is good for API stability. However, verify that all nested schema references are correctly defined and that no circular dependencies exist.

zk-compression-docs/mintlify-docs/compressed-pdas/guides/how-to-create-compressed-accounts.mdx (3)

11-11: Verify relative link to compressed token accounts guide.

Line 11 references /compressed-tokens/guides/how-to-create-compressed-token-accounts. Ensure this documentation page exists in the Mintlify structure.


353-365: System Accounts reference table is exceptionally clear and helpful.

The table (lines 353–365) describing system accounts for CPI includes concrete Solana program IDs (e.g., SySTEM1eSU2p4BGQfQpimFEWWSC1XDFeun3Nqzz3rT7), linked Solscan entries, and clear role descriptions. This reference is valuable for developers and program auditors. Verify all Solana program IDs are correct and remain stable.


18-376: Clear, methodical implementation guide with comprehensive code samples.

The guide's step-by-step approach, combined with parallel Anchor/Native Rust examples and detailed explanations at each stage, makes it accessible to developers with different experience levels. The progression from constants → account definition → instruction data → address derivation → initialization → CPI invocation mirrors the actual program flow and aids understanding. Tooltips and Info blocks provide just-in-time context without overwhelming the main narrative.

zk-compression-docs/mintlify-docs/learn/core-concepts/compressed-account-model.mdx (2)

108-108: Verify relative documentation links exist.

Lines 108 and 124 reference client library guides:

  • https://github.com/Lightprotocol/developer-content/blob/main/zk-compression-docs/compressed-pdas/client-library/typescript.md#derive-address
  • https://github.com/Lightprotocol/developer-content/blob/main/zk-compression-docs/compressed-pdas/client-library/rust.md#derive-address

These are external GitHub links, not relative Mintlify links, so they point outside the documentation site. Consider converting these to relative Mintlify links if equivalent documentation exists in the site structure (e.g., /compressed-pdas/client-library/typescript and /compressed-pdas/client-library/rust).

Line 36 references /learn/core-concepts/merkle-trees-validity-proofs as a "Next Steps" forward reference. Ensure this page exists.

Also applies to: 124-124, 36-36


6-176: Excellent conceptual introduction to compressed accounts with clear structure.

The document effectively scaffolds learning by first explaining differences from regular accounts, then showing concrete structure definitions, and finally providing implementation examples. The comparison accordions (regular account vs. compressed, Solana PDA vs. compressed PDA derivation) aid understanding by contextualizing the new concepts. Code examples in both TypeScript and Rust support developers in their preferred language.

Comment on lines +37 to +41
* **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
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

Verify version requirements are current and compatible.

The documentation specifies exact version requirements for the development environment:

  • 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

Ensure these versions are:

  1. Currently available and stable
  2. Compatible with each other
  3. Not superseded by newer requirements
  4. Recommended for production use

🏁 Script executed:

#!/bin/bash
# Description: Check version availability and compatibility

# Check Solana CLI latest release
echo "Solana CLI latest releases:"
curl -s https://api.github.com/repos/solana-labs/solana/releases | jq -r '.[0:3] | .[] | .tag_name' | head -5

# Check Anchor CLI latest version
echo -e "\nAnchor CLI latest version info:"
npm view @project-serum/anchor version 2>/dev/null || echo "Check manually on npm"

# Check Light Protocol CLI versions
echo -e "\nLight Protocol CLI versions:"
npm view @lightprotocol/zk-compression-cli versions --json | jq -r '.[-5:]'

Length of output: 211


Update version requirements to reflect current stable tooling releases.

The documented versions are significantly outdated:

  • Solana CLI: Documentation states 2.2.15, but current releases use 2.2.17 or earlier 2.1.x series
  • Anchor CLI: Documentation states 0.31.1, but the current stable is 0.32.1
  • For Anchor 0.31.1 specifically, the recommended Solana version is 2.1.0, not 2.2.15
  • ZK Compression CLI: 0.27.0 is correct as the latest version

Update the version matrix to match current ecosystem standards. Consider whether to pin 0.31.1 or upgrade to the latest Anchor 0.32.1 for better compatibility with current Solana tooling.

Comment on lines +189 to +199
| Example | Description |
|:---------|:------------|
| [basic-operations/anchor](https://github.com/Lightprotocol/program-examples/tree/main/basic-operations/anchor) | Anchor programs to create, update, close, reinitialize and burn compressed accounts with Rust and TypeScript tests |
| [basic-operations/native-rust](https://github.com/Lightprotocol/program-examples/tree/main/basic-operations/native-rust) | Native Solana program implementation to create, update, close, reinitialize and burn compressed accounts with Rust tests |
| [Counter (Anchor)](https://github.com/Lightprotocol/program-examples/tree/main/counter/anchor) | Full compressed account lifecycle (create, increment, decrement, reset, close) using Anchor framework |
| [Counter (Native)](https://github.com/Lightprotocol/program-examples/tree/main/counter/native) | Native Solana program implementation with Rust tests |
| [Counter (Pinocchio)](https://github.com/Lightprotocol/program-examples/tree/main/counter/pinocchio) | Pinocchio implementation using light-sdk-pinocchio with Rust tests |
| [Create-and-Update](https://github.com/Lightprotocol/program-examples/tree/main/create-and-update) | Create new compressed accounts and update existing ones within a single instruction and one validity proof |
| [Read-Only](https://github.com/Lightprotocol/program-examples/tree/main/read-only) | Create compressed accounts and read them on-chain |
| [Account Comparison](https://github.com/Lightprotocol/program-examples/tree/main/account-comparison) | Compare compressed accounts with standard Solana accounts |
| [ZK-ID](https://github.com/Lightprotocol/program-examples/tree/main/zk-id) | Program that uses zero-knowledge proofs for identity verification with compressed accounts |
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

Verify all program example links are valid and current.

The program examples table references 9 GitHub repositories. Verify that all links:

  1. Are accessible and return HTTP 200
  2. Point to active, maintained examples
  3. Still exist at the specified branches/commits

🏁 Script executed:

#!/bin/bash
# Description: Verify GitHub program example links

EXAMPLES=(
  "https://github.com/Lightprotocol/program-examples/tree/main/basic-operations/anchor"
  "https://github.com/Lightprotocol/program-examples/tree/main/basic-operations/native-rust"
  "https://github.com/Lightprotocol/program-examples/tree/main/counter/anchor"
  "https://github.com/Lightprotocol/program-examples/tree/main/counter/native"
  "https://github.com/Lightprotocol/program-examples/tree/main/counter/pinocchio"
  "https://github.com/Lightprotocol/program-examples/tree/main/create-and-update"
  "https://github.com/Lightprotocol/program-examples/tree/main/read-only"
  "https://github.com/Lightprotocol/program-examples/tree/main/account-comparison"
  "https://github.com/Lightprotocol/program-examples/tree/main/zk-id"
)

echo "Checking GitHub repository links..."
for url in "${EXAMPLES[@]}"; do
  STATUS=$(curl -s -o /dev/null -w "%{http_code}" "$url")
  REPO=$(echo "$url" | cut -d'/' -f5-)
  if [ "$STATUS" = "200" ]; then
    echo "$REPO"
  else
    echo "$REPO (HTTP $STATUS)"
  fi
done

Length of output: 461


Fix broken link: basic-operations/native-rust returns HTTP 404.

The GitHub link for the basic-operations/native-rust example at line 195 is broken. The repository path does not exist or has been removed. Update the documentation to either:

  1. Remove the row if the example has been deprecated
  2. Point to the correct location if it has been moved
  3. Replace it with an active example if an alternative exists

Eight of the nine links verified successfully, but this broken reference will frustrate users attempting to access the documentation.

🤖 Prompt for AI Agents
In
zk-compression-docs/mintlify-docs/compressed-pdas/create-a-program-with-compressed-pdas.mdx
around lines 189 to 199, the GitHub link for "basic-operations/native-rust"
(line ~195) returns 404; update the table by either removing that row if the
example is deprecated, replacing the URL with the correct repository path if it
was moved, or swapping in an active alternative example and its URL, then verify
the new link resolves (HTTP 200) and update the accompanying description to
match the chosen action.

Comment on lines +82 to +84
## Next Steps

Create a compressed account.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Next Steps section is vague; add a specific guide link.

Line 84 states "Create a compressed account" without a corresponding link. This should direct users to a specific guide (e.g., /compressed-pdas/guides/how-to-create-compressed-accounts) to improve discoverability and user flow.

Consider this diff:

-## Next Steps
-
-Create a compressed account.
+## Next Steps
+
+Ready to start? [Create your first compressed account](/compressed-pdas/guides/how-to-create-compressed-accounts).
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
## Next Steps
Create a compressed account.
## Next Steps
Ready to start? [Create your first compressed account](/compressed-pdas/guides/how-to-create-compressed-accounts).
🤖 Prompt for AI Agents
In zk-compression-docs/mintlify-docs/compressed-pdas/guides.mdx around lines 82
to 84, the "Next Steps" section simply says "Create a compressed account" with
no link; update this line to include a direct link to the specific guide (for
example /compressed-pdas/guides/how-to-create-compressed-accounts) so users can
click through; make the link text descriptive (e.g., "Create a compressed
account — how-to guide") and ensure the URL path matches the repo's route
structure.

* `&account_meta`: The `CompressedAccountMetaBurn` from instruction data (_Step 2_) that identifies the existing account for the Light System Program to nullify permanently.
* Anchor: Pass `&account_meta` directly
* Native Rust: Pass `&instruction_data.account_meta`
* Include the curent account data.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Fix spelling error: "curent" → "current".

Line 189 contains a typo in the documentation text.

-* Include the curent account data.
+* Include the current account data.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
* Include the curent account data.
* Include the current account data.
🧰 Tools
🪛 LanguageTool

[grammar] ~189-~189: Ensure spelling is correct
Context: ...uction_data.account_meta* Include the curent account data. * Anchor: BuildMyComp...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

🤖 Prompt for AI Agents
In
zk-compression-docs/mintlify-docs/compressed-pdas/guides/how-to-burn-compressed-accounts.mdx
around line 189, fix the typo by changing "curent" to "current" so the bullet
reads "Include the current account data." — update the text in that line
accordingly and save the file.

Comment on lines +189 to +196
**Pass these parameters to `new_mut()`:**

* `&program_id`: The program's ID that owns the compressed account.
* `&account_meta`: The `CompressedAccountMeta` from instruction data (_Step 2_) that identifies the existing account and specifies the output state tree.
* Include the curent account data.
* Anchor: Pass `current_account` directly
* Native: Construct `MyCompressedAccount` with data from `instruction_data`

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Fix typo: "curent" → "current".

Line 193 contains a spelling error that should be corrected for accuracy.

- * Include the curent account data.
+ * Include the current account data.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
**Pass these parameters to `new_mut()`:**
* `&program_id`: The program's ID that owns the compressed account.
* `&account_meta`: The `CompressedAccountMeta` from instruction data (_Step 2_) that identifies the existing account and specifies the output state tree.
* Include the curent account data.
* Anchor: Pass `current_account` directly
* Native: Construct `MyCompressedAccount` with data from `instruction_data`
**Pass these parameters to `new_mut()`:**
* `&program_id`: The program's ID that owns the compressed account.
* `&account_meta`: The `CompressedAccountMeta` from instruction data (_Step 2_) that identifies the existing account and specifies the output state tree.
* Include the current account data.
* Anchor: Pass `current_account` directly
* Native: Construct `MyCompressedAccount` with data from `instruction_data`
🧰 Tools
🪛 LanguageTool

[grammar] ~193-~193: Ensure spelling is correct
Context: ...es the output state tree. * Include the curent account data. * Anchor: Pass `current...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

🤖 Prompt for AI Agents
In
zk-compression-docs/mintlify-docs/compressed-pdas/guides/how-to-update-compressed-accounts.mdx
around lines 189 to 196, fix the spelling typo "curent" to "current" in the
bullet "Include the curent account data." so the text reads "Include the current
account data."; ensure the change updates only that word and preserves
surrounding formatting and punctuation.

Comment on lines +1 to +9
openapi: 3.0.3
info:
title: photon-indexer
description: Solana indexer for general compression
license:
name: Apache-2.0
version: 0.50.0
servers:
- url: https://mainnet.helius-rpc.com?api-key=<api_key>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Apply same security and constraint fixes as previous OpenAPI spec.

This file has the same security configuration and array constraint issues as getCompressedAccountsByOwner.yaml:

  1. Add global security scheme (lines 1–9): Define securitySchemes with API key auth and apply to endpoints
  2. Add array maxItems constraints: Line 701–705 (params array in getMultipleCompressedAccountProofs)

Additionally, the new endpoint getCompressedTokenAccountBalance (lines 350–432) should include any authorization/rate-limit documentation in the response or description.

Refer to the previous file review for detailed remediation steps, or consolidate both specs to avoid duplicating fixes.

Also applies to: 350-432

🧰 Tools
🪛 Checkov (3.2.334)

[high] 1-933: Ensure that the global security field has rules defined

(CKV_OPENAPI_4)


[high] 1-933: Ensure that security operations is not empty.

(CKV_OPENAPI_5)

🤖 Prompt for AI Agents
In
zk-compression-docs/mintlify-docs/openapi/getCompressedTokenAccountBalance.yaml
around lines 1-9, 350-432 and 701-705: the spec is missing a global security
scheme and array constraints and the new endpoint lacks auth/rate-limit
documentation; add a components.securitySchemes entry for the API key (header or
query as used elsewhere), apply a top-level security requirement so endpoints
inherit the API key auth, add maxItems (and any other relevant array constraints
like minItems/uniqueItems if applicable) to the params array referenced at lines
701-705, and update the getCompressedTokenAccountBalance operation (lines
350-432) to include authorization details and any rate-limit guidance in the
operation description and/or response headers documentation so clients know
required auth and limits.

Comment on lines +138 to +142
type: array
items:
$ref: '#/components/schemas/TokenBalance'
UnsignedInteger:
type: integer
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Add maxItems constraint to array schema.

The items array in TokenBalanceListV2 (lines 138–142) lacks a maxItems constraint, which helps clients validate response boundaries and prevents unbounded array processing.

items:
  type: array
  maxItems: 1000  # Adjust based on your API limits
  items:
    $ref: '#/components/schemas/TokenBalance'
🧰 Tools
🪛 Checkov (3.2.334)

[medium] 138-142: Ensure that arrays have a maximum number of items

(CKV_OPENAPI_21)

🤖 Prompt for AI Agents
In
zk-compression-docs/mintlify-docs/openapi/getCompressedTokenBalancesByOwnerV2.yaml
around lines 138–142, the TokenBalanceListV2 array schema is missing a maxItems
constraint; add a maxItems (e.g., maxItems: 1000 or whatever your API limit is)
directly under the array schema to bound responses and help clients
validate/limit processing, keeping the existing items reference intact and
adjusting the numeric limit to match your service constraints.

Comment on lines +19 to +21
```
npm i -g mint
```
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

Add language specifier to fenced code block.

Line 19 code block should declare bash language for syntax highlighting.

-```
+```bash
 npm i -g mint
-```
+```
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)

19-19: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🤖 Prompt for AI Agents
In zk-compression-docs/mintlify-docs/README.md around lines 19 to 21, the fenced
code block does not declare a language; update the opening backticks to include
the bash language specifier (e.g., change ``` to ```bash) so the snippet "npm i
-g mint" has proper bash syntax highlighting, and leave the closing backticks
unchanged.

Comment on lines +25 to +27
```
mint dev
```
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

Add language specifier to fenced code block.

Line 25 code block should declare bash language for syntax highlighting.

-```
+```bash
 mint dev
-```
+```
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)

25-25: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🤖 Prompt for AI Agents
In zk-compression-docs/mintlify-docs/README.md around lines 25 to 27, the fenced
code block containing the command `mint dev` is missing a language specifier;
update the opening backticks to include "bash" (i.e., ```bash) so the block
becomes a bash fenced code block for proper syntax highlighting.

Comment on lines +42 to +43
### Resources
- [Mintlify documentation](https://mintlify.com/docs)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

Add blank line before heading.

Markdown heading at line 42 needs a blank line above it for consistency with MDX standards.

 - If a page loads as a 404: Make sure you are running in a folder with a valid `docs.json`.
 
+
 ### Resources

Committable suggestion skipped: line range outside the PR's diff.

🧰 Tools
🪛 markdownlint-cli2 (0.18.1)

42-42: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)

🤖 Prompt for AI Agents
In zk-compression-docs/mintlify-docs/README.md around lines 42 to 43, the
Markdown heading "### Resources" is missing a blank line above it; insert a
single blank line before that heading so the file follows MDX/Markdown spacing
conventions and renders consistently.

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 24

♻️ Duplicate comments (29)
zk-compression-docs/mintlify-docs/compressed-tokens/advanced-guides/how-to-combine-operations-in-one-transaction.mdx (2)

58-63: Fix bash comment syntax on line 62.

Line 62 uses ## which is not valid bash comment syntax. Bash comments require a single #. Within the bash code block, this line should be:

  ```bash
  # Start a local test validator
  light test-validator

-## ensure you have the Solana CLI accessible in your system PATH
+# ensure you have the Solana CLI accessible in your system PATH

---

`260-262`: **Complete the Next Steps section with a link.**

Line 262 references a transfer guide but provides no link. Add the link to guide users to the next step:

```diff
  ## Next Steps

-Learn how to transfer compressed tokens.
+Learn how to [transfer compressed tokens](../transfer-tokens).
zk-compression-docs/mintlify-docs/compressed-pdas/create-a-program-with-compressed-pdas.mdx (2)

37-41: ⚠️ Verify version requirements are current and resolve compatibility mismatch.

This flagged issue from previous review remains unresolved. The documented versions have compatibility concerns:

  • Solana CLI 2.2.15 + Anchor CLI 0.31.1: These versions have a known mismatch. Anchor 0.31.1 officially recommends Solana 2.1.0, not 2.2.15.
  • Potential obsolescence: Solana 2.2.17+ and Anchor 0.32.1+ are now stable. Pinning to older versions may confuse developers following this guide.

Update to either:

  1. Upgrade both to the latest stable (Solana 2.2.17+, Anchor 0.32.1+) and verify compatibility
  2. Or clarify why these specific older versions are required (if there's a technical reason)
What is the latest stable version of Anchor CLI and its recommended Solana CLI version?

189-200: Fix or remove the broken GitHub link in the program examples table.

This flagged issue from the previous review remains unresolved. Line 192 references a GitHub link that returns HTTP 404:

| [basic-operations/native-rust](https://github.com/Lightprotocol/program-examples/tree/main/basic-operations/native-rust) | Native Solana program implementation…

Action required: Either:

  1. Remove this row if the example has been deprecated
  2. Point to the correct repository path if it was moved
  3. Replace with an active alternative example

Verify the updated link resolves (HTTP 200) before publishing.

#!/bin/bash
# Description: Verify all program example links return HTTP 200

EXAMPLES=(
  "https://github.com/Lightprotocol/program-examples/tree/main/basic-operations/anchor"
  "https://github.com/Lightprotocol/program-examples/tree/main/basic-operations/native-rust"
  "https://github.com/Lightprotocol/program-examples/tree/main/counter/anchor"
  "https://github.com/Lightprotocol/program-examples/tree/main/counter/native"
  "https://github.com/Lightprotocol/program-examples/tree/main/counter/pinocchio"
  "https://github.com/Lightprotocol/program-examples/tree/main/create-and-update"
  "https://github.com/Lightprotocol/program-examples/tree/main/read-only"
  "https://github.com/Lightprotocol/program-examples/tree/main/account-comparison"
  "https://github.com/Lightprotocol/program-examples/tree/main/zk-id"
)

echo "Verifying GitHub links for program examples..."
for url in "${EXAMPLES[@]}"; do
  STATUS=$(curl -s -o /dev/null -w "%{http_code}" "$url")
  EXAMPLE=$(echo "$url" | rev | cut -d'/' -f1 | rev)
  if [ "$STATUS" = "200" ]; then
    echo "$EXAMPLE"
  else
    echo "$EXAMPLE (HTTP $STATUS)"
  fi
done
zk-compression-docs/mintlify-docs/compressed-tokens/advanced-guides/create-an-airdrop.mdx (3)

936-939: Fix GitHub branding capitalization.

Line 938 uses "Github" but the official branding is "GitHub". Apply this diff:

-* Full Example on Github to [create an Airdrop with Claim](https://github.com/Lightprotocol/example-compressed-claim).
+* Full Example on GitHub to [create an Airdrop with Claim](https://github.com/Lightprotocol/example-compressed-claim).

17-24: Fix the broken internal link path.

Line 19 references /compressed-tokens/advanced-guides/how-to-create-an-airdrop-without-claim, but Mintlify will route the file create-an-airdrop.mdx to /compressed-tokens/advanced-guides/create-an-airdrop. This link is likely a self-reference within the CardGroup (advertising the programmatic approach). Either update it to the correct path or remove it if self-linking is not intended:

  <Card
    title="Custom Programmatic Airdrop"
-   link="/compressed-tokens/advanced-guides/how-to-create-an-airdrop-without-claim"
+   link="/compressed-tokens/advanced-guides/create-an-airdrop"
    icon="terminal"
  >
  Create a programmatic airdrop with this guide for more control.
  </Card>

931-941: Add a contextual header before the decompression script.

The Advanced Features section jumps directly into the decompression code at line 940 with minimal context ("Add decompression of SPL Tokens with this script."). This area would benefit from a brief explanatory header and one-sentence introduction to clarify when/why users need this pattern (e.g., for custom claim UX where users opt to decompress). Example:

 ### Advanced Features
 
 <Info>
 Solana Wallets like Phantom and Backpack already support compressed tokens.
 Still, you can let users decompress to SPL via your Frontend to customize claims.
 </Info>
 
 * Full Example on GitHub to [create an Airdrop with Claim](https://github.com/Lightprotocol/example-compressed-claim).

+### Optional: Decompression for Custom Claim UX
+
+If your claim interface requires users to decompress SPL tokens (for example, to sweep claims into a specific wallet), use this decompression workflow:
+
-* Add decompression of SPL Tokens with this script.
zk-compression-docs/mintlify-docs/compressed-tokens/guides/how-to-merge-compressed-token-accounts.mdx (1)

185-190: Unresolved: Prefer static import for BN over dynamic require.

This issue was flagged in a previous review. Line 188 uses a dynamic require('bn.js') call within the code, which is suboptimal. The code example should use a static import at the top of the code block and reference it directly.

 import { Keypair, PublicKey } from '@solana/web3.js';
 import { createRpc } from '@lightprotocol/stateless.js';
+import BN from 'bn.js';
 import {
     createMint,
     mintTo,
     mergeTokenAccounts
 } from '@lightprotocol/compressed-token';

Then update line 186–190:

     const totalBalance = accountsBefore.items.reduce(
         (sum, account) => sum.add(account.parsed.amount),
-        new (require('bn.js'))(0)
+        new BN(0)
     );
zk-compression-docs/mintlify-docs/compressed-pdas/guides/how-to-burn-compressed-accounts.mdx (1)

189-189: Unresolved: Fix spelling error "curent" → "current".

This typo was flagged in a previous review and remains unfixed.

-* Include the curent account data.
+* Include the current account data.
zk-compression-docs/mintlify-docs/compressed-tokens/advanced-guides/use-token-2022-with-compression.mdx (1)

114-114: Unresolved: Standardize API key placeholder formatting.

This formatting inconsistency was flagged in a previous review. Line 114 uses escaped underscores (<your\_api_key>), but line 120 in the code block uses unescaped format (<your_api_key>). Standardize to unescaped format in the display text to match the code block and avoid copy-paste confusion.

-Follow these steps to create an RPC Connection. Replace \<your\_api_key> with your API key before running.
+Follow these steps to create an RPC Connection. Replace `<your_api_key>` with your API key before running.
zk-compression-docs/mintlify-docs/learn/core-concepts/considerations.mdx (1)

67-73: I need to verify the claims about broken URLs before finalizing this review. Let me check the current state of both the GitHub and zkcompression.com links:

Fix outdated documentation links pointing to deprecated GitHub repository.

The review comment identifies a legitimate issue: documentation has been migrated from the developer repository to zkcompression.com. The GitHub URLs in lines 71–72 should be updated to reference the current documentation site.

-<Card horizontal icon="github" title="Compressed Tokens" href="https://github.com/Lightprotocol/developer-content/blob/main/zk-compression-docs/learn/compressed-tokens/overview.md"/>
-<Card horizontal icon="github" title="Compressed PDAs" href="https://github.com/Lightprotocol/developer-content/blob/main/zk-compression-docs/learn/compressed-pdas/create-a-program-with-compressed-pdas.md"/>
+<Card horizontal icon="github" title="Compressed Tokens" href="https://www.zkcompression.com/compressed-tokens/overview"/>
+<Card horizontal icon="github" title="Compressed PDAs" href="https://www.zkcompression.com/compressed-pdas/create-a-program-with-compressed-pdas"/>
zk-compression-docs/mintlify-docs/compressed-tokens/advanced-guides/add-wallet-support-for-compressed-tokens.mdx (1)

361-362: ** Remove HTML <strong> tag artifact.**

Line 361 contains an erroneous HTML <strong> tag wrapping the mint declaration (flagged in a previous review). This formatting artifact should be removed for consistency with surrounding code block formatting.

-<strong>const mint = new PublicKey("MINT ADDRESS"); // Replace with mint address
-</strong>
+const mint = new PublicKey("MINT ADDRESS"); // Replace with mint address
zk-compression-docs/mintlify-docs/compressed-pdas/guides/how-to-update-compressed-accounts.mdx (1)

189-196: ** Fix spelling typo: "curent" → "current".**

Line 193 contains a spelling error that was flagged in a previous review:

- * Include the curent account data.
+ * Include the current account data.
zk-compression-docs/mintlify-docs/compressed-tokens/guides.mdx (1)

14-14: Fix locale violation: "afterwards" → "afterward"

As flagged in the previous review, line 14 uses British English spelling "afterwards". For American English consistency across the documentation, change to "afterward".

- | [How to Compress complete SPL Token Accounts](/compressed-tokens/guides/how-to-compress-complete-spl-token-accounts) | Compress complete SPL token accounts and reclaim rent afterwards |
+ | [How to Compress complete SPL Token Accounts](/compressed-tokens/guides/how-to-compress-complete-spl-token-accounts) | Compress complete SPL token accounts and reclaim rent afterward |
zk-compression-docs/mintlify-docs/README.md (3)

19-21: Add language specifier to fenced code block

As flagged in the previous review, line 19 code block should declare bash language for syntax highlighting.

-```
+```bash
 npm i -g mint
-```
+```

25-27: Add language specifier to fenced code block

As flagged in the previous review, line 25 code block should declare bash language for syntax highlighting.

-```
+```bash
 mint dev
-```
+```

42-43: Add blank line before heading

As flagged in the previous review, the Markdown heading at line 42 needs a blank line above it for consistency with MDX standards.

 - If a page loads as a 404: Make sure you are running in a folder with a valid `docs.json`.
 
+
 ### Resources
zk-compression-docs/mintlify-docs/compressed-pdas/guides.mdx (1)

82-84: Next Steps section is vague; add a specific guide link.

As flagged in the previous review, line 84 states "Create a compressed account" without a corresponding link. This should direct users to a specific guide to improve discoverability and user flow.

 ## Next Steps
 
-Create a compressed account.
+Ready to start? [Create your first compressed account](/compressed-pdas/guides/how-to-create-compressed-accounts).
zk-compression-docs/mintlify-docs/compressed-tokens/guides/how-to-create-compressed-token-accounts.mdx (2)

6-6: Remove redundant phrase: "Compressed Tokens" appears redundantly at end of sentence.

Line 6 ends with a redundant phrase. The sentence already refers to compressed tokens and should not end with "Compressed Tokens". Rewrite for clarity and grammatical correctness:

-Compressed token accounts store ownership information for compressed tokens like regular token accounts with two core differences. Compressed Tokens
+Compressed token accounts store ownership information for compressed tokens, similar to regular token accounts. However, they have two key differences:

1-17: File is critically incomplete—missing substantial content.

This file contains only 17 lines and appears truncated. The AI summary indicates this should be a comprehensive guide with:

  • Complete explanation of how mintTo() and transfer() create compressed token accounts (currently only mentioned without detail)
  • Prerequisites and dependencies installation section
  • Full TypeScript/Anchor/Native Rust code examples with step-by-step setup
  • Address derivation and initialization workflow details
  • Troubleshooting and advanced configuration sections
  • Links to source code and next steps

Peer guides in the same directory (e.g., how-to-mint-compressed-tokens.mdx, how-to-transfer-compressed-token.mdx) range from 207–496 lines and demonstrate the expected depth and structure.

This file must be completed before merge. The guide currently ends abruptly after line 17, leaving users without actionable instructions or code examples.

zk-compression-docs/mintlify-docs/compressed-tokens/overview.mdx (1)

139-139: Use American English spelling "afterward" instead of "afterwards".

In American English, "afterward" (without the 's') is the standard spelling for the adverb form.

-| [Compress Complete SPL Token Accounts](/compressed-tokens/guides/how-to-compress-complete-spl-token-accounts)                 | Compress complete SPL token accounts and reclaim rent afterwards           |
+| [Compress Complete SPL Token Accounts](/compressed-tokens/guides/how-to-compress-complete-spl-token-accounts)                 | Compress complete SPL token accounts and reclaim rent afterward            |
zk-compression-docs/mintlify-docs/compressed-tokens/guides/how-to-compress-and-decompress-spl-tokens.mdx (1)

496-496: Fix American English spelling: "afterwards" → "afterward".

Line 496 uses the British English variant. Standardize to American English:

- Learn how to compress complete token accounts in one transaction and reclaim rent afterwards.
+ Learn how to compress complete token accounts in one transaction and reclaim rent afterward.
zk-compression-docs/mintlify-docs/index.mdx (2)

87-89: Replace embedded Google Drive iframe with a direct link for security and reliability.

Embedding external iframes (particularly Google Drive) introduces several concerns:

  • Security/Privacy: Google Drive embeds expose user IP and analytics data to Google.
  • Reliability: If the share link is revoked, the embed silently breaks without user notification.
  • Performance: Iframe loading delays page render and adds external dependency latency.

Replace the iframe with a direct link card:

-<Frame>
-  <iframe src="https://drive.google.com/file/d/1-oxTqNMQX8LqP8FYSCDiG3YzIixnPbiN/preview" width="100%" height="100%" allow="autoplay" className="rounded-xl aspect-video"></iframe>
-</Frame>
+<Card
+  title="Watch: ZK Compression Overview"
+  href="https://drive.google.com/file/d/1-oxTqNMQX8LqP8FYSCDiG3YzIixnPbiN/view"
+  icon="video"
+>
+  Learn the fundamentals of ZK Compression in this overview video.
+</Card>

This approach provides a visible link users can click, improving transparency and allowing users to handle link expiration gracefully.


11-11: Consider simplifying wordy phrase: "at a fraction of the cost" → "at significantly lower cost".

The phrase "at a fraction of the cost" is somewhat verbose. A more concise alternative improves readability:

- ZK Compression is a Solana account primitive that lets you create tokens and PDAs at a fraction of the cost.
+ ZK Compression is a Solana account primitive that lets you create tokens and PDAs at significantly lower cost.

This maintains clarity while improving brevity.

zk-compression-docs/mintlify-docs/openapi/getCompressedMintTokenHolders.yaml (1)

129-131: Add maxItems constraint to prevent unbounded responses.

The items array in the OwnerBalanceList schema lacks a maxItems constraint. Without this, clients could receive unbounded arrays, potentially causing performance degradation. Add a reasonable limit based on your indexer's capacity:

     items:
       type: array
+      maxItems: 1000
       items:
         $ref: '#/components/schemas/OwnerBalance'

Adjust maxItems to reflect your actual API pagination limit and document this constraint for API consumers.

zk-compression-docs/mintlify-docs/openapi/getCompressedAccountsByOwner.yaml (1)

278-282: Add maxItems constraint to filters array to prevent unbounded requests.

The filters array in the getCompressedAccountsByOwner request lacks a maxItems constraint. Without this limit, clients could send unbounded filter arrays, potentially causing performance degradation or DDoS. Add a reasonable maximum:

                   filters:
                     type: array
+                    maxItems: 10
                     items:
                       $ref: '#/components/schemas/FilterSelector'

Adjust maxItems based on your indexer's performance capacity and document the constraint for API consumers.

zk-compression-docs/mintlify-docs/learn/core-concepts/merkle-trees-validity-proofs.mdx (3)

135-135: Remove duplicate verb: "optimize optimize" → "optimizes".

Same issue as line 97: duplicated word from copy/paste.

-**V2** optimizes optimize compute unit consumption by up to 70% and is **currently on Devnet**.
+**V2** optimizes compute unit consumption by up to 70% and is **currently on Devnet**.

114-115: Reduce word repetition: vary sentence openings in address tree section.

Three successive sentences begin with "Address", which reduces readability. Combine or rephrase to improve flow.

-Address trees store derived addresses in an indexed structure. Unlike state trees that store account hashes, address trees store the actual address values along with pointers to maintain sorted order.
+Address trees store derived addresses in an indexed structure, distinct from state trees that store account hashes. These trees hold the actual address values along with pointers to maintain sorted order.

97-97: Remove duplicate verb "optimize" from line 97.

The documentation contains a clear typo where the word "optimize" is duplicated. Line 97 currently reads "V2 optimizes optimize compute unit consumption..." which is grammatically incorrect. The second "optimize" must be removed, leaving only the verb "optimizes."

-**V2** optimizes optimize compute unit consumption by up to 70% and is **currently on Devnet**.
+**V2** optimizes compute unit consumption by up to 70% and is **currently on Devnet**.
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 89e81fb and caaad5b.

⛔ Files ignored due to path filters (105)
  • zk-compression-docs/mintlify-docs/favicon.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/1000x-cypherpunk-docs (1).svg is excluded by !**/*.svg and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/1000x-cypherpunk-docs (2).svg is excluded by !**/*.svg and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/1000x-cypherpunk-docs (3).svg is excluded by !**/*.svg and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/1000x-cypherpunk-docs (4).svg is excluded by !**/*.svg and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/1000x-cypherpunk-docs.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/1000x-cypherpunk-docs.svg is excluded by !**/*.svg and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/1000x-germany 1.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/1000x-germany.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/1000x-pt 1-2.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/1000xHackathon_banner.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/1000x_35_banner.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/Build_Anything.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/Design ohne Titel-2.mp4 is excluded by !**/*.mp4 and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/Group 632668.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/Light Protocol v2 - Batched Merkle trees (3).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/Light Protocol v2 - Batched Merkle trees (4) (1).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/Light-Protocol-v2 -Batched-Merkle-trees-(4).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/ScaleAnything (1).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/ScaleAnything.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/Screenshot 2024-05-10 at 06.22.52.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/Screenshot 2024-05-10 at 06.37.41.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/Screenshot 2024-05-13 at 14.40.53.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/Untitled (5).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/Untitled (6).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/Untitled-1.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/Untitled-4.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/Untitled.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/banner-image.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/burn-dark.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/burn.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/client-burn (1).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/client-burn.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/client-close (1).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/client-close.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/client-create (1).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/client-create.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/client-reinit (1).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/client-reinit.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/client-update (1).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/client-update.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/close-dark.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/close.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/create-dark.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/create.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/ger-banner.svg is excluded by !**/*.svg and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/ger-card (1).svg is excluded by !**/*.svg and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/ger-card.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/ger-card.svg is excluded by !**/*.svg and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (1) (1).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (1).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (10).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (11).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (12).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (13).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (14).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (16).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (17).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (18).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (19).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (2) (1).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (21).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (24).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (25).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (3) (1).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (32).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (34).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (4).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (5).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (6).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (7) (1).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (7).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (8).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image (9).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image-(2).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image-(3).png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image-1.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image-20.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image-22.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/image-23.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/program-burn-1.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/program-burn.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/program-close.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/program-closes.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/program-create-1.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/program-create.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/program-reinit-1.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/program-reinit.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/program-update-1.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/program-update.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/pt-card (1).svg is excluded by !**/*.svg and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/pt-card.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/pt-card.svg is excluded by !**/*.svg and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/pt-new.svg is excluded by !**/*.svg and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/reinit-dark.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/reinit.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/solanazero-banner Large 2.jpeg is excluded by !**/*.jpeg and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/solanazero-banner Large.jpeg is excluded by !**/*.jpeg and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/solanazero-banner.jpg is excluded by !**/*.jpg and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/update-dark.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/update.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/zkc24-ezgif.com-video-to-gif-converter.gif is excluded by !**/*.gif and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/images/zkcompression_1000x_banner.png is excluded by !**/*.png and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/logo/dark.svg is excluded by !**/*.svg and included by zk-compression-docs/**
  • zk-compression-docs/mintlify-docs/logo/light.svg is excluded by !**/*.svg and included by zk-compression-docs/**
📒 Files selected for processing (54)
  • zk-compression-docs/mintlify-docs/LICENSE (1 hunks)
  • zk-compression-docs/mintlify-docs/README.md (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-pdas/client-library.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-pdas/create-a-program-with-compressed-pdas.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-pdas/guides.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-pdas/guides/how-to-burn-compressed-accounts.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-pdas/guides/how-to-close-compressed-accounts.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-pdas/guides/how-to-create-compressed-accounts.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-pdas/guides/how-to-reinitialize-compressed-accounts.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-pdas/guides/how-to-update-compressed-accounts.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-pdas/program-examples.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-tokens/advanced-guides.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-tokens/advanced-guides/add-wallet-support-for-compressed-tokens.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-tokens/advanced-guides/create-an-airdrop-with-claim.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-tokens/advanced-guides/create-an-airdrop.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-tokens/advanced-guides/example-node-js.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-tokens/advanced-guides/example-web-client.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-tokens/advanced-guides/how-to-combine-operations-in-one-transaction.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-tokens/advanced-guides/use-token-2022-with-compression.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-tokens/guides.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-tokens/guides/how-to-approve-and-revoke-delegate-authority.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-tokens/guides/how-to-compress-and-decompress-spl-tokens.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-tokens/guides/how-to-compress-complete-spl-token-accounts.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-tokens/guides/how-to-create-and-register-a-mint-account-for-compression.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-tokens/guides/how-to-create-compressed-token-accounts.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-tokens/guides/how-to-create-compressed-token-pools-for-mint-accounts.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-tokens/guides/how-to-merge-compressed-token-accounts.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-tokens/guides/how-to-mint-compressed-tokens.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-tokens/guides/how-to-transfer-compressed-token.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/compressed-tokens/overview.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/deepwiki.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/discord.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/docs.json (1 hunks)
  • zk-compression-docs/mintlify-docs/github.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/index.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/learn/ai-tools-guide.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/learn/core-concepts.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/learn/core-concepts/compressed-account-model.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/learn/core-concepts/considerations.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/learn/core-concepts/merkle-trees-validity-proofs.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/learn/core-concepts/transaction-lifecycle.mdx (1 hunks)
  • zk-compression-docs/mintlify-docs/openapi/getCompressedAccount.yaml (1 hunks)
  • zk-compression-docs/mintlify-docs/openapi/getCompressedAccountBalance.yaml (1 hunks)
  • zk-compression-docs/mintlify-docs/openapi/getCompressedAccountProof.yaml (1 hunks)
  • zk-compression-docs/mintlify-docs/openapi/getCompressedAccountsByOwner.yaml (1 hunks)
  • zk-compression-docs/mintlify-docs/openapi/getCompressedBalanceByOwner.yaml (1 hunks)
  • zk-compression-docs/mintlify-docs/openapi/getCompressedMintTokenHolders.yaml (1 hunks)
  • zk-compression-docs/mintlify-docs/openapi/getCompressedTokenAccountBalance.yaml (1 hunks)
  • zk-compression-docs/mintlify-docs/openapi/getCompressedTokenAccountsByDelegate.yaml (1 hunks)
  • zk-compression-docs/mintlify-docs/openapi/getCompressedTokenAccountsByOwner.yaml (1 hunks)
  • zk-compression-docs/mintlify-docs/openapi/getCompressedTokenBalancesByOwner.yaml (1 hunks)
  • zk-compression-docs/mintlify-docs/openapi/getCompressedTokenBalancesByOwnerV2.yaml (1 hunks)
  • zk-compression-docs/mintlify-docs/openapi/getCompressionSignaturesForAccount.yaml (1 hunks)
  • zk-compression-docs/mintlify-docs/openapi/getCompressionSignaturesForAddress.yaml (1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
zk-compression-docs/**/*.md

⚙️ CodeRabbit configuration file

zk-compression-docs/**/*.md: Cross-verify documentation with source code using CLAUDE.md mappings.
Prioritize accuracy over assumptions - always check actual source files.

Files:

  • zk-compression-docs/mintlify-docs/README.md
🪛 Checkov (3.2.334)
zk-compression-docs/mintlify-docs/openapi/getCompressedAccountsByOwner.yaml

[high] 1-789: Ensure that the global security field has rules defined

(CKV_OPENAPI_4)


[high] 1-789: Ensure that security operations is not empty.

(CKV_OPENAPI_5)


[medium] 278-282: Ensure that arrays have a maximum number of items

(CKV_OPENAPI_21)

zk-compression-docs/mintlify-docs/openapi/getCompressedTokenBalancesByOwnerV2.yaml

[high] 1-146: Ensure that the global security field has rules defined

(CKV_OPENAPI_4)


[high] 1-146: Ensure that security operations is not empty.

(CKV_OPENAPI_5)


[medium] 138-142: Ensure that arrays have a maximum number of items

(CKV_OPENAPI_21)

zk-compression-docs/mintlify-docs/openapi/getCompressedMintTokenHolders.yaml

[high] 1-142: Ensure that the global security field has rules defined

(CKV_OPENAPI_4)


[high] 1-142: Ensure that security operations is not empty.

(CKV_OPENAPI_5)


[medium] 129-133: Ensure that arrays have a maximum number of items

(CKV_OPENAPI_21)

zk-compression-docs/mintlify-docs/openapi/getCompressionSignaturesForAccount.yaml

[high] 1-1517: Ensure that the global security field has rules defined

(CKV_OPENAPI_4)


[high] 1-1517: Ensure that security operations is not empty.

(CKV_OPENAPI_5)


[medium] 1149-1153: Ensure that arrays have a maximum number of items

(CKV_OPENAPI_21)

zk-compression-docs/mintlify-docs/openapi/getCompressedTokenAccountsByDelegate.yaml

[high] 1-673: Ensure that the global security field has rules defined

(CKV_OPENAPI_4)


[high] 1-673: Ensure that security operations is not empty.

(CKV_OPENAPI_5)


[medium] 468-472: Ensure that arrays have a maximum number of items

(CKV_OPENAPI_21)

zk-compression-docs/mintlify-docs/openapi/getCompressedAccount.yaml

[high] 1-167: Ensure that the global security field has rules defined

(CKV_OPENAPI_4)


[high] 1-167: Ensure that security operations is not empty.

(CKV_OPENAPI_5)

zk-compression-docs/mintlify-docs/openapi/getCompressedAccountProof.yaml

[high] 1-132: Ensure that the global security field has rules defined

(CKV_OPENAPI_4)


[high] 1-132: Ensure that security operations is not empty.

(CKV_OPENAPI_5)


[medium] 116-120: Ensure that arrays have a maximum number of items

(CKV_OPENAPI_21)

zk-compression-docs/mintlify-docs/openapi/getCompressedTokenAccountBalance.yaml

[high] 1-933: Ensure that the global security field has rules defined

(CKV_OPENAPI_4)


[high] 1-933: Ensure that security operations is not empty.

(CKV_OPENAPI_5)


[medium] 701-705: Ensure that arrays have a maximum number of items

(CKV_OPENAPI_21)

zk-compression-docs/mintlify-docs/openapi/getCompressionSignaturesForAddress.yaml

[high] 1-1639: Ensure that the global security field has rules defined

(CKV_OPENAPI_4)


[high] 1-1639: Ensure that security operations is not empty.

(CKV_OPENAPI_5)


[medium] 1263-1267: Ensure that arrays have a maximum number of items

(CKV_OPENAPI_21)

zk-compression-docs/mintlify-docs/openapi/getCompressedAccountBalance.yaml

[high] 1-119: Ensure that the global security field has rules defined

(CKV_OPENAPI_4)


[high] 1-119: Ensure that security operations is not empty.

(CKV_OPENAPI_5)

zk-compression-docs/mintlify-docs/openapi/getCompressedTokenBalancesByOwner.yaml

[high] 1-1294: Ensure that the global security field has rules defined

(CKV_OPENAPI_4)


[high] 1-1294: Ensure that security operations is not empty.

(CKV_OPENAPI_5)


[medium] 1044-1048: Ensure that arrays have a maximum number of items

(CKV_OPENAPI_21)

zk-compression-docs/mintlify-docs/openapi/getCompressedBalanceByOwner.yaml

[high] 1-1145: Ensure that the global security field has rules defined

(CKV_OPENAPI_4)


[high] 1-1145: Ensure that security operations is not empty.

(CKV_OPENAPI_5)


[medium] 925-929: Ensure that arrays have a maximum number of items

(CKV_OPENAPI_21)

zk-compression-docs/mintlify-docs/openapi/getCompressedTokenAccountsByOwner.yaml

[high] 1-554: Ensure that the global security field has rules defined

(CKV_OPENAPI_4)


[high] 1-554: Ensure that security operations is not empty.

(CKV_OPENAPI_5)


[medium] 349-353: Ensure that arrays have a maximum number of items

(CKV_OPENAPI_21)

🪛 LanguageTool
zk-compression-docs/mintlify-docs/learn/core-concepts/considerations.mdx

[style] ~25-~25: As an alternative to the over-used intensifier ‘very’, consider replacing this phrase.
Context: ...ber of writes to the same account to be very large (>>1000x). - The account stores large a...

(EN_WEAK_ADJECTIVE)


[uncategorized] ~70-~70: The official name of this software platform is spelled with a capital “H”.
Context: ...xt step and start building! <Card horizontal icon="github" title="Compressed Tokens" href="https:...

(GITHUB)

zk-compression-docs/mintlify-docs/github.mdx

[grammar] ~1-~1: Hier könnte ein Fehler sein.
Context: --- title: GitHub url: "https://github.com/Lightprotocol" ---

(QB_NEW_DE)

zk-compression-docs/mintlify-docs/learn/core-concepts/merkle-trees-validity-proofs.mdx

[grammar] ~31-~31: Use a hyphen to join words.
Context: ...Hash"> Only this root hash is stored on chain as single value on chain to secure...

(QB_NEW_EN_HYPHEN)


[grammar] ~31-~31: Use a hyphen to join words.
Context: ...sh is stored on chain as single value on chain to secure the integrity of all com...

(QB_NEW_EN_HYPHEN)


[grammar] ~41-~41: Use a hyphen to join words.
Context: ... For compressed Solana accounts, the 32 byte leaf hashes effectively mirror the ...

(QB_NEW_EN_HYPHEN)


[style] ~114-~114: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ... Address trees store derived addresses in an ind...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)

zk-compression-docs/mintlify-docs/compressed-pdas/guides/how-to-create-compressed-accounts.mdx

[grammar] ~11-~11: Use a hyphen to join words.
Context: ...y write to the account. * For Solana PDA like behavior your compressed account ne...

(QB_NEW_EN_HYPHEN)

zk-compression-docs/mintlify-docs/compressed-tokens/guides/how-to-create-compressed-token-pools-for-mint-accounts.mdx

[style] ~135-~135: Using many exclamation marks might seem excessive (in this case: 3 exclamation marks for a text that’s 1290 characters long)
Context: ...pt to create token pools for an SPL mint! ```typescript create-token-pools.ts hi...

(EN_EXCESSIVE_EXCLAMATION)

zk-compression-docs/mintlify-docs/compressed-tokens/advanced-guides/example-web-client.mdx

[grammar] ~1-~1: Hier könnte ein Fehler sein.
Context: --- title: "Example Web Client" url: "https://github.com/Lightprotocol/example-web-client" ---

(QB_NEW_DE)

zk-compression-docs/mintlify-docs/deepwiki.mdx

[grammar] ~1-~1: Hier könnte ein Fehler sein.
Context: --- title: DeepWiki url: "https://deepwiki.com/Lightprotocol/light-protocol" ---

(QB_NEW_DE)

zk-compression-docs/mintlify-docs/compressed-tokens/advanced-guides/example-node-js.mdx

[grammar] ~1-~1: Hier könnte ein Fehler sein.
Context: --- title: "Example Node.js Client" url: "https://github.com/Lightprotocol/example-nodejs-client" ---

(QB_NEW_DE)

zk-compression-docs/mintlify-docs/compressed-pdas/client-library.mdx

[grammar] ~1-~1: Hier könnte ein Fehler sein.
Context: --- title: Client Library description: Overview to Rust and Typescript client guides. Guides include step-by-step implementation and full code examples. ---

(QB_NEW_DE)

zk-compression-docs/mintlify-docs/compressed-tokens/guides.mdx

[locale-violation] ~14-~14: In American English, ‘afterward’ is the preferred variant. ‘Afterwards’ is more commonly used in British English and other dialects.
Context: ...ete SPL token accounts and reclaim rent afterwards | | [How to Merge Compressed Accounts](...

(AFTERWARDS_US)

zk-compression-docs/mintlify-docs/compressed-pdas/guides/how-to-burn-compressed-accounts.mdx

[grammar] ~189-~189: Ensure spelling is correct
Context: ...uction_data.account_meta* Include the curent account data. * Anchor: BuildMyComp...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

zk-compression-docs/mintlify-docs/compressed-tokens/overview.mdx

[locale-violation] ~139-~139: In American English, ‘afterward’ is the preferred variant. ‘Afterwards’ is more commonly used in British English and other dialects.
Context: ...ete SPL token accounts and reclaim rent afterwards | | [Merge Compressed Account...

(AFTERWARDS_US)

zk-compression-docs/mintlify-docs/compressed-tokens/advanced-guides/create-an-airdrop.mdx

[uncategorized] ~938-~938: The official name of this software platform is spelled with a capital “H”.
Context: ...mize claims. * Full Example on Github to [create an Airdrop with Claim](https...

(GITHUB)

zk-compression-docs/mintlify-docs/index.mdx

[style] ~11-~11: ‘at a fraction of’ might be wordy. Consider a shorter alternative.
Context: ...ve that lets you create tokens and PDAs at a fraction of the cost. Scale your application to mil...

(EN_WORDINESS_PREMIUM_AT_A_FRACTION_OF)

zk-compression-docs/mintlify-docs/compressed-tokens/guides/how-to-compress-and-decompress-spl-tokens.mdx

[locale-violation] ~496-~496: In American English, ‘afterward’ is the preferred variant. ‘Afterwards’ is more commonly used in British English and other dialects.
Context: ...nts in one transaction and reclaim rent afterwards.

(AFTERWARDS_US)

zk-compression-docs/mintlify-docs/compressed-tokens/advanced-guides/create-an-airdrop-with-claim.mdx

[grammar] ~1-~1: Hier könnte ein Fehler sein.
Context: --- title: Create an Airdrop with Claim url: "https://github.com/Lightprotocol/example-compressed-claim" ---

(QB_NEW_DE)

zk-compression-docs/mintlify-docs/compressed-pdas/guides/how-to-update-compressed-accounts.mdx

[grammar] ~193-~193: Ensure spelling is correct
Context: ...es the output state tree. * Include the curent account data. * Anchor: Pass `current...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

🪛 markdownlint-cli2 (0.18.1)
zk-compression-docs/mintlify-docs/README.md

19-19: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


25-25: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


42-42: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)

Comment on lines +1 to +4
---
title: Client Library
description: Overview to Rust and Typescript client guides. Guides include step-by-step implementation and full code examples.
---
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

File content appears incomplete—no body after front matter.

The front matter promises "Rust and Typescript client guides" with "step-by-step implementation and full code examples," but the file contains no body content at all. This creates a disconnect between the metadata and the actual page structure.

Verify whether:

  1. This file should contain introductory content or links to separate client library guides
  2. The body content was inadvertently omitted during the Mintlify migration
  3. This is intentionally a stub/placeholder to be filled in later

Typo in description: "Typescript" should be "TypeScript" (capital S) to match standard naming conventions and consistency with the broader tech community.

Apply this diff to fix the capitalization:

-description: Overview to Rust and Typescript client guides. Guides include step-by-step implementation and full code examples.
+description: Overview to Rust and TypeScript client guides. Guides include step-by-step implementation and full code examples.

🏁 Script executed:

#!/bin/bash
# Inspect the actual file content to verify state
echo "=== File Content ===" 
cat zk-compression-docs/mintlify-docs/compressed-pdas/client-library.mdx

echo -e "\n=== File Stats ===" 
wc -l zk-compression-docs/mintlify-docs/compressed-pdas/client-library.mdx

echo -e "\n=== Directory Listing ===" 
fd --type f . zk-compression-docs/mintlify-docs/compressed-pdas/ | head -20

echo -e "\n=== TypeScript vs Typescript Usage in Docs ===" 
rg -n "ypeScript" zk-compression-docs/mintlify-docs/ | head -15

Length of output: 529


🏁 Script executed:

#!/bin/bash
# Check repository structure and locate documentation
echo "=== Repository Root Contents ===" 
ls -la | head -20

echo -e "\n=== Search for zk-compression-docs Directory ===" 
find . -maxdepth 2 -name "*zk-compression*" -o -name "*docs*" -type d 2>/dev/null | head -10

echo -e "\n=== Find All .mdx Files ===" 
fd -e mdx | head -20

echo -e "\n=== Check for compressed-pdas Directory ===" 
fd "compressed-pdas" -type d

Length of output: 2702


🏁 Script executed:

#!/bin/bash
# Properly inspect the file content
echo "=== File Content ===" 
cat "zk-compression-docs/mintlify-docs/compressed-pdas/client-library.mdx"

echo -e "\n=== File Line Count ===" 
wc -l "zk-compression-docs/mintlify-docs/compressed-pdas/client-library.mdx"

echo -e "\n=== Check TypeScript Naming in Docs ===" 
rg -n "TypeScript|Typescript" zk-compression-docs/mintlify-docs --type mdx | head -20

echo -e "\n=== Inspect Similar Index Files ===" 
cat "zk-compression-docs/mintlify-docs/compressed-pdas/guides.mdx"

Length of output: 3269


🏁 Script executed:

#!/bin/bash
# Search for TypeScript naming across entire codebase
echo "=== TypeScript vs Typescript in Codebase ===" 
rg -n "TypeScript|Typescript" zk-compression-docs/ | head -30

echo -e "\n=== Check Rust references for pattern ===" 
rg -n "Rust and" zk-compression-docs/mintlify-docs --max-count 5

Length of output: 12263


File missing promised body content—description incompleteness.

The front matter describes "Rust and Typescript client guides" with "step-by-step implementation and full code examples," but the file contains only YAML metadata with zero body content. Compare this to guides.mdx in the same directory, which provides table-based overviews and structured navigation. Verify whether:

  1. This file should contain introductory content or link structure for client guides
  2. Body content was omitted during migration

Fix TypeScript capitalization: The description uses "Typescript" but the standard throughout the codebase is "TypeScript" (capital S). Lines 3 in client-development.mdx and multiple other files use the proper capitalization.

-description: Overview to Rust and Typescript client guides. Guides include step-by-step implementation and full code examples.
+description: Overview to Rust and TypeScript client guides. Guides include step-by-step implementation and full code examples.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
---
title: Client Library
description: Overview to Rust and Typescript client guides. Guides include step-by-step implementation and full code examples.
---
---
title: Client Library
description: Overview to Rust and TypeScript client guides. Guides include step-by-step implementation and full code examples.
---
🧰 Tools
🪛 LanguageTool

[grammar] ~1-~1: Hier könnte ein Fehler sein.
Context: --- title: Client Library description: Overview to Rust and Typescript client guides. Guides include step-by-step implementation and full code examples. ---

(QB_NEW_DE)

**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
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Minor formatting issue in Rust crates list.

Line 86 is missing a dash separator between the package name and description, inconsistent with the line above and below.

Apply this diff:

-* `light-sdk-pinocchio` Core SDK for compressed accounts in pinocchio programs
+* `light-sdk-pinocchio` - Core SDK for compressed accounts in pinocchio programs
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
* `light-sdk-pinocchio` Core SDK for compressed accounts in pinocchio programs
* `light-sdk-pinocchio` - Core SDK for compressed accounts in pinocchio programs
🤖 Prompt for AI Agents
In
zk-compression-docs/mintlify-docs/compressed-pdas/create-a-program-with-compressed-pdas.mdx
around line 86, the Rust crates list item "`light-sdk-pinocchio` Core SDK for
compressed accounts in pinocchio programs" is missing the dash separator between
the package name and its description; update that line to match surrounding list
items by inserting a " - " (dash and space) after the backticked crate name so
it reads like the other entries (e.g., "`light-sdk-pinocchio` - Core SDK for
compressed accounts in pinocchio programs").

* Compressed and regular Solana accounts share the same functionality and are fully composable.
* A compressed account has two identifiers: the account hash and its address (optional). In comparison, regular Solana accounts are identified by their address.
* The account hash is not persistent and changes with every write to the account.
* For Solana PDA like behavior your compressed account needs an address as persistent identifier.\
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

Hyphenate compound adjective: "PDA like" → "PDA-like".

Line 11 uses an open compound adjective that should be hyphenated:

- For Solana PDA like behavior your compressed account needs an address as persistent identifier.\
+ For Solana PDA-like behavior your compressed account needs an address as persistent identifier.\
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
* For Solana PDA like behavior your compressed account needs an address as persistent identifier.\
* For Solana PDA-like behavior your compressed account needs an address as persistent identifier.\
🧰 Tools
🪛 LanguageTool

[grammar] ~11-~11: Use a hyphen to join words.
Context: ...y write to the account. * For Solana PDA like behavior your compressed account ne...

(QB_NEW_EN_HYPHEN)

🤖 Prompt for AI Agents
In
zk-compression-docs/mintlify-docs/compressed-pdas/guides/how-to-create-compressed-accounts.mdx
around line 11, the phrase "PDA like" should be hyphenated as "PDA-like"; update
the text to read "* For Solana PDA-like behavior your compressed account needs
an address as persistent identifier." to use the correct compound adjective
form.

Comment on lines +15 to +51
## Basic Operations

* [**basic-operations/anchor**](https://github.com/Lightprotocol/program-examples/tree/main/basic-operations/anchor) - Anchor program with Rust and TypeScript tests
* [**basic-operations/native-rust**](https://github.com/Lightprotocol/program-examples/tree/main/basic-operations/native-rust) - Native Solana program with `light-sdk` and Rust tests.

<Info>
Basic Operations include:
- **create** - Initialize a new compressed account.
- **update** - Modify data in an existing compressed account.
- **close** - Clear account data and preserve its address.
- **reinit** - Reinitialize a closed account with the same address.
- **burn** - Permanently delete a compressed account.
</Info>

## Counter Program

Full compressed account lifecycle (create, increment, decrement, reset, close):

* [**counter/anchor**](https://github.com/Lightprotocol/program-examples/tree/main/counter/anchor) - Anchor program with Rust and TypeScript tests
* [**counter/native**](https://github.com/Lightprotocol/program-examples/tree/main/counter/native) - Native Solana program with `light-sdk` and Rust tests.
* [**counter/pinocchio**](https://github.com/Lightprotocol/program-examples/tree/main/counter/pinocchio) - Pinocchio program with `light-sdk-pinocchio` and Rust tests.

## Create-and-update Program

* [**create-and-update**](https://github.com/Lightprotocol/program-examples/tree/main/create-and-update) - Create a new compressed account and update an existing compressed account with a single validity proof in one instruction.

## Create-and-read Program

* [**read-only**](https://github.com/Lightprotocol/program-examples/tree/main/read-only) - Create a new compressed account and read it on-chain.

## Compare compressed vs uncompressed Program

* [**account-comparison**](https://github.com/Lightprotocol/program-examples/tree/main/account-comparison) - Compare compressed vs regular Solana accounts.

## ZK-ID Program

* [**zk-id**](https://github.com/Lightprotocol/program-examples/tree/main/zk-id) - A minimal Solana program that uses zero-knowledge proofs for identity verification with compressed accounts.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

Verify GitHub repository paths and program descriptions against source.

All program example links reference the Lightprotocol/program-examples repository. Verify that:

  • All directory paths exist (e.g., basic-operations/anchor, counter/pinocchio, etc.)
  • The descriptions accurately reflect each program's functionality
  • No programs have been removed or relocated in the referenced repository

Run this script to verify the repository structure:


🏁 Script executed:

#!/bin/bash
# Description: Verify program-examples repository structure matches documentation

# Check if the main repository exists and fetch its structure
gh repo view Lightprotocol/program-examples --json description

# List all top-level directories
gh api repos/Lightprotocol/program-examples/contents | jq -r '.[] | select(.type=="dir") | .name' | sort

# Verify key paths mentioned in the docs exist
PATHS=(
  "basic-operations/anchor"
  "basic-operations/native-rust"
  "counter/anchor"
  "counter/native"
  "counter/pinocchio"
  "create-and-update"
  "read-only"
  "account-comparison"
  "zk-id"
)

for path in "${PATHS[@]}"; do
  gh api repos/Lightprotocol/program-examples/contents/$path > /dev/null 2>&1 && echo "$path exists" || echo "$path NOT FOUND"
done

Length of output: 350


🏁 Script executed:

#!/bin/bash
# Check what subdirectories actually exist under basic-operations
gh api repos/Lightprotocol/program-examples/contents/basic-operations | jq -r '.[] | select(.type=="dir") | .name' | sort

Length of output: 13


Update "basic-operations/native-rust" to "basic-operations/native" on line 19.

The program-examples repository contains basic-operations/native (not native-rust). All other 8 program paths are correct and verified.

🤖 Prompt for AI Agents
In zk-compression-docs/mintlify-docs/compressed-pdas/program-examples.mdx around
lines 15 to 51, the link text and path at line 19 incorrectly reference
"basic-operations/native-rust"; change it to "basic-operations/native" so the
markdown points to the actual repository path (update both the displayed link
text and the URL segment to use "native" instead of "native-rust").

Comment on lines +51 to +354
<Tabs>
<Tab title="Implementation Steps">

<Check>
**What you'll build:** A test airdrop sending compressed tokens to 3 recipients on your local validator.
</Check>

<Steps>
<Step title="Prerequisites">

Make sure you have dependencies and developer environment set up!

<Info>
System Requirements

* **Node.js >= 20.18.0** (required by latest Solana packages)
* npm or yarn package manager
</Info>

<Accordion title="Prerequisites & Setup">

### Dependencies

```bash
npm install --save-dev typescript tsx @types/node && \
npm install --save \
@lightprotocol/stateless.js \
@lightprotocol/compressed-token \
@solana/web3.js \
@solana/spl-token
```

**Alternatives:**

```bash
yarn add --dev typescript tsx @types/node && \
yarn add \
@lightprotocol/stateless.js \
@lightprotocol/compressed-token \
@solana/web3.js \
@solana/spl-token
```

```bash
pnpm add --save-dev typescript tsx @types/node && \
pnpm add \
@lightprotocol/stateless.js \
@lightprotocol/compressed-token \
@solana/web3.js \
@solana/spl-token
```

#### Developer Environment

By default, this guide uses Localnet.

```bash
# Install the development CLI
npm install @lightprotocol/zk-compression-cli
```

```bash
# Start a local test validator
light test-validator
```

```typescript
// createRpc() defaults to local test validator endpoints
import {
Rpc,
createRpc,
} from "@lightprotocol/stateless.js";

const connection: Rpc = createRpc();

async function main() {
let slot = await connection.getSlot();
console.log(slot);

let health = await connection.getIndexerHealth(slot);
console.log(health);
// "Ok"
}

main();
```

**Alternative: Using Devnet**

Follow these steps to create an RPC Connection. Replace \<your\_api\_key> with your API key before running.

```typescript
import { createRpc } from "@lightprotocol/stateless.js";

// Helius exposes Solana and Photon RPC endpoints through a single URL
const RPC_ENDPOINT = "https://devnet.helius-rpc.com?api-key=<your_api_key>";
const connection = createRpc(RPC_ENDPOINT, RPC_ENDPOINT, RPC_ENDPOINT);

console.log("Connection created!");
console.log("RPC Endpoint:", RPC_ENDPOINT);
```

</Accordion>
</Step>

<Step title="Mint SPL tokens to your wallet">

Run this `mint-spl-tokens.ts` to mint SPL tokens to your wallet.


```typescript mint-spl-tokens.ts expandable
// Mint SPL Tokens for Airdrop - LocalNet
// 1. Load wallet and connect to local validator
// 2. Create SPL mint with token pool for compression via createMint()
// 3. Create ATA and mint SPL tokens to sender for airdrop preparation
// 4. Output mint address for use in simple-airdrop.ts

import { Keypair } from "@solana/web3.js";
import { createRpc } from "@lightprotocol/stateless.js";
import {
createMint,
getOrCreateAssociatedTokenAccount,
mintTo,
} from "@solana/spl-token";
import { createTokenPool } from "@lightprotocol/compressed-token";
import * as fs from 'fs';
import * as os from 'os';

// Step 1: Setup local connection and load wallet
const connection = createRpc(); // defaults to localhost:8899

// Load wallet from filesystem
const walletPath = `${os.homedir()}/.config/solana/id.json`;
const secretKey = JSON.parse(fs.readFileSync(walletPath, 'utf8'));
const payer = Keypair.fromSecretKey(Buffer.from(secretKey));

(async () => {
// Step 2: Create SPL mint with token pool for compression
const mint = await createMint(connection, payer, payer.publicKey, null, 9);
const poolTxId = await createTokenPool(connection, payer, mint);
console.log(`Mint address: ${mint.toBase58()}`);
console.log(`TokenPool created: ${poolTxId}`);

// Step 3: Create associated token account for sender
// The sender will send tokens from this account to the recipients as compressed tokens.
const ata = await getOrCreateAssociatedTokenAccount(
connection,
payer,
mint, // SPL mint with token pool for compression
payer.publicKey
);
console.log(`ATA address: ${ata.address.toBase58()}`);

// Step 4: Mint SPL tokens to ATA.
// The sender will send tokens from this account to the recipients as compressed tokens.
const mintToTxId = await mintTo(
connection,
payer,
mint, // SPL mint with token pool for compression
ata.address, // distributor ATA
payer.publicKey,
100_000_000_000 // amount: 100 tokens with 9 decimals
);
console.log(`\nSPL tokens minted and ready for distribution!`);
console.log(`Transaction: ${mintToTxId}`);

console.log(`\nCopy mint address to your airdrop script: ${mint.toBase58()}`);
})();
```
</Step>

<Step title="Execute the Airdrop">

Next, distribute the SPL tokens to all recipients.

<Warning>
Ensure you have the latest `@lightprotocol/stateless.js` and `@lightprotocol/compressed-token` versions `≥ 0.21.0`!
</Warning>

```typescript simple-airdrop.ts expandable highlight={29-30,45,74,100}
// Simple Airdrop - LocalNet
// 1. Load wallet and select compression infrastructure with getStateTreeInfos() and getTokenPoolInfos()
// 2. Build CompressedTokenProgram.compress() instruction for multiple recipients in one transaction
// 3. Execute transaction with compute budget and confirm compression operation with sendAndConfirmTx()
// 4. Verify distribution via getCompressedTokenAccountsByOwner

import { Keypair, PublicKey, ComputeBudgetProgram } from "@solana/web3.js";
import {
CompressedTokenProgram,
getTokenPoolInfos,
selectTokenPoolInfo,
} from "@lightprotocol/compressed-token";
import {
bn,
buildAndSignTx,
calculateComputeUnitPrice,
createRpc,
dedupeSigner,
Rpc,
selectStateTreeInfo,
sendAndConfirmTx,
} from "@lightprotocol/stateless.js";
import { getOrCreateAssociatedTokenAccount } from "@solana/spl-token";
import * as fs from 'fs';
import * as os from 'os';

// Step 1: Setup local connection and load wallet
const connection: Rpc = createRpc(); // defaults to localhost:8899
const mint = new PublicKey("MINTADDRESS"); // Replace with mint address from mint-spl-tokens.ts
// Local uses file wallet. Use constants from .env file in production
const walletPath = `${os.homedir()}/.config/solana/id.json`;
const secretKey = JSON.parse(fs.readFileSync(walletPath, 'utf8'));
const payer = Keypair.fromSecretKey(Buffer.from(secretKey));
const owner = payer;

(async () => {
// Step 2: Select state tree and token pool
const activeStateTrees = await connection.getStateTreeInfos();
const treeInfo = selectStateTreeInfo(activeStateTrees);

const infos = await getTokenPoolInfos(connection, mint);
const info = selectTokenPoolInfo(infos);

// Step 3: Get or create source token account for distribution
// The sender will send tokens from this account to the recipients as compressed tokens.
const sourceTokenAccount = await getOrCreateAssociatedTokenAccount(
connection,
payer,
mint, // SPL mint with token pool for compression
payer.publicKey
);

// Step 4: Define airdrop recipients and amounts
const airDropAddresses = [
Keypair.generate().publicKey,
Keypair.generate().publicKey,
Keypair.generate().publicKey,
];

const amounts = [
bn(20_000_000_000), // 20 tokens
bn(30_000_000_000), // 30 tokens
bn(40_000_000_000), // 40 tokens
];

const totalAmount = amounts.reduce((sum, amt) => sum + amt.toNumber(), 0);
console.log(`Distributing ${totalAmount / 1e9} compressed tokens to ${airDropAddresses.length} recipients`);

const initialSplBalance = await connection.getTokenAccountBalance(sourceTokenAccount.address);
console.log(`Sender initial balance: ${initialSplBalance.value.uiAmount} tokens`);

// Step 5: Build transaction with compute budget and compression instruction
const instructions = [];
// Set compute unit limits based on recipient count (estimated 120k CU per recipient)
instructions.push(
ComputeBudgetProgram.setComputeUnitLimit({ units: 120_000 * airDropAddresses.length }),
ComputeBudgetProgram.setComputeUnitPrice({
microLamports: calculateComputeUnitPrice(20_000, 120_000 * airDropAddresses.length), // dynamic priority fee
})
);

// Create compression instruction for multiple recipients in one transaction
const compressInstruction = await CompressedTokenProgram.compress({
payer: payer.publicKey,
owner: owner.publicKey,
source: sourceTokenAccount.address, // source ATA holding SPL tokens
toAddress: airDropAddresses, // recipient addresses for compressed tokens
amount: amounts, // different amounts for each recipient
mint, // SPL mint with token pool for compression
tokenPoolInfo: info,
outputStateTreeInfo: treeInfo, // destination state tree
});
instructions.push(compressInstruction);

// Step 6: Sign and send transaction
const additionalSigners = dedupeSigner(payer, [owner]);
const { blockhash } = await connection.getLatestBlockhash();
const tx = buildAndSignTx(instructions, payer, blockhash, additionalSigners);

// For production: Add address lookup table to reduce transaction size and fees
// const lookupTableAddress = new PublicKey("9NYFyEqPkyXUhkerbGHXUXkvb4qpzeEdHuGpgbgpH1NJ"); // mainnet // or "qAJZMgnQJ8G6vA3WRcjD9Jan1wtKkaCFWLWskxJrR5V" for devnet
// const lookupTableAccount = (await connection.getAddressLookupTable(lookupTableAddress)).value!;
// const tx = buildAndSignTx(instructions, payer, blockhash, additionalSigners, [lookupTableAccount]);
const txId = await sendAndConfirmTx(connection, tx);

console.log(`\nAirdrop completed!`);
console.log(`Transaction: ${txId}`);

// Step 7: Verify distribution via getCompressedTokenAccountsByOwner
for (let i = 0; i &#x3C; airDropAddresses.length; i++) {
const recipientAccounts = await connection.getCompressedTokenAccountsByOwner(airDropAddresses[i], { mint });
const balance = recipientAccounts.items.reduce((sum, account) => sum + Number(account.parsed.amount), 0);
console.log(`Recipient ${i + 1} (${airDropAddresses[i].toString()}): ${balance / 1e9} compressed tokens`);
}

const finalSplBalance = await connection.getTokenAccountBalance(sourceTokenAccount.address);
console.log(`\nSender balance after airdrop: ${finalSplBalance.value.uiAmount} SPL tokens`);

return txId;
})();
```
</Step>
</Steps>
</Tab>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

Verify version constraints in prerequisites.

Line 227 warns: "Ensure you have the latest @lightprotocol/stateless.js and @lightprotocol/compressed-token versions ≥ 0.21.0!" However, the package installation commands (lines 74–101) do not pin specific versions. This creates a mismatch: users following the "Implementation Steps" tab will install the latest unpinned versions, but the code may not be compatible if breaking changes occur.

Consider either:

  1. Pinning exact versions in install commands (e.g., @lightprotocol/stateless.js@0.21.0)
  2. Or removing the version constraint warning if latest is always compatible

For production guidance, pinned versions are safer for reproducibility.

🤖 Prompt for AI Agents
In
zk-compression-docs/mintlify-docs/compressed-tokens/advanced-guides/create-an-airdrop.mdx
(lines ~74-101 and the warning at ~227), the install commands do not pin package
versions while the warning demands versions ≥ 0.21.0; update the npm/yarn/pnpm
install lines to pin the lightprotocol packages (e.g.,
@lightprotocol/stateless.js@0.21.0 and @lightprotocol/compressed-token@0.21.0 or
use a caret ^0.21.0 for minor updates) so the documentation and the warning
match, and adjust the warning text to reflect pinned versions (or remove the
version constraint if you prefer unpinned installs for always-latest behavior).

Comment on lines +1044 to +1048
type: array
items:
$ref: '#/components/schemas/Hash'
required: true
responses:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

Add maxItems constraint to array parameter.

The /getMultipleCompressedAccountProofs endpoint parameter (lines 1044-1048) defines an unbounded array. Add maxItems to prevent excessive requests:

  params:
    type: array
    items:
      $ref: '#/components/schemas/Hash'
+   maxItems: 100

Committable suggestion skipped: line range outside the PR's diff.

🧰 Tools
🪛 Checkov (3.2.334)

[medium] 1044-1048: Ensure that arrays have a maximum number of items

(CKV_OPENAPI_21)

🤖 Prompt for AI Agents
In
zk-compression-docs/mintlify-docs/openapi/getCompressedTokenBalancesByOwner.yaml
around lines 1044 to 1048, the array parameter for
/getMultipleCompressedAccountProofs is unbounded; add a maxItems constraint
(e.g. maxItems: 100) alongside the existing type/items to limit the number of
elements accepted and prevent excessive requests, and update any related
validation/error messages or documentation to reflect this limit.

Comment on lines +1 to +10
openapi: 3.0.3
info:
title: photon-indexer
description: Solana indexer for general compression
license:
name: Apache-2.0
version: 0.50.0
servers:
- url: https://mainnet.helius-rpc.com?api-key=<api_key>
paths:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

Add OpenAPI security scheme definitions to document API authentication.

The specification lacks global securitySchemes and security field definitions. Even for documentation-only specs, defining security mechanisms accurately reflects the actual API's security posture and helps client generators create proper auth headers. The Helius RPC endpoint requires API key authentication.

Add security definitions after the servers section:

components:
  securitySchemes:
    api_key:
      type: apiKey
      in: header
      name: Authorization
      description: Helius API key passed as Authorization header or in URL query parameter

security:
  - api_key: []

Alternatively, if Helius expects the API key as a query parameter (which is common for RPC endpoints), adjust the in field to query and name to api-key.


🏁 Script executed:

#!/bin/bash
# View the full getCompressedTokenBalancesByOwnerV2.yaml file to verify review claims
cat "zk-compression-docs/mintlify-docs/openapi/getCompressedTokenBalancesByOwnerV2.yaml"

Length of output: 4122


🏁 Script executed:

#!/bin/bash
# Verify file exists and check line count
if [ -f "zk-compression-docs/mintlify-docs/openapi/getCompressedTokenBalancesByOwnerV2.yaml" ]; then
  wc -l "zk-compression-docs/mintlify-docs/openapi/getCompressedTokenBalancesByOwnerV2.yaml"
  echo "---"
  echo "Lines 135-145 (context around line 138-142):"
  sed -n '135,145p' "zk-compression-docs/mintlify-docs/openapi/getCompressedTokenBalancesByOwnerV2.yaml"
  echo "---"
  echo "Searching for 'securitySchemes' in file:"
  grep -n "securitySchemes" "zk-compression-docs/mintlify-docs/openapi/getCompressedTokenBalancesByOwnerV2.yaml" || echo "NOT FOUND"
  echo "---"
  echo "Searching for 'security:' at top level:"
  grep -n "^security:" "zk-compression-docs/mintlify-docs/openapi/getCompressedTokenBalancesByOwnerV2.yaml" || echo "NOT FOUND"
  echo "---"
  echo "Searching for 'TokenBalanceListV2':"
  grep -n "TokenBalanceListV2" "zk-compression-docs/mintlify-docs/openapi/getCompressedTokenBalancesByOwnerV2.yaml" || echo "NOT FOUND"
else
  echo "File not found at specified path"
fi

Length of output: 638


🏁 Script executed:

#!/bin/bash
# Search for arrays with 'items:' keyword and check maxItems presence
echo "Checking for array definitions and maxItems constraints:"
rg -n "maxItems" "zk-compression-docs/mintlify-docs/openapi/getCompressedTokenBalancesByOwnerV2.yaml" || echo "No maxItems found"
echo "---"
rg -nB2 -A2 "items:" "zk-compression-docs/mintlify-docs/openapi/getCompressedTokenBalancesByOwnerV2.yaml" | head -60

Length of output: 303


Add OpenAPI security scheme and response size constraints.

Two issues prevent this spec from accurately documenting the API:

  1. Missing security scheme definitions: The spec lacks components.securitySchemes and a top-level security field. Even though the server URL hints at API key authentication (?api-key=<api_key>), the spec doesn't formally document this mechanism. Security definitions help client generators create proper auth headers and clarify expected auth patterns.

  2. Missing maxItems constraint on response array (lines 137–140): The TokenBalanceListV2.items array lacks a maxItems constraint, which should bound the maximum number of token balances returned. This helps prevent unbounded response sizes.

Suggested changes:

After the servers section, add:

components:
  securitySchemes:
    api_key:
      type: apiKey
      in: query
      name: api-key
      description: Helius API key (can also be passed in Authorization header)

security:
  - api_key: []

In the TokenBalanceListV2.items schema (around line 138), add a maxItems constraint:

items:
  type: array
  maxItems: 1000  # Adjust based on Helius service limits
  items:
    $ref: '#/components/schemas/TokenBalance'
🧰 Tools
🪛 Checkov (3.2.334)

[high] 1-146: Ensure that the global security field has rules defined

(CKV_OPENAPI_4)


[high] 1-146: Ensure that security operations is not empty.

(CKV_OPENAPI_5)

🤖 Prompt for AI Agents
In
zk-compression-docs/mintlify-docs/openapi/getCompressedTokenBalancesByOwnerV2.yaml
around the servers section (lines 1-10) and the TokenBalanceListV2 schema
(around lines 137-140), the OpenAPI spec is missing a security scheme definition
and a top-level security declaration for the api-key query parameter, and the
TokenBalanceListV2.items array lacks a maxItems constraint; add a
components.securitySchemes entry defining an api_key apiKey in: query name:
api-key (with a short description) and add a top-level security section
referencing api_key, and in the TokenBalanceListV2.items schema add a maxItems
(e.g., 1000 or the appropriate service limit) to bound the response array size.

Comment on lines +1 to +10
openapi: 3.0.3
info:
title: photon-indexer
description: Solana indexer for general compression
license:
name: Apache-2.0
version: 0.50.0
servers:
- url: https://mainnet.helius-rpc.com?api-key=<api_key>
paths:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

Consider adding OpenAPI security configuration.

The specification lacks global security definitions, as flagged by static analysis (CKV_OPENAPI_4, CKV_OPENAPI_5). If your API uses authentication, add a securitySchemes section under components and define security requirements at the root level:

components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: query
      name: api-key

security:
  - ApiKeyAuth: []

This is optional if your API is public, but recommended for production specifications.

🧰 Tools
🪛 Checkov (3.2.334)

[high] 1-1517: Ensure that the global security field has rules defined

(CKV_OPENAPI_4)


[high] 1-1517: Ensure that security operations is not empty.

(CKV_OPENAPI_5)

🤖 Prompt for AI Agents
In
zk-compression-docs/mintlify-docs/openapi/getCompressionSignaturesForAccount.yaml
around lines 1 to 10, the OpenAPI spec is missing global security definitions;
if this API requires authentication add a components.securitySchemes section
defining an ApiKeyAuth (type: apiKey, in: query, name: api-key) and add a
root-level security requirement referencing ApiKeyAuth so the whole spec
declares the expected auth scheme; if the API is truly public you can skip,
otherwise include those entries and ensure the server URL query parameter name
matches the security scheme name.

Comment on lines +1149 to +1153
type: array
items:
$ref: '#/components/schemas/Hash'
required: true
responses:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

Add maxItems constraint to array parameter.

The /getMultipleCompressedAccountProofs endpoint defines an array parameter for hashes (lines 1149-1153) without a maximum item count. Add maxItems to prevent unbounded requests:

  params:
    type: array
    items:
      $ref: '#/components/schemas/Hash'
+   maxItems: 100
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
type: array
items:
$ref: '#/components/schemas/Hash'
required: true
responses:
type: array
items:
$ref: '#/components/schemas/Hash'
maxItems: 100
required: true
responses:
🧰 Tools
🪛 Checkov (3.2.334)

[medium] 1149-1153: Ensure that arrays have a maximum number of items

(CKV_OPENAPI_21)

🤖 Prompt for AI Agents
In
zk-compression-docs/mintlify-docs/openapi/getCompressionSignaturesForAccount.yaml
around lines 1149-1153, the array parameter for hashes is missing a maxItems
constraint; add a maxItems property (choose a sensible upper bound, e.g., 100 or
the API's agreed limit) directly under the array schema so the parameter reads
with type: array, items: $ref: '#/components/schemas/Hash', and maxItems:
<limit>, ensuring the OpenAPI spec rejects requests with too many hash entries.

Comment on lines +1 to +10
openapi: 3.0.3
info:
title: photon-indexer
description: Solana indexer for general compression
license:
name: Apache-2.0
version: 0.50.0
servers:
- url: https://mainnet.helius-rpc.com?api-key=<api_key>
paths:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

Add OpenAPI security scheme and global security field.

Missing global security scheme. Add under components:

components:
  securitySchemes:
    api_key:
      type: apiKey
      in: header
      name: Authorization

Then add at root level:

security:
  - api_key: []

I need to verify the actual state of this OpenAPI file to assess the review comment accurately.


🏁 Script executed:

#!/bin/bash
# Find and inspect the OpenAPI file
find . -name "getCompressionSignaturesForAddress.yaml" -type f 2>/dev/null | head -5

Length of output: 83


🏁 Script executed:

#!/bin/bash
# Check the first 50 lines and then lines around 1263-1267
if [ -f "zk-compression-docs/mintlify-docs/openapi/getCompressionSignaturesForAddress.yaml" ]; then
  echo "=== FIRST 50 LINES ==="
  head -50 "zk-compression-docs/mintlify-docs/openapi/getCompressionSignaturesForAddress.yaml"
  echo -e "\n=== CHECKING FOR SECURITY DEFINITIONS ==="
  grep -n "securitySchemes\|^security:" "zk-compression-docs/mintlify-docs/openapi/getCompressionSignaturesForAddress.yaml" | head -10
  echo -e "\n=== LINES 1260-1270 ==="
  sed -n '1260,1270p' "zk-compression-docs/mintlify-docs/openapi/getCompressionSignaturesForAddress.yaml"
fi

Length of output: 1913


🏁 Script executed:

#!/bin/bash
# Check total line count and structure
if [ -f "zk-compression-docs/mintlify-docs/openapi/getCompressionSignaturesForAddress.yaml" ]; then
  echo "Total lines: $(wc -l < "zk-compression-docs/mintlify-docs/openapi/getCompressionSignaturesForAddress.yaml")"
  echo -e "\n=== ROOT LEVEL KEYS (components, security, paths, etc.) ==="
  grep -n "^[a-z]" "zk-compression-docs/mintlify-docs/openapi/getCompressionSignaturesForAddress.yaml" | head -20
fi

Length of output: 141


🏁 Script executed:

#!/bin/bash
# Count how many OpenAPI files exist and check them for security schemes
echo "=== OpenAPI files in repository ==="
find . -name "*.yaml" -path "*/openapi/*" -type f 2>/dev/null | sort
echo -e "\n=== Checking for security in each file ==="
for file in $(find . -name "*.yaml" -path "*/openapi/*" -type f 2>/dev/null | sort); do
  has_security=$(grep -c "^security:" "$file" 2>/dev/null || echo "0")
  has_scheme=$(grep -c "securitySchemes:" "$file" 2>/dev/null || echo "0")
  echo "$file | security: $has_security | securitySchemes: $has_scheme"
done

Length of output: 5306


</parameter>
</invoke>

---

🌐 Web query:

```web
OpenAPI 3.0.3 apiKey security scheme syntax

💡 Result:

Short answer — Use a Security Scheme object under components.securitySchemes with type: apiKey and the required name and in fields.

YAML example (OpenAPI 3.0.3):
components:
securitySchemes:
ApiKeyAuth:
type: apiKey
description: API key needed to access endpoints
name: X-API-Key
in: header

Then apply it (globally or per operation):
security:

  • ApiKeyAuth: []

JSON equivalent:
"components": {
"securitySchemes": {
"ApiKeyAuth": {
"type": "apiKey",
"description": "API key needed to access endpoints",
"name": "X-API-Key",
"in": "header"
}
}
},
"security": [ { "ApiKeyAuth": [] } ]

Notes: for type "apiKey" the name (string) is the header/query/cookie parameter name and in must be one of "header", "query", or "cookie". [1][2]

Sources:
[1] OpenAPI Specification v3.0.3 — Security Scheme Object.
[2] OpenAPI documentation — API Keys (examples).


🌐 Web query:

Checkov CKV_OPENAPI_4 CKV_OPENAPI_5 rules requirements

💡 Result:

  • CKV_OPENAPI_4 — "Ensure that the global security field has rules defined": the OpenAPI document must include a top-level "security" field and it must not be empty (i.e., global security requirements are present). [1][2]

  • CKV_OPENAPI_5 — "Ensure that security operations is not empty.": each operation-level security entry must be present/non-empty where security is declared for operations (operation security arrays must not be empty). [1][2]

Sources: Checkov OpenAPI policy index and OpenAPI scanning docs. [1] https://www.checkov.io/5.Policy%20Index/openapi.html [2] https://www.checkov.io/7.Scan%20Examples/OpenAPI.html


Add OpenAPI security scheme to comply with CKV_OPENAPI_4 and CKV_OPENAPI_5.

The file lacks a global security scheme definition. The servers URL shows api-key=<api_key> placeholder, indicating API key authentication is required, but this is not formally declared in the OpenAPI spec.

Add under components (around line 1579):

components:
  securitySchemes:
    api_key:
      type: apiKey
      in: header
      name: X-API-Key
      description: API key for Helius RPC access

Then add at the root level (after line 9, before paths):

security:
  - api_key: []

Note: This is a systemic issue across all 27 OpenAPI files in this directory—each lacks security definitions. Apply this fix consistently across the entire collection.

🧰 Tools
🪛 Checkov (3.2.334)

[high] 1-1639: Ensure that the global security field has rules defined

(CKV_OPENAPI_4)


[high] 1-1639: Ensure that security operations is not empty.

(CKV_OPENAPI_5)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants