Geyser Plugins
Geyser plugins let Agave validators stream account and transaction updates to external sinks for indexing without polling JSON-RPC.
Search across all documentation pages
Geyser plugins let Agave validators stream account and transaction updates to external sinks for indexing without polling JSON-RPC.
Quick-reference recipe card - copy-paste ready.
{
"libpath": "/path/to/libgeyser_plugin.so",
"accounts_selector": { "owners": ["YOUR_PROGRAM_ID"] },
"transaction_selector": { "mentions": ["YOUR_PROGRAM_ID"] }
}agave-validator --geyser-plugin-config geyser.json ...When to reach for this:
# geyser.json (illustrative - match your plugin's schema)
cat > geyser.json <<'EOF'
{
"libpath": "/opt/geyser/libmy_sink.so",
"kafka": { "bootstrap.servers": "localhost:9092", "topic": "solana-events" },
"accounts_selector": {
"owners": ["YOUR_PROGRAM_ID"]
}
}
EOF
agave-validator \
--ledger /data/ledger \
--geyser-plugin-config geyser.json \
--rpc-port 8899What this demonstrates:
.so loads into validator process space.| Concern | Plugin | Your indexer |
|---|---|---|
| Filtering | owner/mention selectors | business logic |
| Durability | forward to queue | DB commits |
| Replay | slot checkpoints | idempotent upserts |
| Upgrades | versioned .so | schema migrations |
# Verify plugin loads at validator start - check logs for geyser init lines
tail -f /data/validator.log | grep -i geyser| Alternative | Use When | Don't Use When |
|---|---|---|
| Yellowstone gRPC | Managed streaming | You already operate validator |
| Webhooks | HTTP push simplicity | Ultra-low latency needs |
| RPC backfill | Small history | Live high-volume programs |
| DAS API | Asset reads only | Arbitrary instruction indexing |
For custom plugins yes; managed Yellowstone gives gRPC without operating stake.
Rust/C++ .so dynamic libraries per Agave geyser plugin interface.
Yes - transaction_selector with mentions of program IDs.
Replay from last committed slot stored in your DB using RPC backfill gap fill.
Plugin receives full account data on writes relevant to selector - plan bandwidth.
Run test validator with plugin against devnet ledger clone for lighter load.
Yellowstone exposes Geyser-style streams over gRPC to remote clients.
Plugin runs inside validator - supply chain critical; audit .so sources.
Common pattern - plugin produces; consumers scale horizontally.
Self-host plugin ops heavy - provider webhooks/Yellowstone cheaper for small teams.
Stack versions: This page was written for Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, anchor-lang 0.32.1, Rust 1.91.1, @solana/kit 7.0.0, Surfpool 0.12.0, and LiteSVM 0.6.x.
Reviewed by Chris St. John·Last updated Jul 16, 2026