First-step friendly
Start with connection, player identity, and the account model before moving into transactions and gameplay systems.
Developer docs for Star Atlas SAGE C4 on the z.ink testnet, shaped for first integrations, debugging, and agent-friendly lookup.

Start here
Use this site to get from zero to useful quickly: connect to the right cluster, understand the core accounts, inspect generated client calls, and review transaction effects before you ask a wallet to sign anything.
Pick a path
Learn the major programs, account relationships, and the order most integrations should understand them.
Copy the right RPC, WebSocket, explorer, and commitment settings for the z.ink testnet environment.
How to summarize signers, writable accounts, simulations, and state changes before a wallet prompt.
Reference habits
Use read-only examples to verify account layout, authority expectations, and decoded state before transaction work.
See how SAGE gameplay, player identity, faction state, and support programs fit together at the account level.
Use the glossary and workflow pages as structured context for local scripts, agents, and code generation prompts.
The packages documented here are generated TypeScript bindings: typed adapters between your application and the Star Atlas programs running on z.ink. They know how to decode program accounts, derive addresses when the seeds are known, and build transaction instructions.
They are not a wallet, indexer, game server, or safety layer. Your application still decides which accounts to discover, what an action means to the player, which signer is allowed to authorize it, and whether a transaction should be sent.
Start with the Beginner Map for the account hierarchy, or use the runnable check below to prove that your code is connected to the correct deployment.
import { address, createSolanaRpc } from '@solana/kit';
export const sagePtrCluster = {
http: 'https://testnet-rpc.z.ink',
ws: 'wss://testnet-rpc.z.ink',
explorer: 'https://explorer.z.ink',
commitment: 'confirmed'
} as const;
const rpc = createSolanaRpc(sagePtrCluster.http);
const game = address('EKEj47SzaCjPM3m4T4vRXrrsVtkEmiNgPMMFye3AkXj4');
const sageProgram = address('C4SAgeKLgb3pTLWhVr6NRwWyYFuTR7ZeSXFrzoLwfMzF');
const { value: account } = await rpc.getAccountInfo(game, {
commitment: sagePtrCluster.commitment,
encoding: 'base64',
dataSlice: { offset: 0, length: 0 }
}).send();
if (!account || account.owner !== sageProgram) {
throw new Error('C4 Game account not found on this cluster');
}This confirms that the known C4 Game account exists on z.ink and belongs to the expected SAGE program without downloading its roughly 2.5 MB data buffer. Continue with Reading Live Game State to discover and decode gameplay accounts.
Community Created
This documentation is maintained by the community and tracks the live SAGE C4 PTR on the z.ink testnet as closely as possible.