Skip to content

Reorganize docs navigation and home page#23

Open
tilo-14 wants to merge 17 commits intomainfrom
docs-main-reorder
Open

Reorganize docs navigation and home page#23
tilo-14 wants to merge 17 commits intomainfrom
docs-main-reorder

Conversation

@tilo-14
Copy link
Collaborator

@tilo-14 tilo-14 commented Feb 4, 2026

Summary

  • Restructured home page with clearer feature sections (Light Token, Compressed PDAs, AI Tools, Resources)
  • Reorganized navigation: renamed References anchor to "Developer Tools & Learn"
  • Moved Light Token core concepts to Learn section in References
  • Moved node operators to Developer Tools group

Changes

  • home.mdx: Reorganized landing page layout
  • docs.json: Navigation structure updates

Summary by CodeRabbit

  • Documentation

    • Added a comprehensive AI Tools Guide (agent skills, MCP/DeepWiki guidance), expanded Light Token and Light‑PDA docs, new SDK reference and examples, and an updated security/audits table; reorganized site navigation to an anchors-based structure and streamlined many advanced compressed-tokens and skills guides.
  • New Features

    • Homepage refreshed with partner logos, updated hero layout, new examples/SDK blocks, and several UI/content improvements for easier discovery.

@coderabbitai
Copy link

coderabbitai bot commented Feb 4, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

This PR large‑scale restructures documentation: adds an AI Tools guide (MCP / DeepWiki / agent skills), reorganizes site navigation and Home UI (partner logos), introduces Light‑PDA docs and many SDK/version snippets, adds Rust/Anchor examples, updates many tables/snippets, and deletes numerous compressed‑tokens advanced guides and ai‑tools skill pages.

Changes

