TLDR:
- Syndica has announced plans to retire their Solana RPC and ChainStream APIs.
- Migrating RPC endpoints is straightforward—swap the URL.
- ChainStream users should migrate to Yellowstone gRPC for streaming, which offers lower latency and is the Solana ecosystem standard.
- Chainstack offers four node types: Global Node, Unlimited Node, Dedicated Node, and Trader Node—choose based on your workload.
Overview
This guide helps you migrate from Syndica to Chainstack for your Solana infrastructure needs. Whether you’re using Syndica’s standard RPC or their ChainStream API, we’ll show you how to switch with minimal code changes.
Choosing the right Chainstack node type
Chainstack offers four node types, each optimized for different use cases.
Syndica to Chainstack tier mapping
| Syndica tier | Recommended Chainstack option | ChainStream replacement | Why |
|---|
| Standard (free) | Global Node on Developer plan | WebSocket subscriptions | Similar free tier with room to grow |
| Scale | Global Node on Growth plan | Yellowstone gRPC (add-on) | Flexible scaling with real-time streaming |
| Scale (high volume) | Global Node with Unlimited add-on | Yellowstone gRPC (add-on) | Flat-fee unlimited requests |
| HyperScale (custom) | Dedicated Node or Trader Node | Yellowstone gRPC on Dedicated only | Isolated infrastructure or trading-optimized |
Yellowstone gRPC requires Growth plan or higher. Developer plan users can use standard WebSocket subscriptions for real-time data, or upgrade to Growth to access Yellowstone gRPC.
See Chainstack pricing for current rates.
Node type comparison
| Node type | Distribution | Billing | Yellowstone gRPC | Best for |
|---|
| Global Node | Geo-distributed | Per request (plan quota) | Yes (add-on) | General use, variable load, spikes |
| Unlimited Node | Geo-distributed | Flat monthly fee | Yes (add-on) | Predictable steady usage, cost control |
| Dedicated Node | Geo-specific | Compute hours + storage | Yes (customizable) | Custom solutions, isolation, compliance |
| Trader Node | Geo-specific | Per request (plan quota) | No | Trading bots, snipers |
Global Node
What it is: A load-balanced endpoint that automatically routes requests to the nearest healthy location.
Key features:
- Deploys in seconds
- Automatic failover if a node underperforms
- Warp transactions support via bloXroute
- Yellowstone gRPC available as add-on (mainnet)
Best for: General-purpose applications, development, variable workloads.
Unlimited Node
What it is: An add-on that converts any node to flat-fee, unlimited requests at a fixed RPS tier.
Key features:
- RPS tiers: 25, 100, 250, 500, 1000 requests per second
- Zero plan quota consumption
- No overage charges—you get rate-limited instead of cut off
- Predictable monthly cost
Best for: Production applications with steady traffic, cost-conscious teams.
Dedicated Node
What it is: Exclusive infrastructure deployed just for you, not shared with other customers.
Key features:
- Fully isolated compute resources
- Debug and trace APIs enabled
- Highly customizable configuration
- Full or Archive modes available
- Yellowstone gRPC available with custom limits
Best for: Enterprise applications, compliance requirements, custom configurations.
Requires: Pro, Business, or Enterprise subscription.
Trader Node
What it is: Regional endpoints you deploy in a specific location for lowest latency to your app or bot, and fastest transaction landing.
Key features:
- Warp transactions via bloXroute (routes directly to leader on Solana)
- Geo-specific deployment (US, Europe, Asia)
- Full, Archive, or Warp modes
- Dedicated gateways available on Enterprise
Best for: Trading bots, snipers, latency-sensitive operations.
Common migration scenarios
Simple RPC application
If you’re using Syndica for standard RPC calls:
- Sign up at console.chainstack.com
- Deploy a Solana Global Node
- Replace your Syndica endpoint URL with your Chainstack endpoint
ChainStream user
If you were using ChainStream for real-time data:
- Deploy a Solana Global Node
- Enable the Yellowstone gRPC add-on
- Update your streaming code (see examples below)
For lighter use cases, standard WebSocket subscriptions may be sufficient.
Trading bot
If you’re running a trading bot and need fast transaction landing with real-time data:
- Deploy a Solana Global Node
- Enable Warp transactions for faster transaction landing
- Enable Yellowstone gRPC for real-time data
High-volume production application
If you have predictable, steady traffic and want cost control:
- Deploy a Solana Global Node
- Add the Unlimited Node add-on at your required RPS tier
Regional latency requirements
If you need your node deployed in a specific region for lowest latency to your app:
- Deploy a Trader Node in your preferred region (US, Europe, or Asia)
- Enable Warp transactions for fast transaction landing
Note: Yellowstone gRPC is not available on Trader Nodes. If you need both regional deployment and real-time streaming, deploy a Global Node alongside your Trader Node.
Enterprise or custom configuration
If you need isolated infrastructure, custom limits, or compliance requirements:
- Deploy a Dedicated Node
- Contact Chainstack for custom configuration options
Dedicated Nodes support Yellowstone gRPC with customizable limits.
RPC endpoint migration
Migrating your RPC endpoint is the simplest part—it’s essentially a URL swap.
Navigate to your node credentials in the Chainstack console and copy the full endpoint URL.
Using solana-py
from solana.rpc.api import Client
# Before (Syndica)
# client = Client("https://solana-mainnet.api.syndica.io/api-key/YOUR_SYNDICA_KEY")
# After (Chainstack)
client = Client("YOUR_CHAINSTACK_ENDPOINT")
# Your existing code works unchanged
response = client.get_slot()
print(f"Current slot: {response.value}")
Using @solana/web3.js
import { Connection } from "@solana/web3.js";
// Before (Syndica)
// const connection = new Connection("https://solana-mainnet.api.syndica.io/api-key/YOUR_SYNDICA_KEY");
// After (Chainstack)
const connection = new Connection("YOUR_CHAINSTACK_ENDPOINT");
// Your existing code works unchanged
const slot = await connection.getSlot();
console.log(`Current slot: ${slot}`);
ChainStream to Chainstack streaming migration
Syndica’s ChainStream was a WebSocket-based streaming service that aggregated data from multiple validators. Chainstack offers two alternatives depending on your needs:
Option 1: Standard WebSocket subscriptions
For lighter streaming use cases like notifications, alerts, or monitoring specific accounts, standard Solana WebSocket subscriptions work well.
| ChainStream subscription | Chainstack WebSocket equivalent |
|---|
transactionsSubscribe | logsSubscribe |
slotUpdatesSubscribe | slotSubscribe |
blockSubscribe | blockSubscribe (use with caution at scale) |
| Account monitoring | accountSubscribe |
logsSubscribe returns transaction logs and program mentions, not full transaction data. If you need complete transaction details, fetch them with getTransaction after receiving a log, or use Yellowstone gRPC for full transaction streaming.
ChainStream WebSocket URL:
wss://solana-mainnet.chainstream.syndica.io/api-key/YOUR_SYNDICA_KEY
Chainstack WebSocket URL:
YOUR_CHAINSTACK_WSS_ENDPOINT
where YOUR_CHAINSTACK_WSS_ENDPOINT is your node WSS endpoint. See node access details.
Example: Migrating transaction monitoring
import asyncio
import websockets
import json
# Chainstack WebSocket endpoint
CHAINSTACK_WSS = "YOUR_CHAINSTACK_WSS_ENDPOINT"
async def monitor_logs():
async with websockets.connect(CHAINSTACK_WSS) as ws:
# Subscribe to logs mentioning a specific program
subscribe_msg = {
"jsonrpc": "2.0",
"id": 1,
"method": "logsSubscribe",
"params": [
{"mentions": ["YOUR_PROGRAM_ID"]},
{"commitment": "confirmed"}
]
}
await ws.send(json.dumps(subscribe_msg))
# Process incoming logs
while True:
response = await ws.recv()
data = json.loads(response)
if "params" in data:
print(f"Log received: {data['params']['result']}")
if __name__ == "__main__":
asyncio.run(monitor_logs())
For trading bots, indexers, or any application that needs the fastest possible data, Yellowstone gRPC is the better choice. It streams data directly from validator memory via gRPC, offering lower latency than WebSocket-based solutions. Yellowstone gRPC is available on mainnet only.
See Chainstack pricing for Yellowstone gRPC rates and tier details.
Enabling Yellowstone gRPC
Yellowstone gRPC is available as an add-on for Solana Global Nodes on mainnet, starting from the Growth plan.
- Deploy a Solana Global Node in the Chainstack console
- Click Add-ons > Yellowstone gRPC Geyser Plugin > Install
- Your gRPC endpoint and token will appear in the node credentials. See node access details.
Example: Streaming with Yellowstone gRPC
See our detailed guides:
For more Yellowstone gRPC examples, see:
import Client, { CommitmentLevel } from "@triton-one/yellowstone-grpc";
const ENDPOINT = "CHAINSTACK_GEYSER_URL";
const TOKEN = "CHAINSTACK_GEYSER_TOKEN";
async function main() {
const client = new Client(ENDPOINT, TOKEN);
await client.connect();
const stream = await client.subscribe();
// Handle incoming data
stream.on("data", (data) => {
if (data.transaction) {
console.log("Transaction received:", data.transaction.transaction.signature);
}
});
// Subscribe to transactions for a specific program
await stream.write({
transactions: {
mySubscription: {
accountInclude: ["YOUR_PROGRAM_ID"],
accountExclude: [],
accountRequired: [],
},
},
commitment: CommitmentLevel.CONFIRMED,
});
// Keep connection alive
setInterval(async () => {
await stream.write({ ping: { id: 1 } });
}, 10000);
}
main();
Next steps