DEV Community

OnFinality
OnFinality

Posted on Originally published at onfinality.io

Solana Free Node: What You Get and When to Upgrade

Quick recommendation: is a free Solana node enough for your workload?

Most developers searching for a free Solana node want one of three things: a URL to paste into a wallet, a cheap way to run a script or bot, or a way to test an idea before paying for infrastructure. The right choice depends on which of those you are doing.

Your situation Free Solana node is usually What to do next
Learning, tutorials, one-off scripts Fine Use a shared endpoint and keep request volume low
Local wallet or devnet testing Fine, but use devnet Point your wallet at a Solana devnet endpoint
Small dApp with a few hundred users Risky Measure error rates, then move to a managed plan
Trading bot, indexer, or high-frequency reads Not suitable Evaluate a dedicated Solana node
Production app with paying users Not suitable Use a managed or dedicated RPC provider

If you are still exploring, a free endpoint is the fastest way to get moving. If you are shipping to real users, treat free access as a temporary bridge, not a foundation.

What "free Solana node" actually means

Solana does not hand out free nodes the way a cloud provider hands out free tiers. What people call a free Solana node is almost always one of these:

  • A public RPC endpoint run by a foundation, a provider, or a community group.
  • A shared RPC tier that is free up to some request volume, then rate-limited or billed.
  • A self-hosted validator or RPC node you run on your own hardware, where "free" only means you are not paying a provider.

Each option has different tradeoffs. A public endpoint is the easiest to start with, but you share it with everyone else who found the same URL. A self-hosted node gives you control, but Solana RPC nodes have real hardware requirements, and syncing and maintaining one is ongoing work.

A free endpoint is best understood as a shared resource. You get access, but you do not get a capacity guarantee, a latency guarantee, or a support channel.

Solana RPC settings you need before you connect

Before you paste any URL into a wallet or a script, confirm the network and the transport. Solana mainnet and devnet are separate clusters with separate state, and a wallet pointed at the wrong one will look broken even when the endpoint is healthy.

Setting Solana mainnet Solana devnet
Cluster Mainnet Beta Devnet
Native currency SOL (9 decimals) SOL (9 decimals, no real value)
Typical use Production reads and writes Testing, faucet-funded experiments
Explorer https://explorer.solana.com https://explorer.solana.com (devnet toggle)
Transport HTTP and WebSocket HTTP and WebSocket

OnFinality exposes Solana mainnet over both HTTP and WebSocket. The public endpoint is:

https://solana.api.onfinality.io/public
wss://solana.api.onfinality.io/public-ws
Enter fullscreen mode Exit fullscreen mode

For devnet work, use the dedicated Solana Devnet RPC page rather than pointing test code at mainnet. Mixing the two is one of the most common causes of confusing failures.

Testing a free Solana endpoint in under a minute

You do not need an SDK to check whether an endpoint is alive and returning sane data. A single JSON-RPC call tells you a lot.

curl https://solana.api.onfinality.io/public \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "getLatestBlockhash",
    "params": [{"commitment": "confirmed"}]
  }'
Enter fullscreen mode Exit fullscreen mode

A healthy response includes a recent blockhash and a lastValidBlockHeight. If the call times out, returns a rate-limit error, or returns a blockhash that is far behind the current slot, the endpoint is either overloaded or not keeping up.

Two more calls are worth running before you commit to an endpoint:

# Check the current slot and whether the node is caught up
curl https://solana.api.onfinality.io/public \
  -X POST -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"getSlot","params":[{"commitment":"confirmed"}]}'

# Check a wallet balance
curl https://solana.api.onfinality.io/public \
  -X POST -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"getBalance","params":["<WALLET_ADDRESS>",{"commitment":"confirmed"}]}'
Enter fullscreen mode Exit fullscreen mode

If getSlot returns a value that keeps climbing and getLatestBlockhash returns fresh data, the endpoint is usable for basic reads. That is the floor, not the ceiling.

Where free Solana endpoints break down

Free and public endpoints tend to fail in predictable ways. Knowing the symptoms helps you decide whether to retry, reconfigure, or move to a paid plan.

Symptom Likely cause What to try
429 responses Shared rate limit hit Reduce request rate, batch calls, or move to a managed plan
Timeouts on getProgramAccounts Heavy scan on a shared node Add filters, paginate, or use a dedicated node
WebSocket disconnects Shared connection limits Reconnect with backoff, or use a dedicated WebSocket endpoint
Stale blockhash errors Node lagging behind the tip Retry with a fresh blockhash, or switch endpoints
Inconsistent results across calls Load balancing across uneven nodes Pin to a single endpoint or use a provider with consistent state