Cohort / File(s) Summary
AI Tools & Guide
ai-tools/guide.mdx, ai-tools/skills/*, .mintlifyignore
Adds comprehensive AI Tools guide (MCP, DeepWiki, agent skills, runnable snippets); deletes many skill docs and reference files under ai-tools/skills/; adds .mintlifyignore entries to ignore ai-tools assets.
Site config & Navigation
docs.json, .gitignore, support.mdx
Theme changed to Maple; navigation migrated from tabs→anchors; redirects updated; new ignored files added to .gitignore; support card link updated to new AI guide path.
Home & UI components
home.mdx, snippets/jsx/partner-logos.jsx, snippets/jsx/liquid-glass-pill.jsx, style.css
Home refactor to card-grid, introduces PartnerLogos component, LiquidGlassPill now accepts children, and adds partner‑logo CSS (dark/light variants).
Light Token / PDA docs
light-token/*, light-token/light-pda.mdx, light-token/pda-overview.mdx
Adds Light‑PDA and PDA overview docs with stepwise integration guidance and examples; updates light‑token pages and toolkits metadata.
Compressed PDAs & Tokens
compressed-pdas/..., compressed-tokens/...
Reworks compressed‑pdas overview and program examples (tabbed UI, reclassified examples); retitles pages; removes many compressed‑tokens advanced guides and guide pages.
API & SDK docs
api-reference/sdk.mdx, api-reference/json-rpc-methods/...
Adds SDK reference MDX; rewrites JSON‑RPC overview to emphasize Light SDK interface methods; deletes legacy methods page.
Snippets & Examples
snippets/code-snippets/..., snippets/overview-tables/*, snippets/versions/*.mdx
Adds Rust/Anchor examples (create-and-transfer, counter), new overview tables and SDK snippets, and pinned Rust dependency snippets (0.19.0 / 0.4.0).
Learn / Core Concepts & References
learn/*, references/terminology.mdx, references/security.mdx
Adds Learn overview, tweaks compressed-account-model wording, updates merkle-tree claims, expands terminology/index and audits table.
Resources & Anchor constraints
resources/anchor-constraints.mdx, resources/*
Adds Anchor constraints doc for #[light_account] variants; updates error‑cheatsheet links and address card target.
Overview / Tables & Setup snippets
snippets/overview-tables/*.mdx, snippets/setup/*
Adds/edits multiple overview tables (HTML tables, card groups), updates guide links to external GitHub for many entries, and adjusts setup snippet hyperlinks.
Deleted documentation pages
api-reference/json-rpc-methods/methods.mdx, many compressed-tokens/guides/*, many ai-tools/skills/*
Removes numerous documentation pages across compressed‑tokens advanced guides and many ai‑tools skill/reference files (large‑scale deletions).
Minor edits & cleanup
client-library/client-guide.mdx, zk/overview.mdx, welcome.mdx
Small content removals/wording tweaks: one-line removal in client guide, heading tweak in zk overview, and large content removal/cleanup in welcome.mdx.

Sequence Diagram(s)

mermaid
sequenceDiagram
participant User as User
participant Agent as Agent
participant MCP as MCP (Model Context Protocol)
participant DeepWiki as DeepWiki / Repo
participant UI as UI / Frame
Note over Agent,MCP: AI Tools Guide flow (query + tooling)
User->>Agent: Ask technical question / intent
Agent->>MCP: Submit MCP plan (read_wiki_structure / read_wiki_contents)
MCP->>DeepWiki: Fetch repo/docs context
DeepWiki-->>MCP: Return structured content (files, snippets)
MCP-->>Agent: Provide evidence, sources, YAML plan
Agent->>UI: Render results / frames (iframe, badges, examples)
Agent-->>User: Reply with answer, code snippets, and source refs

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~75 minutes

Possibly related PRs

Poem

🐰 I hopped through docs and nudged a guide anew,

Tucked MCP and DeepWiki where the queries grew.
Logos gleam in hero, PDAs told clear and bright,
Old pages waved farewell beneath the moonlit byte,
Hop, patch, and build — the docs now dance in light.

🚥 Pre-merge checks | ✅ 3 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Merge Conflict Detection ⚠️ Warning ⚠️ Unable to check for merge conflicts: Failed to fetch base branch: From https://github.com/Lightprotocol/docs-v2
! [rejected] main -> main (non-fast-forward)
+ d13ee7a...07ed0e3 main -> origin/main (forced update)
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'Reorganize docs navigation and home page' directly and clearly summarizes the main changes in the pull request.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch docs-main-reorder
⚔️ Resolve merge conflicts (beta)
  • Auto-commit resolved conflicts to branch docs-main-reorder
  • Create stacked PR with resolved conflicts
  • Post resolved changes as copyable diffs in a comment

No actionable comments were generated in the recent review. 🎉

🧹 Recent nitpick comments
ai-tools/guide.mdx (3)

8-11: Mixed bullet markers: * vs -.

Line 10 uses * while lines 8–9 use -. Pick one for consistency.

📝 Suggested fix
 - **Docs AI Search** - Search documentation with AI in the search bar.
 - **Markdown Export** - Append `.md` to any page URL for raw markdown.
-* **View [`/llms.txt`](https://zkcompression.com/llms.txt)** for an index of the docs - It lists key pages with descriptions
+- **View [`/llms.txt`](https://zkcompression.com/llms.txt)** for an index of the docs - It lists key pages with descriptions
 so agents can navigate to answers quickly.

185-199: Code blocks use bash language hint for non-shell syntax.

These blocks contain MCP function-call pseudo-code (e.g., mcp__deepwiki__read_wiki_structure(...)), not actual bash commands. Consider using a plain code fence (no language hint) or text to avoid misleading syntax highlighting.


214-225: frameborder is deprecated in HTML5; consider adding fallback content.

The frameborder="0" attribute is deprecated — use style={{ border: 'none' }} instead. Also, consider adding fallback text inside the <iframe> for users/browsers that can't render it.

📝 Suggested fix
   <iframe
     width="100%"
     height="420"
     src="https://drive.google.com/file/d/1irbZC4NpSE6F1XctIel0yXyVmwvRsjaU/preview"
     title="DeepWiki Video"
-    frameborder="0"
+    style={{ border: 'none' }}
     allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
     referrerpolicy="strict-origin-when-cross-origin"
     allowfullscreen
-  ></iframe>
+  >
+    Your browser does not support iframes. <a href="https://drive.google.com/file/d/1irbZC4NpSE6F1XctIel0yXyVmwvRsjaU/preview">Watch the video</a>.
+  </iframe>
light-token/welcome.mdx (1)

99-101: Consider noting the cross-section navigation for the Privy card.

This card links to /compressed-tokens/for-privy, which will navigate users out of the Light Token section into the Compressed Tokens docs. A small annotation in the card description (e.g., mentioning it uses Compressed Tokens) would set expectations and reduce confusion, especially since all other cards in this page link within the Light Token or PDA sections.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

Copy link

@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: 10

Caution

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

⚠️ Outside diff range comments (2)
home.mdx (1)

163-168: ⚠️ Potential issue | 🟡 Minor

Align the AI Tools Guide link with the canonical route.
If /ai-tools/guide is now the canonical path, point this card directly at it to avoid an extra redirect and reduce risk of a stale route.

Suggested change
-  href="/learn/ai-tools-guide"
+  href="/ai-tools/guide"
learn/core-concepts.mdx (1)

10-83: ⚠️ Potential issue | 🟡 Minor

Tighten wording and heading consistency.
Fix minor grammar, hyphenate “High-Level,” add the missing space in the tooltip, and keep Next Steps as an H2 to preserve a single H1 per page.

Suggested change
-Storage cost of Solana accounts are reduced by combining generalized state compression and <Tooltip tip="A cryptographic proof to verify the validity of a statement without revealing the underlying data. ZK Compression uses a Groth16 SNARK zk proof with a constant 128 bytes size">zero-knowledge proofs</Tooltip>.
+Storage costs of Solana accounts are reduced by combining generalized state compression and <Tooltip tip="A cryptographic proof to verify the validity of a statement without revealing the underlying data. ZK Compression uses a Groth16 SNARK zk proof with a constant 128 bytes size">zero-knowledge proofs</Tooltip>.

-## High Level System Overview
+## High-Level System Overview

-<Tooltip tip="RPC nodes index the Light Protocol programs. This allows clients to read and build transactions to interact with compressed state.The canonical ZK Compression indexer is named Photon, built by Helius Labs. See the Github repo for more info." cta="repo" href="https://github.com/helius-labs/photon">Photon RPC nodes</Tooltip> 
+<Tooltip tip="RPC nodes index the Light Protocol programs. This allows clients to read and build transactions to interact with compressed state. The canonical ZK Compression indexer is named Photon, built by Helius Labs. See the Github repo for more info." cta="repo" href="https://github.com/helius-labs/photon">Photon RPC nodes</Tooltip> 

-# Next Steps
+## Next Steps
🤖 Fix all issues with AI agents
In `@ai-tools/guide.mdx`:
- Around line 182-184: Replace the incorrect project name "DFlow" in the
skill.md description by updating the sentence that currently reads "what they
can do with DFlow" to reference the correct project "ZK Compression/Light
Protocol" (the text in the `skill.md` description string), ensuring the sentence
now reads something like "what they can do with ZK Compression/Light Protocol"
so the documentation matches the repository's project.

In `@compressed-pdas/overview.mdx`:
- Around line 17-21: The sentence describing Compressed PDAs has a grammar error
("an addresses."); update the sentence in the Compressed PDAs definition to read
correctly (e.g., "Compressed PDAs are compressed accounts with an address." or
"Compressed PDAs are compressed accounts with addresses.") and ensure
surrounding sentences referencing the Light System program and creation/update
behavior remain unchanged (search for the phrase "Compressed PDAs are compressed
accounts with an" or the symbol "Light System program" to locate the line to
edit).
- Around line 22-83: All images inside the Tabs/Tab/Frame blocks currently have
empty alt text; update each <img> (the images wrapped by Frame in Create,
Update, Close, Reinitialize, Burn tabs) to include concise, descriptive alt
attributes (e.g., "Create compressed PDA screenshot - dark", "Create compressed
PDA screenshot - light" or similar) and ensure the dark and light variants for
each Tab share the same meaningful label; apply this change to every Frame image
in the file so screen readers receive accessible descriptions.

In `@docs.json`:
- Around line 245-253: In docs.json replace the navigation entry string
"learn/ai-tools-guide" with the canonical "ai-tools/guide" (the anchor "AI
Tools" group/pages block and any identical occurrences), then remove the legacy
redirect rule that points "/learn/ai-tools-guide" → "/ai-tools/guide" once all
references are updated; finally update all internal markdown links in
support.mdx, error-cheatsheet.mdx, and home.mdx to use "/ai-tools/guide" instead
of "/learn/ai-tools-guide".

In `@home` copy.mdx:
- Around line 96-102: Update the copy inside the Card with title "ZK" (the Card
element nested in CardGroup cols={3}) to standardize terminology: change "zk" to
"ZK", "groth-16" to "Groth16", and "merklelized" to "merkleized" (or
"Merkleized" if you prefer sentence case); e.g. replace the body with something
like "How to build a ZK program on Solana with ZK nullifiers, Groth16 proofs,
and merkleized state."

In `@learn/compressed-pda-concepts.mdx`:
- Around line 2-72: Update the frontmatter "description" text to correct grammar
(e.g., "Overview of how compressed PDAs work with ZK Compression"), ensure there
is a space before any Tooltip tags (fix any occurrences like "...on<Tooltip" to
"...on <Tooltip>"), and change the top-level "# Next Steps" heading to "## Next
Steps" to preserve a single H1; also lightly copyedit the introductory
paragraph/heading wording for clarity.

In `@references/overview.mdx`:
- Around line 4-53: Update the intro metadata and headings to use consistent
title-case and hyphenation: change the description string to "Developer tools
(Error Cheatsheet, Addresses and URLs, Migration Guide) and Learn core
concepts.", capitalize "Learn" and "Light Token" in the paragraph starting with
"What is Light Token?", ensure "Light Token is" (or "The Light Token is") uses
title-case, and normalize "ZK Compression" capitalization in the "What is ZK
Compression?" header and body; also standardize hyphenation to "zero-knowledge
proofs" inside the Tooltip text. Locate and update the description field, the
"What is Light Token?" paragraph, the "What is ZK Compression?" paragraph, and
the Tooltip content to apply these changes.

In `@references/security.mdx`:
- Around line 13-25: Update the branding and date formats in the audits intro
and table: change the phrase "Light protocol" to "Light Protocol" in the
sentence starting with "The Light protocol on-chain programs..." and replace all
abbreviated year formats like "December '25", "June '25", etc. inside the table
with full years (e.g., "December 2025", "June 2025") to standardize
capitalization and use full years across the entries referenced in the table
rows for Certora, OtterSec, Accretion, HashCloak, Zellic, and Neodyme.

In `@references/terminology.mdx`:
- Around line 45-46: Merge the two fragments "Compressed accounts with an
address stored in an address Merkle tree." and "Full Solana PDA functionality
and composability without rent-exemption." into a single smooth sentence (start
with the "Compressed accounts..." phrase) and hyphenate “rent‑exempt” (use the
form rent-exempt) so the result reads as one complete sentence describing that
compressed accounts with an address Merkle tree provide full Solana PDA
functionality and composability without rent-exempt status.

In `@snippets/overview-tables/program-examples-table.mdx`:
- Around line 10-15: Update the two broken links in the table: for the
simple-claim entry (label "simple-claim") replace the current non-existent
repository URL with the correct repository/location for the airdrop
implementation (locate the actual repo under Lightprotocol or the correct
org/name and update the link so it no longer 404s); for the ZK-Nullifier entry
(label "ZK-Nullifier") change the path from /zk-nullifier to the correct nested
path /zk/nullifier under the program-examples repo (i.e., point to
Lightprotocol/program-examples/tree/main/zk/nullifier); after updating both
links, verify each opens without a 404.
🧹 Nitpick comments (1)
snippets/overview-tables/compressed-pdas-guides-table.mdx (1)

6-10: Consider adding visually-hidden headers for accessibility.

The empty <th> cells may cause screen readers to announce the table without context. Consider adding visually-hidden text or aria-label attributes to improve accessibility.

♿ Optional accessibility improvement
   <thead>
     <tr>
-      <th></th>
-      <th></th>
+      <th><span className="sr-only">Action</span></th>
+      <th><span className="sr-only">Description</span></th>
     </tr>
   </thead>

This assumes your docs framework has a .sr-only class for screen-reader-only text.

Comment on lines +22 to +83
<Tabs>
<Tab title="Create">
<div className="hidden dark:block">
<Frame>
![](/images/Untitled.png)
</Frame>
</div>
<div className="block dark:hidden">
<Frame>
![](/images/image-22.png)
</Frame>
</div>
</Tab>
<Tab title="Update">
<div className="hidden dark:block">
<Frame>
![](/images/Untitled-1.png)
</Frame>
</div>
<div className="block dark:hidden">
<Frame>
![](/images/image-20.png)
</Frame>
</div>
</Tab>
<Tab title="Close">
<div className="hidden dark:block">
<Frame>
![](/images/Untitled-4.png)
</Frame>
</div>
<div className="block dark:hidden">
<Frame>
![](/images/image-23.png)
</Frame>
</div>
</Tab>
<Tab title="Reinitialize">
<div className="hidden dark:block">
<Frame>
![](/images/program-reinit-1.png)
</Frame>
</div>
<div className="block dark:hidden">
<Frame>
![](/images/program-reinit.png)
</Frame>
</div>
</Tab>
<Tab title="Burn">
<div className="hidden dark:block">
<Frame>
![](/images/program-burn-1.png)
</Frame>
</div>
<div className="block dark:hidden">
<Frame>
![](/images/program-burn.png)
</Frame>
</div>
</Tab>
</Tabs>
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Add descriptive alt text for tab images (accessibility).
The current images use empty alt text; adding short labels improves screen-reader output.

📝 Example (apply to all images)
-      ![](/images/Untitled.png)
+      ![Create flow diagram](/images/Untitled.png)
🤖 Prompt for AI Agents
In `@compressed-pdas/overview.mdx` around lines 22 - 83, All images inside the
Tabs/Tab/Frame blocks currently have empty alt text; update each <img> (the
images wrapped by Frame in Create, Update, Close, Reinitialize, Burn tabs) to
include concise, descriptive alt attributes (e.g., "Create compressed PDA
screenshot - dark", "Create compressed PDA screenshot - light" or similar) and
ensure the dark and light variants for each Tab share the same meaningful label;
apply this change to every Frame image in the file so screen readers receive
accessible descriptions.

Comment on lines 245 to 253
"anchor": "AI Tools",
"icon": "robot",
"groups": [
{
"group": "References",
"group": "AI Tools",
"pages": [
"references/whitepaper",
"references/node-operators",
"references/terminology",
"references/migration-v1-to-v2",
"support",
"references/security"
"learn/ai-tools-guide"
]
},
}
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

# Find AI tools guide files and check path references
fd -a 'ai-tools.*\.mdx?$' --case-sensitive
fd -a 'redirects.*\.json$' --case-sensitive
rg -n 'ai-tools-guide|ai-tools/guide' --glob '*.mdx' --glob '*.json' -A 1 -B 1

Repository: Lightprotocol/docs-v2

Length of output: 1546


🏁 Script executed:

# Search for guide files in ai-tools and learn directories
fd 'guide\.mdx?$' --type f
fd 'ai-tools' --type d
find . -path '*ai-tools*' -name '*.mdx' -type f 2>/dev/null | head -20
find . -path '*learn*' -name '*ai-tools*' -type f 2>/dev/null | head -20

Repository: Lightprotocol/docs-v2

Length of output: 146


Update navigation to canonical AI Tools guide path.

The actual guide file is at ai-tools/guide.mdx, but the navigation at lines 250–251 points to the old path learn/ai-tools-guide, which no longer exists as a file. While a redirect rule exists (lines 361–362), updating the navigation to use the canonical path avoids unnecessary redirects. Also apply this change to lines 360–363 (the redirect rule itself can be removed once all references are updated).

Additionally, update internal links in support.mdx, error-cheatsheet.mdx, and home.mdx that reference /learn/ai-tools-guide to point to /ai-tools/guide instead.

Suggested changes
-              "learn/ai-tools-guide"
+              "ai-tools/guide"
     {
-      "source": "/learn/ai-tools-guide",
-      "destination": "/ai-tools/guide"
+      "source": "/learn/ai-tools-guide", // Remove this redirect after updating all references
+      "destination": "/ai-tools/guide"
     },
📝 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
"anchor": "AI Tools",
"icon": "robot",
"groups": [
{
"group": "References",
"group": "AI Tools",
"pages": [
"references/whitepaper",
"references/node-operators",
"references/terminology",
"references/migration-v1-to-v2",
"support",
"references/security"
"learn/ai-tools-guide"
]
},
}
"anchor": "AI Tools",
"icon": "robot",
"groups": [
{
"group": "AI Tools",
"pages": [
"ai-tools/guide"
]
}
🤖 Prompt for AI Agents
In `@docs.json` around lines 245 - 253, In docs.json replace the navigation entry
string "learn/ai-tools-guide" with the canonical "ai-tools/guide" (the anchor
"AI Tools" group/pages block and any identical occurrences), then remove the
legacy redirect rule that points "/learn/ai-tools-guide" → "/ai-tools/guide"
once all references are updated; finally update all internal markdown links in
support.mdx, error-cheatsheet.mdx, and home.mdx to use "/ai-tools/guide" instead
of "/learn/ai-tools-guide".

home copy.mdx Outdated
Comment on lines 96 to 102
<CardGroup cols={3}>
<Card title="Nullifiers" icon="code-commit" href="/compressed-pdas/guides/how-to-create-nullifier-pdas">
System for payments, AI agents and more to prevent your onchain instruction from being executed more than once.
</Card>
<Card title="ZK" icon="shield-check" href="/zk/overview">
How to build a ZK program on Solana with zk nullifiers, groth-16 proofs and merklelized state.
</Card>
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Fix terminology/typos in the ZK toolkit card.
“zk,” “groth-16,” and “merklelized” should be standardized for readability.

📝 Suggested edit
-    How to build a ZK program on Solana with zk nullifiers, groth-16 proofs and merklelized state.
+    How to build a ZK program on Solana with ZK nullifiers, Groth16 proofs, and merkleized state.
📝 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
<CardGroup cols={3}>
<Card title="Nullifiers" icon="code-commit" href="/compressed-pdas/guides/how-to-create-nullifier-pdas">
System for payments, AI agents and more to prevent your onchain instruction from being executed more than once.
</Card>
<Card title="ZK" icon="shield-check" href="/zk/overview">
How to build a ZK program on Solana with zk nullifiers, groth-16 proofs and merklelized state.
</Card>
<CardGroup cols={3}>
<Card title="Nullifiers" icon="code-commit" href="/compressed-pdas/guides/how-to-create-nullifier-pdas">
System for payments, AI agents and more to prevent your onchain instruction from being executed more than once.
</Card>
<Card title="ZK" icon="shield-check" href="/zk/overview">
How to build a ZK program on Solana with ZK nullifiers, Groth16 proofs, and merkleized state.
</Card>
🤖 Prompt for AI Agents
In `@home` copy.mdx around lines 96 - 102, Update the copy inside the Card with
title "ZK" (the Card element nested in CardGroup cols={3}) to standardize
terminology: change "zk" to "ZK", "groth-16" to "Groth16", and "merklelized" to
"merkleized" (or "Merkleized" if you prefer sentence case); e.g. replace the
body with something like "How to build a ZK program on Solana with ZK
nullifiers, Groth16 proofs, and merkleized state."

Comment on lines 2 to 72
title: "High-level System Overview"
sidebarTitle: "Overview"
description: "Overview to how compressed PDA work with ZK Compression."
keywords: ["zk compression concepts", "compressed accounts explained", "zk on solana"]
---

<Steps>
<Step>

### Storage of Compressed State

Compressed accounts store state as call data on <Tooltip tip="The ledger is an immutable historical record of all Solana transactions signed by clients since the genesis block.">Solana's ledger</Tooltip>.
This maintains Solana's security and removes the need for rent-exemption per account.
</Step>
<Step>

### Accessing Compressed State

Transactions specify state they access (read/write) and include it in the transaction payload.
</Step>
<Step>

### State Validation

Solana Programs <Tooltip tip="A Cross Program Invocation (CPI) refers to when one program invokes the instructions of another program. This allows for the composability of Solana programs. Learn more about CPIs" cta="here" href="https://solana.com/docs/core/cpi">invoke</Tooltip> the <Tooltip tip="The system program enforces the compressed account layout with ownership and sum checks and verifies the validity of your input state. It is also invoked to create/write to compressed accounts and PDAs. See the program address here.">Light System Program</Tooltip> to update compressed state

1. **The protocol validates the state** (validity of existing state, sum checks, ownership checks)
2. **The protocol enforces a schema:** Classic Accounts → Compressed Accounts.\
Compressed accounts have a layout similar to classic accounts.
</Step>
<Step>

### State Updates

The new state is recorded as a log on the Solana ledger with each transaction.
</Step>
<Step>

### RPC Nodes

<Tooltip tip="RPC nodes index the Light Protocol programs. This allows clients to read and build transactions to interact with compressed state.The canonical ZK Compression indexer is named Photon, built by Helius Labs. See the Github repo for more info." cta="repo" href="https://github.com/helius-labs/photon">Photon RPC nodes</Tooltip>
index the state changes and make the compressed account state available to clients via the ZK Compression RPC API.

</Step>
<Step>

### Forester Nodes

Keeper nodes that interact with the <Tooltip tip="Updates state and address trees. It is used by the Light System program.">Account Compression Program</Tooltip> to empty queues and rollover state trees.

<Check>
Clients and custom programs do not interact with Forester nodes or the Account Compression Program. This is all done under the hood.
</Check>
</Step>
</Steps>

# Next Steps

In the following sections, we'll dive into the core concepts that make ZK Compression possible:

- **Compressed Account Model**: Understand how compressed accounts differ from regular Solana accounts (not much!) and how they enhance efficiency.
- **State Trees**: Learn about the Merkle tree structure used to store compressed accounts and how it minimizes on-chain storage.
- **Validity Proofs**: Learn how zero-knowledge proofs verify data efficiently while keeping proof sizes small.
- **Lifecycle of a Transaction**: Follow the journey of a transaction from creation to execution with ZK Compression.
- **Considerations**: Discover the trade-offs and scenarios where ZK Compression may or may not be the best solution.

<Card
title=" Learn more about the compressed account model."
icon="chevron-right"
color="#0066ff"
href="/learn/core-concepts/compressed-account-model"
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Polish the intro grammar and heading levels.
Fix the description grammar, add the missing tooltip space, and keep Next Steps as an H2 to preserve a single H1 per page.

Suggested change
-description: "Overview to how compressed PDA work with ZK Compression."
+description: "Overview of how compressed PDAs work with ZK Compression."

-<Tooltip tip="RPC nodes index the Light Protocol programs. This allows clients to read and build transactions to interact with compressed state.The canonical ZK Compression indexer is named Photon, built by Helius Labs. See the Github repo for more info." cta="repo" href="https://github.com/helius-labs/photon">Photon RPC nodes</Tooltip> 
+<Tooltip tip="RPC nodes index the Light Protocol programs. This allows clients to read and build transactions to interact with compressed state. The canonical ZK Compression indexer is named Photon, built by Helius Labs. See the Github repo for more info." cta="repo" href="https://github.com/helius-labs/photon">Photon RPC nodes</Tooltip> 

-# Next Steps
+## Next Steps
🤖 Prompt for AI Agents
In `@learn/compressed-pda-concepts.mdx` around lines 2 - 72, Update the
frontmatter "description" text to correct grammar (e.g., "Overview of how
compressed PDAs work with ZK Compression"), ensure there is a space before any
Tooltip tags (fix any occurrences like "...on<Tooltip" to "...on <Tooltip>"),
and change the top-level "# Next Steps" heading to "## Next Steps" to preserve a
single H1; also lightly copyedit the introductory paragraph/heading wording for
clarity.

Comment on lines 4 to 53
description: Developer tools (error cheatsheet, addresses and urls, migration guide) and learn core concepts.
keywords: ["zk compression on solana", "scalable solana infrastructure", "compressed accounts on solana", "privacy on solana", "zk on solana", "shielded transactions on solana"]
---

import WelcomePageInstall from "/snippets/setup/welcome-page-install.mdx";
import { RentLifecycleVisualizer } from "/snippets/jsx/rent-lifecycle-visualizer.jsx";
import CompressibleRentExplained from "/snippets/compressible-rent-explained.mdx";

# Developer Tools

<CardGroup cols={2}>
<Card title="Error Cheatsheet" icon="bug" href="/resources/error-cheatsheet">
Debug common errors and issues.
</Card>
<Card title="Addresses and URLs" icon="link" href="/resources/addresses-and-urls">
RPC endpoints and Merkle tree/ program/ account addresses.
</Card>
<Card title="CLI Installation" icon="terminal" href="/resources/cli-installation">
Install the Light CLI.
</Card>
<Card title="Migration Guide" icon="arrow-right" href="/references/migration-v1-to-v2">
Migrate Merkle trees from v1 to v2.
</Card>
</CardGroup>

<Card title="SDK Reference" icon="code" href="/api-reference/sdk">
TypeScript and Rust SDKs for client and program development.
</Card>

# Learn

## What is Light Token?

Light token is a high-performance token standard that is functionally equivalent to SPL, but stores mint and token accounts more efficiently. This reduces account creation cost while being more CU efficient than SPL on hot paths.

<CardGroup cols={2}>
<Card title="Light Token Standard" icon="graduation-cap" href="/learn/light-token-standard">
Core concepts of the Light Token program.
</Card>
<Card title="FAQ" icon="circle-question" href="/light-token/faq">
Frequently asked questions.
</Card>
</CardGroup>

## What is ZK Compression?

ZK Compression is a Solana account primitive that lets you create tokens and PDAs without rent-exemption with L1 performance and security.
The Light Token Program uses ZK Compression under the hood.

Storage cost of Solana accounts are reduced by combining generalized state compression and <Tooltip tip="A cryptographic proof to verify the validity of a statement without revealing the underlying data. ZK Compression uses a Groth16 SNARK zk proof with a constant 128 bytes size">zero-knowledge proofs</Tooltip>.
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Tighten capitalization and hyphenation in the intro copy.
A few small edits improve clarity and consistency in the opening metadata and Learn section.

📝 Suggested edits
-description: Developer tools (error cheatsheet, addresses and urls, migration guide) and learn core concepts.
+description: Developer tools (error cheatsheet, addresses and URLs, migration guide) and learn core concepts.

-Light token is a high-performance token standard that is functionally equivalent to SPL, but stores mint and token accounts more efficiently.
+Light Token is a high-performance token standard that is functionally equivalent to SPL, but stores mint and token accounts more efficiently.

-Storage cost of Solana accounts are reduced by combining generalized state compression and <Tooltip tip="A cryptographic proof to verify the validity of a statement without revealing the underlying data. ZK Compression uses a Groth16 SNARK zk proof with a constant 128 bytes size">zero-knowledge proofs</Tooltip>.
+Storage costs of Solana accounts are reduced by combining generalized state compression and <Tooltip tip="A cryptographic proof to verify the validity of a statement without revealing the underlying data. ZK Compression uses a Groth16 SNARK zk proof with a constant 128-byte size">zero-knowledge proofs</Tooltip>.
📝 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
description: Developer tools (error cheatsheet, addresses and urls, migration guide) and learn core concepts.
keywords: ["zk compression on solana", "scalable solana infrastructure", "compressed accounts on solana", "privacy on solana", "zk on solana", "shielded transactions on solana"]
---
import WelcomePageInstall from "/snippets/setup/welcome-page-install.mdx";
import { RentLifecycleVisualizer } from "/snippets/jsx/rent-lifecycle-visualizer.jsx";
import CompressibleRentExplained from "/snippets/compressible-rent-explained.mdx";
# Developer Tools
<CardGroup cols={2}>
<Card title="Error Cheatsheet" icon="bug" href="/resources/error-cheatsheet">
Debug common errors and issues.
</Card>
<Card title="Addresses and URLs" icon="link" href="/resources/addresses-and-urls">
RPC endpoints and Merkle tree/ program/ account addresses.
</Card>
<Card title="CLI Installation" icon="terminal" href="/resources/cli-installation">
Install the Light CLI.
</Card>
<Card title="Migration Guide" icon="arrow-right" href="/references/migration-v1-to-v2">
Migrate Merkle trees from v1 to v2.
</Card>
</CardGroup>
<Card title="SDK Reference" icon="code" href="/api-reference/sdk">
TypeScript and Rust SDKs for client and program development.
</Card>
# Learn
## What is Light Token?
Light token is a high-performance token standard that is functionally equivalent to SPL, but stores mint and token accounts more efficiently. This reduces account creation cost while being more CU efficient than SPL on hot paths.
<CardGroup cols={2}>
<Card title="Light Token Standard" icon="graduation-cap" href="/learn/light-token-standard">
Core concepts of the Light Token program.
</Card>
<Card title="FAQ" icon="circle-question" href="/light-token/faq">
Frequently asked questions.
</Card>
</CardGroup>
## What is ZK Compression?
ZK Compression is a Solana account primitive that lets you create tokens and PDAs without rent-exemption with L1 performance and security.
The Light Token Program uses ZK Compression under the hood.
Storage cost of Solana accounts are reduced by combining generalized state compression and <Tooltip tip="A cryptographic proof to verify the validity of a statement without revealing the underlying data. ZK Compression uses a Groth16 SNARK zk proof with a constant 128 bytes size">zero-knowledge proofs</Tooltip>.
description: Developer tools (error cheatsheet, addresses and URLs, migration guide) and learn core concepts.
keywords: ["zk compression on solana", "scalable solana infrastructure", "compressed accounts on solana", "privacy on solana", "zk on solana", "shielded transactions on solana"]
---
import WelcomePageInstall from "/snippets/setup/welcome-page-install.mdx";
import { RentLifecycleVisualizer } from "/snippets/jsx/rent-lifecycle-visualizer.jsx";
import CompressibleRentExplained from "/snippets/compressible-rent-explained.mdx";
# Developer Tools
<CardGroup cols={2}>
<Card title="Error Cheatsheet" icon="bug" href="/resources/error-cheatsheet">
Debug common errors and issues.
</Card>
<Card title="Addresses and URLs" icon="link" href="/resources/addresses-and-urls">
RPC endpoints and Merkle tree/ program/ account addresses.
</Card>
<Card title="CLI Installation" icon="terminal" href="/resources/cli-installation">
Install the Light CLI.
</Card>
<Card title="Migration Guide" icon="arrow-right" href="/references/migration-v1-to-v2">
Migrate Merkle trees from v1 to v2.
</Card>
</CardGroup>
<Card title="SDK Reference" icon="code" href="/api-reference/sdk">
TypeScript and Rust SDKs for client and program development.
</Card>
# Learn
## What is Light Token?
Light Token is a high-performance token standard that is functionally equivalent to SPL, but stores mint and token accounts more efficiently. This reduces account creation cost while being more CU efficient than SPL on hot paths.
<CardGroup cols={2}>
<Card title="Light Token Standard" icon="graduation-cap" href="/learn/light-token-standard">
Core concepts of the Light Token program.
</Card>
<Card title="FAQ" icon="circle-question" href="/light-token/faq">
Frequently asked questions.
</Card>
</CardGroup>
## What is ZK Compression?
ZK Compression is a Solana account primitive that lets you create tokens and PDAs without rent-exemption with L1 performance and security.
The Light Token Program uses ZK Compression under the hood.
Storage costs of Solana accounts are reduced by combining generalized state compression and <Tooltip tip="A cryptographic proof to verify the validity of a statement without revealing the underlying data. ZK Compression uses a Groth16 SNARK zk proof with a constant 128-byte size">zero-knowledge proofs</Tooltip>.
🤖 Prompt for AI Agents
In `@references/overview.mdx` around lines 4 - 53, Update the intro metadata and
headings to use consistent title-case and hyphenation: change the description
string to "Developer tools (Error Cheatsheet, Addresses and URLs, Migration
Guide) and Learn core concepts.", capitalize "Learn" and "Light Token" in the
paragraph starting with "What is Light Token?", ensure "Light Token is" (or "The
Light Token is") uses title-case, and normalize "ZK Compression" capitalization
in the "What is ZK Compression?" header and body; also standardize hyphenation
to "zero-knowledge proofs" inside the Tooltip text. Locate and update the
description field, the "What is Light Token?" paragraph, the "What is ZK
Compression?" paragraph, and the Tooltip content to apply these changes.

Comment on lines +13 to +25
The Light protocol on-chain programs were audited by independent security firms Certora, OtterSec, Accretion, HashCloak, Neodyme, and Zellic.

| Firm | Scope | Date | Report |
| :--- | :--- | :--- | :--- |
| **Certora** | Light Token | December '25 | [View](https://github.com/Lightprotocol/light-protocol/blob/main/audits/certora_2025-12_light-token.pdf) |
| **OtterSec** | CPI Context Refactor | December '25 | [View](https://github.com/Lightprotocol/light-protocol/blob/main/audits/ottersec_2025-12_cpi-context-refactor.pdf) |
| **Accretion** | ZK Compression v2 | June '25 | [View](https://github.com/Lightprotocol/light-protocol/blob/main/audits/accretion_2025-06_zkcompression-v2.pdf) |
| **OtterSec** | Batched Merkle Trees | June '25 | [View](https://github.com/Lightprotocol/light-protocol/blob/main/audits/ottersec_2025-06_batched-merkle-trees.pdf) |
| **HashCloak** | Compressed Token & ZK Compression v2 | March '25 | [View](https://github.com/Lightprotocol/light-protocol/blob/main/audits/hashcloak_2025-03_compressed-token-update-and-zkcompression-v2.pdf) |
| **OtterSec** | Zerocopy | March '25 | [View](https://github.com/Lightprotocol/light-protocol/blob/main/audits/ottersec_2025-03_zerocopy.pdf) |
| **Accretion** | Compressed Token Program Update | January '25 | [View](https://github.com/Lightprotocol/light-protocol/blob/main/audits/accretion_2025-01_compressed-token-program-update.pdf) |
| **Zellic** | ZK Compression v1 | September '24 | [View](https://github.com/Lightprotocol/light-protocol/blob/main/audits/zellic_2024-09_zkcompression-v1.pdf) |
| **Neodyme** | ZK Compression v1 | August '24 | [View](https://github.com/Lightprotocol/light-protocol/blob/main/audits/neodyme_2024-08_zkcompression-v1.pdf) |
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

# First, check if the file exists and view the relevant lines
if [ -f "references/security.mdx" ]; then
  echo "=== File content (lines 10-30) ==="
  sed -n '10,30p' references/security.mdx
else
  echo "File not found at references/security.mdx"
  find . -name "security.mdx" -type f
fi

Repository: Lightprotocol/docs-v2

Length of output: 2256


🏁 Script executed:

# Verify all audit links resolve
urls=(
  "https://github.com/Lightprotocol/light-protocol/blob/main/audits/certora_2025-12_light-token.pdf"
  "https://github.com/Lightprotocol/light-protocol/blob/main/audits/ottersec_2025-12_cpi-context-refactor.pdf"
  "https://github.com/Lightprotocol/light-protocol/blob/main/audits/accretion_2025-06_zkcompression-v2.pdf"
  "https://github.com/Lightprotocol/light-protocol/blob/main/audits/ottersec_2025-06_batched-merkle-trees.pdf"
  "https://github.com/Lightprotocol/light-protocol/blob/main/audits/hashcloak_2025-03_compressed-token-update-and-zkcompression-v2.pdf"
  "https://github.com/Lightprotocol/light-protocol/blob/main/audits/ottersec_2025-03_zerocopy.pdf"
  "https://github.com/Lightprotocol/light-protocol/blob/main/audits/accretion_2025-01_compressed-token-program-update.pdf"
  "https://github.com/Lightprotocol/light-protocol/blob/main/audits/zellic_2024-09_zkcompression-v1.pdf"
  "https://github.com/Lightprotocol/light-protocol/blob/main/audits/neodyme_2024-08_zkcompression-v1.pdf"
)

echo "=== Link validation results ==="
for url in "${urls[@]}"; do
  code=$(curl -s -o /dev/null -w "%{http_code}" -L "$url" --max-time 10)
  status="✓ OK"
  if [ "$code" != "200" ] && [ "$code" != "302" ]; then
    status="✗ FAIL ($code)"
  fi
  echo "$status | $url"
done

Repository: Lightprotocol/docs-v2

Length of output: 1123


Standardize "Light Protocol" capitalization and use full years in date column.

Line 13 uses lowercase "Light protocol" (should be "Light Protocol" for consistency with branding). Additionally, all dates in the table use abbreviated years (e.g., "December '25"), which reduces clarity—use full years (e.g., "December 2025") instead. All audit report links are valid and accessible.

Example cleanup
-The Light protocol on-chain programs were audited by independent security firms Certora, OtterSec, Accretion, HashCloak, Neodyme, and Zellic.
+The Light Protocol on-chain programs were audited by independent security firms Certora, OtterSec, Accretion, HashCloak, Neodyme, and Zellic.

-| **Certora** | Light Token | December '25 | [View](https://github.com/Lightprotocol/light-protocol/blob/main/audits/certora_2025-12_light-token.pdf) |
+| **Certora** | Light Token | December 2025 | [View](https://github.com/Lightprotocol/light-protocol/blob/main/audits/certora_2025-12_light-token.pdf) |
🤖 Prompt for AI Agents
In `@references/security.mdx` around lines 13 - 25, Update the branding and date
formats in the audits intro and table: change the phrase "Light protocol" to
"Light Protocol" in the sentence starting with "The Light protocol on-chain
programs..." and replace all abbreviated year formats like "December '25", "June
'25", etc. inside the table with full years (e.g., "December 2025", "June 2025")
to standardize capitalization and use full years across the entries referenced
in the table rows for Certora, OtterSec, Accretion, HashCloak, Zellic, and
Neodyme.

Comment on lines 45 to 46
Compressed accounts with an address stored in an address Merkle tree.
Full Solana PDA functionality and composability without rent-exemption.
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Smooth the Compressed PDA sentence and hyphenate “rent‑exempt.”
This removes the fragment and aligns with standard terminology.

📝 Suggested edits
-Compressed accounts with an address stored in an address Merkle tree.
-Full Solana PDA functionality and composability without rent-exemption.
+Compressed accounts with an address stored in an address Merkle tree.
+They provide full Solana PDA functionality and composability without rent-exemption.

-Compressed token accounts do not require a rent exempt balance upon creation.
+Compressed token accounts do not require a rent-exempt balance upon creation.

Also applies to: 74-76

🤖 Prompt for AI Agents
In `@references/terminology.mdx` around lines 45 - 46, Merge the two fragments
"Compressed accounts with an address stored in an address Merkle tree." and
"Full Solana PDA functionality and composability without rent-exemption." into a
single smooth sentence (start with the "Compressed accounts..." phrase) and
hyphenate “rent‑exempt” (use the form rent-exempt) so the result reads as one
complete sentence describing that compressed accounts with an address Merkle
tree provide full Solana PDA functionality and composability without rent-exempt
status.

Comment on lines +10 to +15
| [merkle-distributor](https://github.com/Lightprotocol/distributor) | SPL token distribution with compressed PDAs for claim tracking, vesting, and clawback |
| [Nullifier Program](https://github.com/Lightprotocol/nullifier-program) | System for payments, AI agents and more to prevent your onchain instruction from being executed more than once |
| [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 |
| [Nullifier Program](https://github.com/Lightprotocol/nullifier-program) | For some use cases, such as sending payments, you might want to prevent your onchain instruction from being executed more than once. Creates a rent-free PDA derived from an id. If the id has been used before, the PDA already exists, causing the instruction to fail |
| [ZK-ID](https://github.com/Lightprotocol/program-examples/tree/main/zk-id) | Program that uses zero-knowledge proofs for identity verification with compressed accounts |
| [simple-claim](https://github.com/Lightprotocol/program-examples-airdrop-implementations/tree/main/simple-claim) | Distributes compressed tokens that decompress to SPL on claim |
| [ZK-ID](https://github.com/Lightprotocol/program-examples/tree/main/zk-id) | Zero-knowledge proofs for identity verification with compressed accounts |
| [ZK-Nullifier](https://github.com/Lightprotocol/program-examples/tree/main/zk-nullifier) | Implementation of nullifiers for zk programs on Solana to prevent double spending |
Copy link

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

🌐 Web query:

site:github.com/Lightprotocol/distributor

💡 Result:

Lightprotocol/distributor is a public GitHub repo (forked from jito-foundation/distributor) that implements a Merkle-based SPL-token distributor on Solana, supporting distributions with a mix of unlocked and linearly-vesting (locked) tokens. It’s optimized to reduce claim costs by using compressed accounts for user ClaimStatus (claimed cost comparison is shown in the README). The repo includes a Rust on-chain program (programs/merkle-distributor), plus supporting components like a cli, api, merkle-tree, and verify tooling, along with local testing instructions using light test-validator. [1]


🌐 Web query:

site:github.com/Lightprotocol/nullifier-program

💡 Result:

The GitHub repo Lightprotocol/nullifier-program is a reference implementation for creating rent-free “nullifier” PDAs on Solana: it derives a PDA from an id; if that id was already used, the PDA already exists and the create instruction fails (letting you prevent double-spends / replays). It includes the on-chain program plus Rust + TypeScript SDK helpers and tests. [1]

Key details from the README:

  • Prereqs: Rust 1.79+, Solana CLI 2.2+, Anchor CLI 0.31.1, Node.js 18+. [1]
  • Build: anchor build and npm run build. [1]
  • Test: Rust via cargo test-sbf -p light-nullifier-program; TS tests require a local validator with Light Protocol (lightprotocol/zk-compression-cli 0.28.0-beta.5). [1]
  • SDK usage:
    • Rust: create_nullifier_ix (or fetch_proof + build_instruction). [1]
    • TypeScript: createNullifierIx (or fetchProof + buildInstruction), plus deriveNullifierAddress to check existence. [1]
  • How it works: derive address from seeds like ["nullifier", id], create the empty rent-free PDA, and fail if it already exists; intended to be prepended/appended to your main transaction. [1]
  • Note: code is unaudited. [1]

Sources:
[1] Lightprotocol/nullifier-program (GitHub repository + README) (github.com)

Citations:


🌐 Web query:

site:github.com/Lightprotocol/program-examples-airdrop-implementations

💡 Result:

The GitHub repository Lightprotocol/program-examples-airdrop-implementations does not exist (GitHub returns 404 Not Found). [1]

If you meant Light Protocol’s examples repo, it appears to be Lightprotocol/program-examples, which contains “Compressed Accounts Program Examples” (basic operations, counter, zk-id, etc.). [2]

Sources: [1] [2]


🌐 Web query:

site:github.com/Lightprotocol/program-examples zk-nullifier

💡 Result:

No file/path in Lightprotocol/program-examples appears to literally contain the string zk-nullifier (your exact search term). The repository instead documents a “nullifier” example under ZK Programs and links to zk/nullifier. [1]

Relevant location in the repo:

  • zk/nullifier (ZK Programs → “nullifier” example) [2]

Sources:
[1] https://github.com/Lightprotocol/program-examples
[2] https://github.com/Lightprotocol/program-examples/tree/main/zk/nullifier


Two of the four new program example links have issues and need to be fixed.

  • simple-claim points to Lightprotocol/program-examples-airdrop-implementations, which does not exist (404). Verify the correct repository name or location.
  • ZK-Nullifier uses the incorrect path /zk-nullifier; it should be /zk/nullifier per the actual repository structure at Lightprotocol/program-examples.

The merkle-distributor and Nullifier Program links are valid.

🤖 Prompt for AI Agents
In `@snippets/overview-tables/program-examples-table.mdx` around lines 10 - 15,
Update the two broken links in the table: for the simple-claim entry (label
"simple-claim") replace the current non-existent repository URL with the correct
repository/location for the airdrop implementation (locate the actual repo under
Lightprotocol or the correct org/name and update the link so it no longer 404s);
for the ZK-Nullifier entry (label "ZK-Nullifier") change the path from
/zk-nullifier to the correct nested path /zk/nullifier under the
program-examples repo (i.e., point to
Lightprotocol/program-examples/tree/main/zk/nullifier); after updating both
links, verify each opens without a 404.

tilo-14 and others added 10 commits February 10, 2026 22:52
- ai-tools/guide.mdx: update skill table links to GitHub URLs
- light-token/defi/programs.mdx: SDK 0.19.0 API updates
- light-token/defi/routers.mdx: SDK 0.19.0 streaming-based cold detection
- security.mdx: expand audit table (10 audits through Dec '25)
- terminology.mdx: improve Compressed PDA, SPL Interface PDA Account defs
- transfer-interface.mdx: add create-and-transfer example tab
- compressed-account-model.mdx: remove Compressed Token section, add Info
- merkle-trees: fix "optimizes optimize" typo, remove "on Devnet"
- faq.mdx: add Learn Core Concepts card
- welcome.mdx: add quickstart card to Get Started step
- sdk-reference: fix heading and icons
- program-examples-table: minor text update
- .gitignore: add 3 config file entries

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Copy link

@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: 4

Caution

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

⚠️ Outside diff range comments (5)
zk/overview.mdx (1)

36-36: ⚠️ Potential issue | 🟡 Minor

Typo: "on on Github" → "on Github".

-[See full example with tests on on Github](https://github.com/Lightprotocol/program-examples/tree/main/zk/nullifier).
+[See full example with tests on Github](https://github.com/Lightprotocol/program-examples/tree/main/zk/nullifier).
light-token/toolkits/for-payments.mdx (1)

307-314: ⚠️ Potential issue | 🟠 Major

Inconsistent transferInterface signature — missing rpc parameter.

This call omits the rpc argument, while the second example on lines 332–340 includes it as the first parameter. One of these is incorrect, which will confuse developers trying to integrate.

-await transferInterface( 
-  payer,
+await transferInterface(
+  rpc,
+  payer,
   sourceAta,
   mint,
   destinationAta,
   owner,
   amount
 );
compressed-pdas/overview.mdx (1)

114-121: ⚠️ Potential issue | 🟡 Minor

Minor formatting issues in the Dependencies accordion.

  • Line 111: Extra space before period: "creates only Anchor-based projects ."
  • Line 119: Missing separator between package name and description: "light-sdk-pinocchio Core SDK..." — should have a dash or colon for consistency with the other entries.
📝 Suggested fix
-The `light init` command creates only Anchor-based projects . For Pinocchio programs, manually configure dependencies using `light-sdk-pinocchio`.
+The `light init` command creates only Anchor-based projects. For Pinocchio programs, manually configure dependencies using `light-sdk-pinocchio`.
-* `light-sdk-pinocchio` Core SDK for compressed accounts in pinocchio programs
+* `light-sdk-pinocchio` - Core SDK for compressed accounts in pinocchio programs
references/terminology.mdx (1)

54-54: ⚠️ Potential issue | 🟡 Minor

Grammatical error: misplaced adverb.

"A 32-byte identifier uniquely that represents" should read "A 32-byte identifier that uniquely represents".

📝 Suggested fix
-A 32-byte identifier uniquely that represents a compressed account's state, stored in a state tree.
+A 32-byte identifier that uniquely represents a compressed account's state, stored in a state tree.
support.mdx (1)

55-55: ⚠️ Potential issue | 🟡 Minor

Grammar: "recommend to use" → "recommend using".

Same pattern as in ai-tools/guide.mdx.

📝 Suggested fix
-If you don't have the MCP installed we recommend to use AskDevin in your browser.
+If you don't have the MCP installed, we recommend using AskDevin in your browser.
🤖 Fix all issues with AI agents
In `@ai-tools/guide.mdx`:
- Around line 76-78: Replace the incorrect infinitive uses of "recommend" with
gerunds: change the phrase "We recommend to create a command" to "We recommend
creating a command" (the string "We recommend to create a command"), and
likewise change "we recommend to use" to "we recommend using" (the string "we
recommend to use") so both occurrences use the proper gerund form.
- Around line 164-177: Update the Most Clients tab's DeepWiki MCP entry so it
uses the recommended streamable HTTP endpoint: change
mcpServers.deepwiki.serverUrl from "https://mcp.deepwiki.com/sse" to
"https://mcp.deepwiki.com/mcp" (and if any client command/args for DeepWiki are
present, mirror the Claude Code tab by including the "-t http" transport flag);
target the mcpServers.deepwiki.serverUrl field in the JSON and make the URL and
transport consistent with the Claude Code example.

In `@compressed-pdas/solana-attestation-service.mdx`:
- Line 3: The front-matter description value contains leading whitespace ("   
Credential system..."); remove the leading spaces from the description string in
the front-matter so it reads "Credential system for KYC verification,
professional badges, and compliance credentials in minutes. Currently undergoing
audit." — update the description field in the document's front-matter (the
description key shown in the diff) to have no leading whitespace.

In `@docs.json`:
- Line 102: The "group" value string currently reads "More Usecases" and should
be corrected to standard English "More Use Cases"; update the JSON entry that
contains the key "group" with value "More Usecases" to instead use "More Use
Cases" so the grouping label is spelled correctly.
🧹 Nitpick comments (5)
snippets/code-snippets/light-token/transfer-interface/anchor-program/create-and-transfer-example.mdx (2)

184-184: Inconsistent Solana crate usage in the test example.

The test imports granular crates (solana_keypair, solana_signer, solana_instruction) at lines 103-105, but line 184 uses the monolithic solana_sdk::system_program::ID. For consistency in a documentation example, consider using the granular solana_system_program crate or importing solana_sdk alongside the others at the top.


218-218: Mid-function use statement in documentation example.

The use light_token_interface::state::Token; import at line 218 is placed inside the function body rather than at the top of the file with the other imports. While valid Rust, this is atypical and may confuse readers following the example. Consider moving it to the import block at lines 93-106.

light-token/faq.mdx (1)

137-142: Empty Card body — consider adding a description for consistency.

All other Cards in this file include descriptive text. This one renders with just a title, which may look incomplete.

Suggested change
 <Card
   title="Learn Core Concepts"
   icon="graduation-cap"
   href="/learn/light-token-standard"
 >
+  Understand the Light Token standard and how it works under the hood.
 </Card>

The /learn/light-token-standard page exists and resolves correctly.

ai-tools/guide.mdx (1)

10-11: Inconsistent bullet marker.

Lines 8–9 use - while Line 10 uses *. Use a consistent marker throughout the list.

📝 Suggested fix
-- **Docs AI Search** - Search documentation with AI in the search bar.
-- **Markdown Export** - Append `.md` to any page URL for raw markdown.
-* **View [`/llms.txt`](https://zkcompression.com/llms.txt)** for an index of the docs - It lists key pages with descriptions
+- **Docs AI Search** - Search documentation with AI in the search bar.
+- **Markdown Export** - Append `.md` to any page URL for raw markdown.
+- **View [`/llms.txt`](https://zkcompression.com/llms.txt)** for an index of the docs - It lists key pages with descriptions
home.mdx (1)

119-121: Inconsistent indentation on the Compressed PDA Overview card.

The opening <Card> tag is indented 4 spaces, but the closing </Card> tag is indented only 2 spaces, and the content text sits at the same level as the opening tag instead of being nested inside it. This won't break rendering in most MDX engines, but it's inconsistent with the rest of the file.

✏️ Suggested fix
-    <Card title="Overview" icon="book" href="/compressed-pdas/overview">
-    To store app and user state without rent-exemption. Introduction to compressed PDAs.
-  </Card>
+<Card title="Overview" icon="book" href="/compressed-pdas/overview">
+  To store app and user state without rent-exemption. Introduction to compressed PDAs.
+</Card>

Comment on lines +76 to +78
<Tip>
**We recommend to create a command** that includes the tools listed below. <br /> Simply **copy paste this snippet**.
</Tip>
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Grammar: "recommend to create" → "recommend creating".

"Recommend" takes a gerund, not an infinitive, in standard English.

The same pattern appears on Line 211: "we recommend to use" → "we recommend using".

📝 Suggested fix (Line 77)
-**We recommend to create a command** that includes the tools listed below. <br /> Simply **copy paste this snippet**.
+**We recommend creating a command** that includes the tools listed below. <br /> Simply **copy-paste this snippet**.
📝 Suggested fix (Line 211)
-If you don't have the MCP installed we recommend to use AskDevin in your browser.
+If you don't have the MCP installed, we recommend using AskDevin in your browser.
📝 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
<Tip>
**We recommend to create a command** that includes the tools listed below. <br /> Simply **copy paste this snippet**.
</Tip>
<Tip>
**We recommend creating a command** that includes the tools listed below. <br /> Simply **copy-paste this snippet**.
</Tip>
🤖 Prompt for AI Agents
In `@ai-tools/guide.mdx` around lines 76 - 78, Replace the incorrect infinitive
uses of "recommend" with gerunds: change the phrase "We recommend to create a
command" to "We recommend creating a command" (the string "We recommend to
create a command"), and likewise change "we recommend to use" to "we recommend
using" (the string "we recommend to use") so both occurrences use the proper
gerund form.

Comment on lines +164 to +177
```json
{
"mcpServers": {
"deepwiki": {
"serverUrl": "https://mcp.deepwiki.com/sse"
},
"zkcompression": {
"command": "npx",
"args": ["-y", "mcp-remote@latest", "https://www.zkcompression.com/mcp"]
}
}
}
```
</Tab>
Copy link

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

🌐 Web query:

DeepWiki MCP server endpoint SSE HTTP transport documentation

💡 Result:

DeepWiki’s public remote MCP server exposes two HTTP endpoints (two “wire protocols”):

  • Streamable HTTP (recommended): https://mcp.deepwiki.com/mcp (docs.devin.ai)
  • SSE (legacy / being deprecated): https://mcp.deepwiki.com/sse (docs.devin.ai)

Documentation pages that describe these endpoints/transports:

  • Devin Docs: “DeepWiki MCP” (lists /mcp and /sse, and notes SSE is legacy/deprecating) (docs.devin.ai)
  • MCP Registry (GitHub): DeepWiki entry (lists both URLs) (github.com)

Citations:


🏁 Script executed:

# First, let's read the file at the specified lines to see what's actually there
head -n 180 ai-tools/guide.mdx | tail -n 20

Repository: Lightprotocol/docs-v2

Length of output: 409


🏁 Script executed:

# Also check line 72 to see if it contains the Claude Code tab reference
sed -n '60,85p' ai-tools/guide.mdx

Repository: Lightprotocol/docs-v2

Length of output: 868


Update Most Clients tab to use the recommended /mcp endpoint instead of deprecated SSE.

The Claude Code tab (Line 72) correctly uses https://mcp.deepwiki.com/mcp with -t http, but the Most Clients tab (Line 168) uses https://mcp.deepwiki.com/sse. According to DeepWiki's official documentation, the SSE endpoint is legacy and being deprecated; the /mcp endpoint (Streamable HTTP) is the recommended transport. Update the Most Clients tab to match the Claude Code tab for consistency and to avoid pointing users toward a deprecating endpoint.

🤖 Prompt for AI Agents
In `@ai-tools/guide.mdx` around lines 164 - 177, Update the Most Clients tab's
DeepWiki MCP entry so it uses the recommended streamable HTTP endpoint: change
mcpServers.deepwiki.serverUrl from "https://mcp.deepwiki.com/sse" to
"https://mcp.deepwiki.com/mcp" (and if any client command/args for DeepWiki are
present, mirror the Claude Code tab by including the "-t http" transport flag);
target the mcpServers.deepwiki.serverUrl field in the JSON and make the URL and
transport consistent with the Claude Code example.

title: "Solana Attestation Service (Devnet)"
description: "Build compressed attestations on Solana using ZK Compression. Currently undergoing audit."
url: "https://github.com/solana-foundation/solana-attestation-service/tree/a8fb187978ecea0b165e63767c7e6b1c036e7b52/examples/typescript/attestation-flow-guides"
description: " Credential system for KYC verification, professional badges, and compliance credentials in minutes. Currently undergoing audit."
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Remove leading whitespace from the description field.

The description has leading spaces (" Credential system..."), which may appear in SEO meta tags and social sharing previews.

📝 Suggested fix
-description: "    Credential system for KYC verification, professional badges, and compliance credentials in minutes. Currently undergoing audit."
+description: "Credential system for KYC verification, professional badges, and compliance credentials in minutes. Currently undergoing audit."
📝 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
description: " Credential system for KYC verification, professional badges, and compliance credentials in minutes. Currently undergoing audit."
description: "Credential system for KYC verification, professional badges, and compliance credentials in minutes. Currently undergoing audit."
🤖 Prompt for AI Agents
In `@compressed-pdas/solana-attestation-service.mdx` at line 3, The front-matter
description value contains leading whitespace ("    Credential system...");
remove the leading spaces from the description string in the front-matter so it
reads "Credential system for KYC verification, professional badges, and
compliance credentials in minutes. Currently undergoing audit." — update the
description field in the document's front-matter (the description key shown in
the diff) to have no leading whitespace.

docs.json Outdated
},
{
"group": "Compressed Tokens",
"group": "More Usecases",
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Typo: "Usecases" → "Use Cases"

Standard English spelling is two words.

-            "group": "More Usecases",
+            "group": "More Use Cases",
📝 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
"group": "More Usecases",
"group": "More Use Cases",
🤖 Prompt for AI Agents
In `@docs.json` at line 102, The "group" value string currently reads "More
Usecases" and should be corrected to standard English "More Use Cases"; update
the JSON entry that contains the key "group" with value "More Usecases" to
instead use "More Use Cases" so the grouping label is spelled correctly.

Copy link

@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: 10

Caution

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

⚠️ Outside diff range comments (3)
compressed-tokens/overview.mdx (1)

7-11: 🛠️ Refactor suggestion | 🟠 Major

Unused imports should be removed.

GuidesTable, AdvancedGuidesTable, SetupEnvironment, InstallDependencies, and TokenAccountCompressedVsSpl are all imported but never referenced in the file body. These appear to be leftovers from the previous page structure.

🧹 Proposed fix
-import GuidesTable from "/snippets/overview-tables/compressed-tokens-guides-table.mdx";
-import AdvancedGuidesTable from "/snippets/overview-tables/compressed-tokens-advanced-guides-table.mdx";
-import SetupEnvironment from "/snippets/setup/setup-environment-tabs.mdx";
-import InstallDependencies from "/snippets/setup/install-dependencies-codegroup.mdx";
-import { TokenAccountCompressedVsSpl } from "/snippets/jsx/token-account-compressed-vs-spl.jsx";
api-reference/json-rpc-methods/overview.mdx (1)

36-53: ⚠️ Potential issue | 🟡 Minor

Inconsistent placeholder and code style between Mainnet and Devnet tabs.

The Mainnet tab uses YOUR_KEY while the Devnet tab uses <api_key>. Additionally, the comment/import ordering differs between the two tabs. Aligning both would reduce reader confusion.

Proposed fix
 <Tab title="Devnet">
 ```typescript
+// Helius exposes Solana and Photon RPC endpoints through a single URL
 import { createRpc, Rpc } 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=<api_key>";
+const RPC_ENDPOINT = 'https://devnet.helius-rpc.com?api-key=YOUR_KEY';
 const connection: Rpc = createRpc(RPC_ENDPOINT, RPC_ENDPOINT);
```
compressed-pdas/overview.mdx (1)

127-127: ⚠️ Potential issue | 🟡 Minor

Missing dash separator in dependency list item.

Line 127 is missing the - separator between the crate name and its description, unlike the adjacent items.

-* `light-sdk-pinocchio` Core SDK for compressed accounts in pinocchio programs
+* `light-sdk-pinocchio` - Core SDK for compressed accounts in pinocchio programs
🤖 Fix all issues with AI agents
In `@api-reference/json-rpc-methods/overview.mdx`:
- Around line 162-163: Update the display text for the link so it matches the
actual method name: change the link label from
"GetCompressedTokenAccountsByDelegate" to "GetCompressedTokenAccountByDelegate"
while keeping the href
"/api-reference/json-rpc-methods/getcompressedtokenaccountbydelegate" unchanged;
locate the anchor/link in overview.mdx that currently references
getcompressedtokenaccountbydelegate and replace the pluralized display string
with the singular GetCompressedTokenAccountByDelegate.

In `@compressed-pdas/overview.mdx`:
- Line 4: Fix the typo in the keywords array by replacing "node acounts" with
"node accounts" so all occurrences of "acounts" are corrected to "accounts"
within the keywords string list (look for the keywords line in overview.mdx).

In `@compressed-tokens/overview.mdx`:
- Line 14: The note text containing "Q1 2026" is potentially stale; update the
sentence that currently reads '**Note: The new [Light Token Program
Beta](/light-token/welcome)** is live on Solana Devnet with mainnet expected in
Q1 2026.' to reflect current status—either replace "expected in Q1 2026" with a
precise month or a safer phrase like "expected in early 2026" or "(mainnet
launch forthcoming; check the Light Token Program page for the latest status),"
and, if mainnet has already launched, change to "mainnet is live" and link or
reference the official announcement. Ensure you edit that exact note string in
overview.mdx (the line with the Light Token Program Beta note).

In `@home.mdx`:
- Around line 217-219: Update the Card component that renders "Anchor
Constraints Light Account" to fix its broken link: change the href value on the
Card (the Card with title "Anchor Constraints Light Account" and icon "anchor")
from "/resources/anchor" to "/resources/anchor-constraints" so it matches the
docs.json navigation slug and the file path-based Mintlify slug resolution.

In `@light-token/light-pda.mdx`:
- Line 144: The text "Github" in the link label should be capitalized as
"GitHub"; update the string "View counter example on Github:
[counter](https://github.com/Lightprotocol/examples-light-token/tree/main/programs/anchor/basic-macros/counter)"
in light-pda.mdx so the label reads "View counter example on GitHub: ..."
(search for the "Github" token to locate the occurrence).
- Around line 31-36: The Cargo/TOML dependency list pins "anchor-lang" to
"0.31", which is outdated compared to the current Anchor release; update the
"anchor-lang" entry in the shown dependency block (the line containing
anchor-lang) to the latest release candidate (e.g., "1.0.0-rc.2") so it aligns
with light-account and light-sdk and avoids compatibility issues for users
copying this snippet.

In `@light-token/pda-overview.mdx`:
- Around line 10-11: The second sentence fragment ("Can be implemented with
minimal code changes to your existing Solana program and leaves program logic
mostly untouched.") needs a subject; update the sentence by prepending "They" or
merge it with the previous sentence ("Light-PDAs are Solana PDAs with sponsored
rent-exemption created using Anchor `#[account(init)]` with
`#[light_account(init)]`") so the phrase reads as a single complete sentence
referencing "Light-PDAs" (e.g., "Light-PDAs ... and can be implemented..." or
"They can be implemented...").

In `@references/terminology.mdx`:
- Around line 517-519: Remove the accidental duplicate "Cold account" definition
appended to the "ZK Compression" entry: delete the repeated sentences starting
with "A Light Token account, Light Token mint, or Light-PDA..." that repeat the
cold account definition; ensure the "ZK Compression" section ends after the
framework description and that the remaining mention of create_load_instructions
stays only in the original "Cold account" definition elsewhere to avoid
redundancy.

In `@resources/anchor-constraints.mdx`:
- Line 39: Replace the incorrect "Github" spelling with the official "GitHub" in
this document; locate the visible link text "Github" in the Examples link (the
anchor text for https://github.com/Lightprotocol/examples-light-token/…) and
update it, and also search the file for the other occurrences of "Github" (the
other two instances referenced in the review) and change them to "GitHub" so all
four usages use the correct capitalization.

In `@snippets/code-snippets/light-token/counter/anchor-macro/full-example.mdx`:
- Around line 185-191: The client construction of
counter::accounts::CreateCounter is missing the required pda_rent_sponsor
account; update the CreateCounter instantiation to include a pda_rent_sponsor
field populated with the appropriate Pubkey (derive or supply the PDA from the
rent sponsor program) alongside fee_payer, owner (payer.pubkey()),
compression_config, counter (counter_pda) and system_program so the accounts
struct matches the program's CreateCounter definition.
🧹 Nitpick comments (3)
api-reference/json-rpc-methods/overview.mdx (1)

81-87: Empty table headers reduce accessibility for screen readers.

Both the Methods and Legacy tables have blank <th> elements. Adding short headers like "Method" and "Description" would improve accessibility without changing the visual appearance (the doc framework likely styles <th> the same).

Proposed fix
   <thead>
     <tr>
-      <th width="30%"></th>
-      <th></th>
+      <th width="30%">Method</th>
+      <th>Description</th>
     </tr>
   </thead>

Apply the same change to the Legacy table (lines 143-146).

snippets/code-snippets/light-token/counter/anchor-macro/full-example.mdx (1)

46-50: Consider returning an Anchor error instead of unwrap() on overflow.

Since this is a documentation example meant to demonstrate best practices, using .unwrap() on checked_add teaches a panic-on-error pattern. An idiomatic Anchor approach would use ok_or(...) with a custom or built-in error.

Suggested improvement
-        ctx.accounts.counter.count = ctx.accounts.counter.count.checked_add(1).unwrap();
+        ctx.accounts.counter.count = ctx.accounts.counter.count
+            .checked_add(1)
+            .ok_or(ProgramError::ArithmeticOverflow)?;
home.mdx (1)

107-113: Minor indentation inconsistency in CardGroup.

The <Card> on line 111 has extra leading whitespace compared to its sibling on line 107.

   <Card title="Light PDA" icon="expand" href="/light-token/light-pda">
     Solana PDAs with sponsored rent-exemption that can be implemented with minimal code changes.
     Use like any other PDA, e.g. in your DeFi program.
   </Card>
-    <Card title="Advanced: Compressed PDA" icon="compress" href="/compressed-pdas/overview">
+  <Card title="Advanced: Compressed PDA" icon="compress" href="/compressed-pdas/overview">
     Compressed PDAs to store user, app, or other infrequently accessed state without rent-exemption. Fully compatible with existing Solana programs, but requires custom logic.
   </Card>

Comment on lines +162 to +163
<td>[GetCompressedTokenAccountsByDelegate](/api-reference/json-rpc-methods/getcompressedtokenaccountbydelegate)</td>
<td>Returns all compressed token accounts delegated to an address.</td>
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Find all method documentation files with "delegate" in the name
echo "=== Files with 'delegate' in name ==="
find . -type f \( -name "*.md" -o -name "*.mdx" \) | grep -i delegate

echo ""
echo "=== Search for references to getcompressedtoken in mdx files ==="
rg "getcompressedtoken" --type mdx -i

echo ""
echo "=== Check the overview.mdx file around line 162 ==="
sed -n '160,165p' api-reference/json-rpc-methods/overview.mdx 2>/dev/null || echo "File not found or not in expected location"

Repository: Lightprotocol/docs-v2

Length of output: 578


🏁 Script executed:

#!/bin/bash
# Check if there's a plural version of this method
echo "=== Search for any 'accounts' (plural) version ==="
find . -type f -name "*getcompressedtokenaccounts*"

echo ""
echo "=== List all json-rpc-methods files ==="
ls -la ./api-reference/json-rpc-methods/ | grep -i "getcompressed"

Repository: Lightprotocol/docs-v2

Length of output: 970


Fix display text to match method name — should be singular, not plural.

The URL path getcompressedtokenaccountbydelegate is correct and matches the actual documentation file. However, the display text incorrectly uses the plural form GetCompressedTokenAccountsByDelegate when it should be singular GetCompressedTokenAccountByDelegate to match the actual method name.

Fix
-      <td>[GetCompressedTokenAccountsByDelegate](/api-reference/json-rpc-methods/getcompressedtokenaccountbydelegate)</td>
+      <td>[GetCompressedTokenAccountByDelegate](/api-reference/json-rpc-methods/getcompressedtokenaccountbydelegate)</td>
📝 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
<td>[GetCompressedTokenAccountsByDelegate](/api-reference/json-rpc-methods/getcompressedtokenaccountbydelegate)</td>
<td>Returns all compressed token accounts delegated to an address.</td>
<td>[GetCompressedTokenAccountByDelegate](/api-reference/json-rpc-methods/getcompressedtokenaccountbydelegate)</td>
<td>Returns all compressed token accounts delegated to an address.</td>
🤖 Prompt for AI Agents
In `@api-reference/json-rpc-methods/overview.mdx` around lines 162 - 163, Update
the display text for the link so it matches the actual method name: change the
link label from "GetCompressedTokenAccountsByDelegate" to
"GetCompressedTokenAccountByDelegate" while keeping the href
"/api-reference/json-rpc-methods/getcompressedtokenaccountbydelegate" unchanged;
locate the anchor/link in overview.mdx that currently references
getcompressedtokenaccountbydelegate and replace the pluralized display string
with the singular GetCompressedTokenAccountByDelegate.

description: Compressed PDAs provide full functionality of accounts at PDAs, without rent-exemption per account.
keywords: ["rent free program derived addresses", "rent free pda accounts", "compressed pda on solana", "infrastructure for depins on solana", "scalable solana infrastructure", "stake accounts for depins", "cost efficient stake accounts", "scalable reward distribution on solana"]
description: To store user and app state, or other infrequently accessed state. Compressed PDAs provide full composability and functionality of accounts at PDAs, without rent-exemption per account.
keywords: ["user state", "app state", "node acounts", "depin accounts", "stake accounts", "not shared state or config or pool accounts", "rent free program derived addresses", "rent free pda accounts", "compressed pda on solana", "infrastructure for depins on solana", "scalable solana infrastructure", "stake accounts for depins", "cost efficient stake accounts", "scalable reward distribution on solana"]
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Typo in keywords: "acounts" → "accounts".

-keywords: ["user state", "app state", "node acounts", "depin accounts", ...
+keywords: ["user state", "app state", "node accounts", "depin 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
keywords: ["user state", "app state", "node acounts", "depin accounts", "stake accounts", "not shared state or config or pool accounts", "rent free program derived addresses", "rent free pda accounts", "compressed pda on solana", "infrastructure for depins on solana", "scalable solana infrastructure", "stake accounts for depins", "cost efficient stake accounts", "scalable reward distribution on solana"]
keywords: ["user state", "app state", "node accounts", "depin accounts", "stake accounts", "not shared state or config or pool accounts", "rent free program derived addresses", "rent free pda accounts", "compressed pda on solana", "infrastructure for depins on solana", "scalable solana infrastructure", "stake accounts for depins", "cost efficient stake accounts", "scalable reward distribution on solana"]
🤖 Prompt for AI Agents
In `@compressed-pdas/overview.mdx` at line 4, Fix the typo in the keywords array
by replacing "node acounts" with "node accounts" so all occurrences of "acounts"
are corrected to "accounts" within the keywords string list (look for the
keywords line in overview.mdx).

**Compressed Tokens are supported by leading Solana wallets such as Phantom and Backpack.**
</Check>
<Info>
**Note: The new [Light Token Program Beta](/light-token/welcome)** is live on Solana Devnet with mainnet expected in Q1 2026.
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

"Q1 2026" timeline may already be stale.

The current date is February 2026 — already within Q1 2026. If mainnet has launched, this note needs updating. If it hasn't, consider using more precise language (e.g., a specific month or "early 2026") to avoid appearing outdated.

🤖 Prompt for AI Agents
In `@compressed-tokens/overview.mdx` at line 14, The note text containing "Q1
2026" is potentially stale; update the sentence that currently reads '**Note:
The new [Light Token Program Beta](/light-token/welcome)** is live on Solana
Devnet with mainnet expected in Q1 2026.' to reflect current status—either
replace "expected in Q1 2026" with a precise month or a safer phrase like
"expected in early 2026" or "(mainnet launch forthcoming; check the Light Token
Program page for the latest status)," and, if mainnet has already launched,
change to "mainnet is live" and link or reference the official announcement.
Ensure you edit that exact note string in overview.mdx (the line with the Light
Token Program Beta note).

Comment on lines +31 to +36
```toml
[dependencies]
light-account = { version = "0.20.0", features = ["anchor"] }
light-sdk = { version = "0.20.0", features = ["anchor", "v2", "cpi-context"] }
anchor-lang = "0.31"
```
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check latest versions on crates.io
echo "=== light-account ==="
curl -s https://crates.io/api/v1/crates/light-account | jq '.crate.max_version'
echo "=== light-sdk ==="
curl -s https://crates.io/api/v1/crates/light-sdk | jq '.crate.max_version'
echo "=== anchor-lang ==="
curl -s https://crates.io/api/v1/crates/anchor-lang | jq '.crate.max_version'

Repository: Lightprotocol/docs-v2

Length of output: 155


Update anchor-lang to latest version.

The light-account (0.20.0) and light-sdk (0.20.0) versions are current, but anchor-lang is pinned to 0.31, which is significantly behind the latest 1.0.0-rc.2. Update to the current version to avoid compatibility issues, as users copy this dependency list directly.

🤖 Prompt for AI Agents
In `@light-token/light-pda.mdx` around lines 31 - 36, The Cargo/TOML dependency
list pins "anchor-lang" to "0.31", which is outdated compared to the current
Anchor release; update the "anchor-lang" entry in the shown dependency block
(the line containing anchor-lang) to the latest release candidate (e.g.,
"1.0.0-rc.2") so it aligns with light-account and light-sdk and avoids
compatibility issues for users copying this snippet.

<FullCounterExample />

<Callout type="info">
View counter example on Github: [counter](https://github.com/Lightprotocol/examples-light-token/tree/main/programs/anchor/basic-macros/counter)
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Capitalize "GitHub" correctly.

-View counter example on Github: [counter](https://github.com/...
+View counter example on GitHub: [counter](https://github.com/...
📝 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
View counter example on Github: [counter](https://github.com/Lightprotocol/examples-light-token/tree/main/programs/anchor/basic-macros/counter)
View counter example on GitHub: [counter](https://github.com/Lightprotocol/examples-light-token/tree/main/programs/anchor/basic-macros/counter)
🤖 Prompt for AI Agents
In `@light-token/light-pda.mdx` at line 144, The text "Github" in the link label
should be capitalized as "GitHub"; update the string "View counter example on
Github:
[counter](https://github.com/Lightprotocol/examples-light-token/tree/main/programs/anchor/basic-macros/counter)"
in light-pda.mdx so the label reads "View counter example on GitHub: ..."
(search for the "Github" token to locate the occurrence).

Comment on lines +10 to +11
Light-PDAs are Solana PDAs with sponsored rent-exemption created using Anchor `#[account(init)]` with `#[light_account(init)]`.
Can be implemented with minimal code changes to your existing Solana program and leaves program logic mostly untouched.
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Minor: sentence fragment — missing subject.

Line 11 starts with "Can be implemented…" which lacks a subject, making it a sentence fragment. Consider prepending "They" or merging with the previous sentence.

📝 Suggested fix
-Light-PDAs are Solana PDAs with sponsored rent-exemption created using Anchor `#[account(init)]` with `#[light_account(init)]`.
-Can be implemented with minimal code changes to your existing Solana program and leaves program logic mostly untouched.
+Light-PDAs are Solana PDAs with sponsored rent-exemption created using Anchor `#[account(init)]` with `#[light_account(init)]`.
+They can be implemented with minimal code changes to your existing Solana program and leave program logic mostly untouched.
📝 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-PDAs are Solana PDAs with sponsored rent-exemption created using Anchor `#[account(init)]` with `#[light_account(init)]`.
Can be implemented with minimal code changes to your existing Solana program and leaves program logic mostly untouched.
Light-PDAs are Solana PDAs with sponsored rent-exemption created using Anchor `#[account(init)]` with `#[light_account(init)]`.
They can be implemented with minimal code changes to your existing Solana program and leave program logic mostly untouched.
🧰 Tools
🪛 LanguageTool

[style] ~10-~10: To form a complete sentence, be sure to include a subject.
Context: ...(init)]with#[light_account(init)]`. Can be implemented with minimal code change...

(MISSING_IT_THERE)

🤖 Prompt for AI Agents
In `@light-token/pda-overview.mdx` around lines 10 - 11, The second sentence
fragment ("Can be implemented with minimal code changes to your existing Solana
program and leaves program logic mostly untouched.") needs a subject; update the
sentence by prepending "They" or merge it with the previous sentence
("Light-PDAs are Solana PDAs with sponsored rent-exemption created using Anchor
`#[account(init)]` with `#[light_account(init)]`") so the phrase reads as a
single complete sentence referencing "Light-PDAs" (e.g., "Light-PDAs ... and can
be implemented..." or "They can be implemented...").

Comment on lines +517 to +519

The Light Token program uses ZK Compression under the hood for inactive token accounts (cold state).
A Light Token account, Light Token mint, or Light-PDA that has been compressed after extended inactivity. The account’s state is cryptographically preserved on the Solana ledger as a compressed account. On-chain lookups return is_initialized: false. Clients call create_load_instructions to reinstate the account.
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Duplicate "Cold account" definition accidentally appended to ZK Compression section.

Lines 518–519 repeat the cold account definition from line 84 verbatim. This appears to be accidental copy-paste. The ZK Compression entry should end after describing the framework's purpose (line 517).

📝 Suggested fix
 ## ZK Compression

 A generalized compression framework to compress and verify arbitrary data with zero-knowledge proofs, to

 - enable the Compressed Account Model, the rent-free equivalent to Solana's Account Model,
 - solve Solana's state growth problem, and
 - build a foundation for native zk compute.

 The Light Token program uses ZK Compression under the hood for inactive token accounts (cold state).
-A Light Token account, Light Token mint, or Light-PDA that has been compressed after extended inactivity. The account's state is cryptographically preserved on the Solana ledger as a compressed account. On-chain lookups return is_initialized: false. Clients call create_load_instructions to reinstate the account.
🤖 Prompt for AI Agents
In `@references/terminology.mdx` around lines 517 - 519, Remove the accidental
duplicate "Cold account" definition appended to the "ZK Compression" entry:
delete the repeated sentences starting with "A Light Token account, Light Token
mint, or Light-PDA..." that repeat the cold account definition; ensure the "ZK
Compression" section ends after the framework description and that the remaining
mention of create_load_instructions stays only in the original "Cold account"
definition elsewhere to avoid redundancy.

pub counter: Account<'info, Counter>,
```

Examples: [Github](https://github.com/Lightprotocol/examples-light-token/tree/main/programs/anchor/basic-macros/counter)
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Capitalize "GitHub" correctly (applies to lines 39, 73, 101, 165).

The official spelling uses a capital "H". This appears four times in the file.

-Examples: [Github](https://github.com/...
+Examples: [GitHub](https://github.com/...
📝 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
Examples: [Github](https://github.com/Lightprotocol/examples-light-token/tree/main/programs/anchor/basic-macros/counter)
Examples: [GitHub](https://github.com/Lightprotocol/examples-light-token/tree/main/programs/anchor/basic-macros/counter)
🧰 Tools
🪛 LanguageTool

[uncategorized] ~39-~39: The official name of this software platform is spelled with a capital “H”.
Context: ...ccount<'info, Counter>, ``` Examples: [Github](https://github.com/Lightprotocol/examp...

(GITHUB)

🤖 Prompt for AI Agents
In `@resources/anchor-constraints.mdx` at line 39, Replace the incorrect "Github"
spelling with the official "GitHub" in this document; locate the visible link
text "Github" in the Examples link (the anchor text for
https://github.com/Lightprotocol/examples-light-token/…) and update it, and also
search the file for the other occurrences of "Github" (the other two instances
referenced in the review) and change them to "GitHub" so all four usages use the
correct capitalization.

Comment on lines +185 to +191
let create_accounts = counter::accounts::CreateCounter {
fee_payer: payer.pubkey(),
owner: payer.pubkey(),
compression_config,
counter: counter_pda,
system_program: solana_sdk::system_program::ID,
};
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Client is missing the pda_rent_sponsor account required by the program.

The CreateCounter accounts struct defined in the Program tab (lines 70-72) includes a pda_rent_sponsor: AccountInfo<'info> field, but the client-side construction here omits it entirely. A reader copying this example would hit an "account not found" or account mismatch error at runtime.

Proposed fix

You'll need to derive or supply the pda_rent_sponsor pubkey (likely a PDA from the rent sponsor program) and add it here:

 let create_accounts = counter::accounts::CreateCounter {
     fee_payer: payer.pubkey(),
     owner: payer.pubkey(),
     compression_config,
+    pda_rent_sponsor: /* derive or supply the rent sponsor PDA */,
     counter: counter_pda,
     system_program: solana_sdk::system_program::ID,
 };
