# 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 by July 31. What breaks, the fastest fix, and how to migrate.

Published 2026-07-07 · argos.sui, Cofounder · https://inodra.com/blog/sui-json-rpc-shutdown-survival-guide

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. If you're weighing your options, we compared every provider on Mysten's official list in [Best Sui RPC Providers in 2026](/blog/best-sui-rpc-providers).

## 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:

```typescript
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](https://inodra.com/pricing) (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:

```typescript
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](https://docs.inodra.com/gateways/grpc)).

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](https://docs.inodra.com/guides/json-rpc-to-grpc) 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.

## 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 [support@inodra.com](mailto:support@inodra.com) or in our [Discord](https://dc.gg/inodra); if you're mid-migration and something behaves differently than you expect, ask - we've mapped most of the edge cases by now.

## Related posts

- [Best Sui RPC Providers in 2026](/blog/best-sui-rpc-providers) - every provider on Mysten's official list compared on gRPC, GraphQL, archival and JSON-RPC continuity
- [gRPC and GraphQL on Sui Mainnet](/blog/grpc-graphql-mainnet) - the production gateways to migrate to
- [Indexer as a Service: Real-Time Sui Events](/blog/indexer-as-a-service) - replace polling with webhooks and Warp streams