getProgramAccounts deserves special attention. It is one of the most expensive Solana RPC calls, and on a shared endpoint it is often the first thing to fail. If your app depends on it, plan for a dedicated node or a provider that supports it reliably.

When to move from free to managed or dedicated

There is no single request-per-second number that applies to every app, but there are clear signals that a free endpoint is no longer the right fit:

  • Your users see failed transactions that succeed on retry.
  • Your logs show a rising share of 429 or timeout responses.
  • You need WebSocket subscriptions that stay open for long periods.
  • You rely on archive data or historical queries.
  • You need a support channel when something breaks.

At that point, the decision is between a managed shared plan and a dedicated node. Managed shared plans are cheaper and fine for moderate traffic. Dedicated nodes give you isolated capacity, which matters for trading bots, indexers, and apps with bursty load. You can compare options on the RPC pricing page and review supported RPC networks if you operate across chains.

OnFinality offers both managed RPC API access and dedicated nodes, so you can start shared and move to isolated capacity without changing your integration pattern.

Configuring a wallet or app to use a Solana endpoint

Most Solana tooling accepts a cluster URL. In a wallet, you usually add a custom RPC endpoint and select it. In code, you pass the URL to your client.

import { Connection, PublicKey, clusterApiUrl } from "@solana/web3.js";

// Free/shared endpoint for light reads
const connection = new Connection(
  "https://solana.api.onfinality.io/public",
  { commitment: "confirmed" }
);

const balance = await connection.getBalance(
  new PublicKey("<WALLET_ADDRESS>")
);
console.log("lamports:", balance);
Enter fullscreen mode Exit fullscreen mode

For WebSocket subscriptions, use the matching WebSocket URL:

const ws = new WebSocket("wss://solana.api.onfinality.io/public-ws");

ws.onopen = () => {
  ws.send(JSON.stringify({
    jsonrpc: "2.0",
    id: 1,
    method: "slotSubscribe",
    params: []
  }));
};

ws.onmessage = (event) => {
  console.log("slot update:", event.data);
};
Enter fullscreen mode Exit fullscreen mode

Keep the commitment level consistent across your app. Mixing processed, confirmed, and finalized in the same flow is a common source of confusing state bugs.

A simple way to monitor endpoint health

If you are running on a free endpoint, monitor it so you know when it stops being good enough. A lightweight probe that runs every minute is enough to catch most problems.

async function probe(url) {
  const start = Date.now();
  try {
    const res = await fetch(url, {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({
        jsonrpc: "2.0",
        id: 1,
        method: "getSlot",
        params: [{ commitment: "confirmed" }]
      })
    });
    const latency = Date.now() - start;
    const body = await res.json();
    return { ok: res.ok, latency, slot: body.result };
  } catch (err) {
    return { ok: false, error: String(err) };
  }
}
Enter fullscreen mode Exit fullscreen mode

Track three things over time: success rate, median latency, and slot freshness. When success rate drops or slot freshness lags, that is your signal to change plans.

Key Takeaways

  • A "free Solana node" is almost always a shared public endpoint or a free tier, not a private node.
  • Free endpoints are fine for learning, devnet testing, and low-volume scripts.
  • They break down under load, especially for getProgramAccounts, long-lived WebSocket subscriptions, and bursty traffic.
  • Test any endpoint with getLatestBlockhash, getSlot, and getBalance before relying on it.
  • Move to a managed or dedicated Solana RPC when users start seeing failed transactions or you need support.
  • OnFinality provides Solana mainnet over HTTP and WebSocket, plus dedicated nodes for isolated capacity.

Frequently Asked Questions

Is there a truly free Solana node?

There are free-to-use public endpoints and free tiers, but they are shared. You are not getting a private node; you are getting access to a shared one with no capacity guarantee.

Can I run a Solana RPC node for free?

You can run your own node, but "free" only means you are not paying a provider. Solana RPC nodes need significant CPU, RAM, disk, and bandwidth, plus ongoing maintenance and monitoring.

Why does my free Solana endpoint return 429 errors?

429 responses usually mean you hit a shared rate limit. Reduce your request rate, batch calls where possible, and consider a managed plan if the limit keeps blocking you.

Should I use a free endpoint for a trading bot?

Generally no. Bots need consistent latency and reliable WebSocket streams. A shared endpoint can introduce delays and disconnects that directly affect execution.

How do I switch from a free endpoint to a paid one?

In most cases you change the RPC URL in your configuration or wallet and keep the same client code. Test on a staging environment first, then roll out.

Does OnFinality offer a free Solana endpoint?

OnFinality provides a public Solana endpoint for light use, plus managed and dedicated options. Check the Solana network page and RPC pricing for current details.

Related resources

Originally published at OnFinality.

Top comments (0)