🤖 Prompt for AI Agents
In `@snippets/code-snippets/light-token/counter/anchor-macro/full-example.mdx`
around lines 185 - 191, The client construction of
counter::accounts::CreateCounter is missing the required pda_rent_sponsor
account; update the CreateCounter instantiation to include a pda_rent_sponsor
field populated with the appropriate Pubkey (derive or supply the PDA from the
rent sponsor program) alongside fee_payer, owner (payer.pubkey()),
compression_config, counter (counter_pda) and system_program so the accounts
struct matches the program's CreateCounter definition.

Copy link

@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: 3

🤖 Fix all issues with AI agents
In `@compressed-pdas/guides/how-to-create-compressed-accounts.mdx`:
- Line 17: Fix the sentence in the guide by hyphenating "PDA-like" and adding a
comma after the introductory phrase: change the line containing "For Solana PDA
like behavior your compressed account needs an address as persistent
identifier." to read something like "For Solana PDA-like behavior, your
compressed account needs an address as a persistent identifier." ensuring
"PDA-like" is hyphenated and the comma follows the introductory clause.

In `@compressed-tokens/for-privy.mdx`:
- Line 99: The two inline links for createMint() and createTokenPool() both
point to the same cookbook URL which can confuse readers; update the markdown so
either (A) both link texts share a single consolidated link (e.g.,
"createMint()/createTokenPool() → https://.../compressed-token-cookbook") or (B)
change the createMint() link to the more specific resource for mint creation if
one exists; locate the occurrences of createMint() and createTokenPool() in the
document and replace the link target(s) accordingly so each link points to the
intended unique reference.

