Sui's public JSON-RPC endpoints shut down in July 2026 - testnet July 8, mainnet by July 31. What breaks, the fastest fix, and how to migrate.
Sui is deactivating its public JSON-RPC endpoints in stages during July 2026. If your app talks to fullnode.mainnet.sui.io or fullnode.testnet.sui.io over JSON-RPC, it will stop working. This post covers what breaks and when, the five-minute fix, and the proper migration path.
TL;DR:
fullnode.testnet.sui.io) goes down July 8, 2026, noon EST.Sui deprecated JSON-RPC in favor of gRPC and GraphQL. The July shutdown removes JSON-RPC from Sui Foundation public nodes - the free endpoints most tutorials, scripts, and quite a few production apps still use. If you see errors from fullnode.testnet.sui.io this week, this is why.
What this does not mean: JSON-RPC disappearing from the ecosystem overnight. The shutdown applies to Sui's public nodes - providers running their own infrastructure can keep serving the interface, and Inodra does. If you're weighing your options, we compared every provider on Mysten's official list in Best Sui RPC Providers in 2026.
If you need your app working today, change the RPC URL and add an API key. Everything else stays the same - same methods, same responses, works with @mysten/sui and existing tooling:
import { SuiJsonRpcClient, JsonRpcHTTPTransport } from '@mysten/sui/jsonRpc'
const transport = new JsonRpcHTTPTransport({
// was: https://fullnode.mainnet.sui.io
url: 'https://mainnet-api.inodra.com/v1/jsonrpc',
rpc: { headers: { 'x-api-key': process.env.INODRA_API_KEY! } },
})
const client = new SuiJsonRpcClient({ transport, network: 'mainnet' })
JSON-RPC keeps working on Inodra nodes beyond July 31 - we will continue to support it past Sui's deprecation, on both mainnet and testnet, and any future change to its availability will be announced well in advance. The free tier (1M credits/month) covers development and small workloads without a credit card.
That buys you time. It shouldn't be the end state.
Sui's supported data interfaces going forward are gRPC (fast, typed, streaming - the default choice for backends and indexers) and GraphQL (flexible queries, complex filtering). The same Inodra API key works for all three protocols, so you can migrate incrementally - move reads to gRPC one call site at a time while JSON-RPC handles the rest.
Here's the same balance lookup on gRPC with the Sui TypeScript SDK 2.0:
import { SuiGrpcClient } from '@mysten/sui/grpc'
import { GrpcTransport } from '@protobuf-ts/grpc-transport'
import { ChannelCredentials } from '@grpc/grpc-js'
const transport = new GrpcTransport({
host: 'mainnet-grpc.inodra.com:443',
channelCredentials: ChannelCredentials.createSsl(),
meta: { 'x-api-key': process.env.INODRA_API_KEY! },
})
const client = new SuiGrpcClient({ network: 'mainnet', transport })
const { balance } = await client.getBalance({
owner: '0xabc...',
coinType: '0x2::sui::SUI',
})
console.log(balance.balance) // stringified integer, e.g. '31018584912'
Native gRPC runs on Node.js - for browser apps, use gRPC-Web with
GrpcWebFetchTransportinstead (see the gRPC gateway docs).
And what you gain over JSON-RPC once you're there:
Our JSON-RPC to gRPC migration guide has the complete method mapping (sui_getObject → LedgerService/GetObject, suix_getBalance → StateService/GetBalance, and so on), before/after code for the common operations, and the gotchas we've seen teams hit.
White-glove migration support is included in every paid plan - we help move your stack off JSON-RPC directly, with architecture review, method mapping for your specific call sites, and hands-on support through the switch to gRPC or GraphQL. Reach us at [email protected] or in our Discord; if you're mid-migration and something behaves differently than you expect, ask - we've mapped most of the edge cases by now.
All 13 providers on Mysten Labs' official Sui gRPC list compared: GraphQL, archival, JSON-RPC continuity after the July 2026 shutdown, streaming, webhooks.
Production gRPC and GraphQL on Sui mainnet, backed by full archival history.
Real-time Sui events without running an indexer: webhooks, SSE, and WebSockets with server-side filtering. React to on-chain activity in milliseconds.