Using with AI
The fastest way to get an AI coding agent productive on a Pipes SDK project is to install the official Pipes SDK Agent Skill:- Portal MCP server — 29 tools for querying blocks, transactions, logs, instructions, and analytics across 225+ datasets. No API key.
- Documentation MCP server — search and retrieve these docs from inside the agent.
llms.txt (index) and llms-full.txt (full content) files are kept in sync with the site. See the AI Development overview for the full menu.
Scaffolding with Pipes CLI
pipes-cli is a work in progress.Prerequisites
- Node.js 22.15+
pnpm- Docker (for the bundled PostgreSQL container)
Initialize the project
Run the CLI in the directory where you want the project folder to land:pnpm for now), sink (please use ClickHouse or Postgres), network type, network, and template; then installs dependencies and writes a runnable project.
You can supply a JSON config instead of filling the prompts manually. Here’s the configuration for Orca Whirlpool swap instructions mentioned above:
--config also accepts a path to a JSON file.
To inspect the full config schema run
Run the pipeline
The generated project ships with adocker-compose.yml that brings up the sink database and the pipeline together:
orca_whirlpool_swap table within a minute.
What was generated
The project layout:src/index.ts. The decoder block defines what to extract + a light transform:
swap instructions on the Orca Whirlpool program. enrichEvents (from src/utils/) reshapes each decoded instruction into a row matching the Drizzle table. See the Pipe anatomy and Handling instructions guides for more info on instructionDecoder().
The main() function wires the decoder to a drizzleTarget:
id is a per-pipeline identifier — keep it stable so the target’s cursor survives restarts. See solanaPortalSource for the full source API and Pipe anatomy for how the pieces fit together.
Other examples
Token balances
Token balances
The
tokenBalances template indexes pre/post token balances directly from blocks — no program ID needed. The generated pipe uses solanaQuery() instead of an instruction decoder.tokenBalances — plus the open-ended custom template shown at the top of the page.