In `@snippets/overview-tables/compressed-tokens-guides-table.mdx`:
- Around line 3-11: The table in compressed-tokens-guides-table.mdx currently
points every row to the same cookbook root; update each row so its link targets
the specific guide (either the internal docs route or the precise GitHub
file/subdirectory) instead of the shared URL—for example replace the URL for
"Create Compressed Token Accounts", "Mint Compressed Tokens", "Transfer
Compressed Tokens", etc., with unique targets following the existing pattern
used in other tables (e.g. /compressed-tokens/create-compressed-token-accounts
or the exact GitHub path to that guide file); ensure each link text (the row
headings) maps to its corresponding specific doc or cookbook file so users can
navigate to the individual guides.
🧹 Nitpick comments (2)
home.mdx (1)

106-114: Minor: Inconsistent indentation on the second Card.

Line 111 has 4-space indent while line 107 uses 2-space indent. This won't break rendering but is inconsistent within the same <CardGroup>.

-    <Card title="Advanced: Compressed PDA" icon="compress" href="/compressed-pdas/overview">
+  <Card title="Advanced: Compressed PDA" icon="compress" href="/compressed-pdas/overview">
snippets/overview-tables/compressed-tokens-guides-table.mdx (1)

7-7: Nit: "afterwards" → "afterward" for American English consistency.

