Skip to main content

Quickstart

This 5-minute tutorial shows you how to grab a Solana Squid SDK indexer template. At the end you’ll have a complete blockchain indexer that fetches, decodes, and serves data on Whirlpool swaps on the USDC-SOL pair.
The legacy Solana gateway is being retired — move to Portal now. If your squid reads Solana data through the v2 archive gateway (.setGateway('https://v2.archive.subsquid.io/network/solana-mainnet')), migrate it to a Portal data source as soon as possible. From June 1, 2026 that gateway keeps only the last 30 days of data, and it will be retired entirely later this year. Portal serves the full Solana history and is where ~95% of traffic already lands. Follow Migrate a squid to Portal. New squids from this quickstart already use Portal — no action needed.

What you’ll get

Your Solana indexer (squid) will:
  • Fetch all historical USDC-SOL swaps made on Whirlpool
  • Save the data to a local PostgreSQL database
  • Start a GraphQL server with a rich API to query the indexed swaps
This tutorial focuses on Solana. For other chains, see the EVM Quickstart or Substrate Quickstart.

Prerequisites

Before you begin, ensure you have:
1

(Optional) Install Squid CLI

Install the Squid CLI globally:
Verify installation by running sqd --version
Squid CLI is a multi-purpose utility tool for scaffolding and managing indexers, both locally and in SQD Cloud.
2

Scaffold the indexer project

Create a new squid project from the Whirlpool USDC-SOL swaps example:
or, if you skipped the installation of Squid CLI
3

Inspect the project structure

Explore the project structure:
Key files explained: - src/abi - Utility modules generated from the Whirlpool program IDLs (src/abi/whirlpool) and handwritten (src/abi/token-program.ts) used in filtering and decoding of program data - src/model/ - TypeORM model classes used in database operations - main.ts - Main executable containing data retrieval configuration and processing logic
The main.ts file first defines the data source object and configures its data retrieval options:
main.ts
Next, main.ts defines the data processing and storage logic. Data processing is defined in the batch handler, the callback that the run() function receives as its final argument:
main.ts
4

Install dependencies and build

Install dependencies and build the project:
Verify the build completed successfully by checking for the lib/ directory.
5

Start the database and processor

The processor continuously fetches data, decodes it, and stores it in PostgreSQL. All logic is defined in main.ts and is fully customizable.First, start a local PostgreSQL database (the template includes a Docker Compose file):
The processor connects to PostgreSQL using connection parameters from .env. Ensure the database is running before proceeding.
Apply database migrations:
Then start the processor:
The indexer is now running and will begin processing blocks.
6

Start the GraphQL API

Start the GraphQL API to serve the transfer data:
7

Query the data

You can now query your indexed data! Check it out at the GraphiQL playground at localhost:4350/graphql.