Code JSON50 - 50% off your first month
Back to Blog
guidesuijson-rpcmigrationgrpc

The Sui JSON-RPC Shutdown: What Breaks, When, and How to Keep Your App Running

Sui's public JSON-RPC endpoints shut down in July 2026 - testnet July 8, mainnet two weeks later. Here's exactly what stops working, the fastest fix, and how to migrate to gRPC or GraphQL on your own schedule.

argos.sui, CofounderJuly 7, 20265 min read

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:

  • Testnet: JSON-RPC on Sui Foundation full nodes (including fullnode.testnet.sui.io) goes down July 8, 2026, noon EST.
  • Mainnet: about two weeks later, with everything fully deactivated by July 31, 2026.
  • Fastest fix: point your existing JSON-RPC client at Inodra's gateway - a drop-in URL swap that keeps working after the shutdown.
  • Right long-term move: migrate to gRPC or GraphQL, which are Sui's supported interfaces going forward.

What exactly is shutting down

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.

The five-minute fix: swap the URL

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.

The real migration: gRPC or GraphQL

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 GrpcWebFetchTransport instead (see the gRPC gateway docs).

And what you gain over JSON-RPC once you're there:

  • Streaming instead of polling - subscribe to checkpoints, events, and object changes in real time
  • Type safety - generated clients catch mistakes at compile time
  • Performance - binary Protocol Buffers instead of JSON over HTTP
  • Full history - on Inodra, the same gRPC endpoint serves live state and archival data back to genesis, with automatic routing

Our JSON-RPC to gRPC migration guide has the complete method mapping (sui_getObjectLedgerService/GetObject, suix_getBalanceStateService/GetBalance, and so on), before/after code for the common operations, and the gotchas we've seen teams hit.

A sane migration checklist

  1. Today: swap your RPC URL so nothing breaks when your network's date hits.
  2. This month: wrap your data access behind one internal interface, so the transport becomes an implementation detail.
  3. Next: move read paths to gRPC (or GraphQL for complex filtering), one at a time, with parity checks against the JSON-RPC responses.
  4. Last: move transaction execution, then delete the JSON-RPC dependency.

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.

Ready to build on Sui?

Get started with Inodra's blockchain infrastructure today.