Flagged by static analysis (LanguageTool). Minor locale preference.

-| Compress complete SPL token accounts and reclaim rent afterwards           |
+| Compress complete SPL token accounts and reclaim rent afterward            |

* For Solana PDA like behavior your compressed account needs an address as persistent identifier.\
Fungible state like [compressed token accounts](/compressed-tokens/guides/create-compressed-token-accounts) do not need addresses.

* For Solana PDA like behavior your compressed account needs an address as persistent identifier.
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Minor grammar fix: hyphenate "PDA-like" and add a comma.

"PDA like" should be hyphenated as a compound modifier, and the introductory phrase needs a comma for readability.

Proposed fix
-* 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 a 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 a persistent identifier.
🧰 Tools
🪛 LanguageTool

[grammar] ~17-~17: 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 `@compressed-pdas/guides/how-to-create-compressed-accounts.mdx` at line 17, Fix
the sentence in the guide by hyphenating "PDA-like" and adding a comma after the
introductory phrase: change the line containing "For Solana PDA like behavior
your compressed account needs an address as persistent identifier." to read
something like "For Solana PDA-like behavior, your compressed account needs an
address as a persistent identifier." ensuring "PDA-like" is hyphenated and the
comma follows the introductory clause.

Before we call compress or decompresss, we need:

* An SPL mint with a interface PDA for compression. This PDA can be created for new SPL mints via [`createMint()`](/compressed-tokens/guides/create-mint-with-token-pool) or added to existing SPL mints via [`createTokenPool()`](/compressed-tokens/guides/add-token-pools-to-mint-accounts).
* An SPL mint with a interface PDA for compression. This PDA can be created for new SPL mints via [`createMint()`](https://github.com/Lightprotocol/examples-zk-compression/tree/main/compressed-token-cookbook) or added to existing SPL mints via [`createTokenPool()`](https://github.com/Lightprotocol/examples-zk-compression/tree/main/compressed-token-cookbook).
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Both createMint() and createTokenPool() link to the same URL.

Both inline links resolve to https://github.com/Lightprotocol/examples-zk-compression/tree/main/compressed-token-cookbook. If this is intentional (both are in the same cookbook), consider merging them into a single link to avoid user confusion. Otherwise, point createMint() to a more specific resource.

🤖 Prompt for AI Agents
In `@compressed-tokens/for-privy.mdx` at line 99, The two inline links for
createMint() and createTokenPool() both point to the same cookbook URL which can
confuse readers; update the markdown so either (A) both link texts share a
single consolidated link (e.g., "createMint()/createTokenPool() →
https://.../compressed-token-cookbook") or (B) change the createMint() link to
the more specific resource for mint creation if one exists; locate the
occurrences of createMint() and createTokenPool() in the document and replace
the link target(s) accordingly so each link points to the intended unique
reference.

Comment on lines +3 to +11
| [Create Compressed Token Accounts](https://github.com/Lightprotocol/examples-zk-compression/tree/main/compressed-token-cookbook) | Create compressed and learn difference to regular token accounts |
| [Mint Compressed Tokens](https://github.com/Lightprotocol/examples-zk-compression/tree/main/compressed-token-cookbook) | Create new compressed tokens to existing mint |
| [Transfer Compressed Tokens](https://github.com/Lightprotocol/examples-zk-compression/tree/main/compressed-token-cookbook) | Move compressed tokens between compressed accounts |
| [Decompress and Compress Tokens](https://github.com/Lightprotocol/examples-zk-compression/tree/main/compressed-token-cookbook) | Convert SPL tokens between regular and compressed format |
| [Compress Complete SPL Token Accounts](https://github.com/Lightprotocol/examples-zk-compression/tree/main/compressed-token-cookbook) | Compress complete SPL token accounts and reclaim rent afterwards |
| [Create a Mint with Interface PDA for Compression](https://github.com/Lightprotocol/examples-zk-compression/tree/main/compressed-token-cookbook) | Create new SPL mint with token pool for compression |
| [Create Token Pools for Mint Accounts](https://github.com/Lightprotocol/examples-zk-compression/tree/main/compressed-token-cookbook) | Create token pool for compression for existing SPL mints |
| [Merge Compressed Accounts](https://github.com/Lightprotocol/examples-zk-compression/tree/main/compressed-token-cookbook) | Consolidate multiple compressed accounts of the same mint into one |
| [Approve and Revoke Delegate Authority](https://github.com/Lightprotocol/examples-zk-compression/tree/main/compressed-token-cookbook) | Approve or revoke delegates for compressed token accounts |
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Verify the structure of the compressed-token-cookbook directory
curl -s "https://api.github.com/repos/Lightprotocol/examples-zk-compression/contents/compressed-token-cookbook" | jq -r '.[] | "\(.type): \(.name)"' 2>/dev/null | head -20

Repository: Lightprotocol/docs-v2

Length of output: 248


🏁 Script executed:

#!/bin/bash
# Also check the main directory to understand overall repo structure
curl -s "https://api.github.com/repos/Lightprotocol/examples-zk-compression" | jq '{name, description, topics}'

Repository: Lightprotocol/docs-v2

Length of output: 187


🏁 Script executed:

#!/bin/bash
# Check git history of this specific file to see if links changed
cd /tmp && git clone --depth 20 https://github.com/Lightprotocol/light-protocol.git 2>/dev/null
if [ -f light-protocol/snippets/overview-tables/compressed-tokens-guides-table.mdx ]; then
  cd light-protocol
  git log --oneline -10 snippets/overview-tables/compressed-tokens-guides-table.mdx
  echo "---"
  git show HEAD:snippets/overview-tables/compressed-tokens-guides-table.mdx 2>/dev/null | head -20
fi

Repository: Lightprotocol/docs-v2

Length of output: 47


🏁 Script executed:

#!/bin/bash
# Find the file and check its git history
find . -name "compressed-tokens-guides-table.mdx" -type f 2>/dev/null

Repository: Lightprotocol/docs-v2

Length of output: 126


🏁 Script executed:

#!/bin/bash
# Check git log for this file with content changes
git log --all --oneline --follow -- "snippets/overview-tables/compressed-tokens-guides-table.mdx" 2>/dev/null | head -10

Repository: Lightprotocol/docs-v2

Length of output: 142


🏁 Script executed:

#!/bin/bash
# Show recent versions of this file to compare
git show HEAD:snippets/overview-tables/compressed-tokens-guides-table.mdx 2>/dev/null | head -30
git show HEAD~1:snippets/overview-tables/compressed-tokens-guides-table.mdx 2>/dev/null | head -30

Repository: Lightprotocol/docs-v2

Length of output: 2534


🏁 Script executed:

#!/bin/bash
# Show the version before the "fix broken links" commit
git show 53a0e5c~1:snippets/overview-tables/compressed-tokens-guides-table.mdx 2>/dev/null | head -30

Repository: Lightprotocol/docs-v2

Length of output: 47


🏁 Script executed:

#!/bin/bash
# Show the diff from that commit to see what changed
git show 53a0e5c -- snippets/overview-tables/compressed-tokens-guides-table.mdx 2>/dev/null | head -50

Repository: Lightprotocol/docs-v2

Length of output: 2971


🏁 Script executed:

#!/bin/bash
# Search for previous references to these guide links or the compressed-token-cookbook
git log --all --oneline --grep="compressed-token" 2>/dev/null

Repository: Lightprotocol/docs-v2

Length of output: 47


🏁 Script executed:

#!/bin/bash
# Search the codebase for any other references to these specific guides
rg "Create Compressed Token Accounts|Mint Compressed Tokens|Transfer Compressed Tokens" --type mdx 2>/dev/null | head -20

Repository: Lightprotocol/docs-v2

Length of output: 47


🏁 Script executed:

#!/bin/bash
# Check if there's a README or documentation explaining the cookbook structure
git show HEAD:README.md 2>/dev/null | grep -i "compressed\|cookbook" | head -10

Repository: Lightprotocol/docs-v2

Length of output: 47


🏁 Script executed:

#!/bin/bash
# Search all commits mentioning "fix broken links" or the table file
git log --all --oneline -- snippets/overview-tables/compressed-tokens-guides-table.mdx 2>/dev/null

Repository: Lightprotocol/docs-v2

Length of output: 142


🏁 Script executed:

#!/bin/bash
# Check if there are any other files in the overview-tables directory
ls -la snippets/overview-tables/ 2>/dev/null

Repository: Lightprotocol/docs-v2

Length of output: 1375


🏁 Script executed:

#!/bin/bash
# Search for any MDX files that might reference the examples-zk-compression repo
rg "examples-zk-compression" --type mdx 2>/dev/null

Repository: Lightprotocol/docs-v2

Length of output: 47


🏁 Script executed:

#!/bin/bash
# Check the full file to see if there's any context or comments around it
cat -n snippets/overview-tables/compressed-tokens-guides-table.mdx

Repository: Lightprotocol/docs-v2

Length of output: 2611


🏁 Script executed:

#!/bin/bash
# Check other similar guide tables to see if they have differentiated links
cat -n snippets/overview-tables/compressed-tokens-advanced-guides-table.mdx

Repository: Lightprotocol/docs-v2

Length of output: 1300


🏁 Script executed:

#!/bin/bash
# Check another guide table
cat -n snippets/overview-tables/cookbook-guides-table.mdx

Repository: Lightprotocol/docs-v2

Length of output: 2959


🏁 Script executed:

#!/bin/bash
# Check the compressed-pdas table
cat -n snippets/overview-tables/compressed-pdas-guides-table.mdx

Repository: Lightprotocol/docs-v2

Length of output: 1744


🏁 Script executed:

#!/bin/bash
# Get the commit message and author details for context
git show --format=fuller 53a0e5c | head -20

Repository: Lightprotocol/docs-v2

Length of output: 658


All nine guide links point to the same GitHub directory, inconsistent with other guide tables.

This table differs from similar ones (cookbook-guides-table.mdx, compressed-pdas-guides-table.mdx) which use differentiated internal links for each guide. Every row here links to https://github.com/Lightprotocol/examples-zk-compression/tree/main/compressed-token-cookbook, making it impossible for users to navigate to the specific guide. Either create differentiated internal documentation pages (following the /compressed-tokens/guide-name pattern used in compressed-tokens-advanced-guides-table.mdx), or find and link to individual files or subdirectories within the GitHub cookbook for each guide.

🧰 Tools
🪛 LanguageTool

[locale-violation] ~7-~7: 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 | | [Create a Mint with Inter...

(AFTERWARDS_US)

🤖 Prompt for AI Agents
In `@snippets/overview-tables/compressed-tokens-guides-table.mdx` around lines 3 -
11, The table in compressed-tokens-guides-table.mdx currently points every row
to the same cookbook root; update each row so its link targets the specific
guide (either the internal docs route or the precise GitHub file/subdirectory)
instead of the shared URL—for example replace the URL for "Create Compressed
Token Accounts", "Mint Compressed Tokens", "Transfer Compressed Tokens", etc.,
with unique targets following the existing pattern used in other tables (e.g.
/compressed-tokens/create-compressed-token-accounts or the exact GitHub path to
that guide file); ensure each link text (the row headings) maps to its
corresponding specific doc or cookbook file so users can navigate to the
individual guides.

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.

1 participant