How to create and configure the Aptos client (Aptos, AptosConfig) in @aptos-labs/ts-sdk. Covers Network, fullnode/indexer/faucet URLs, singleton pattern, and Bun compatibility. Triggers on: 'Aptos client', 'AptosConfig', 'SDK client', 'client setup', 'new Aptos(', 'Network.TESTNET', 'Network.MAINNET'.
68
85%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Guide creation and configuration of the Aptos client and AptosConfig in @aptos-labs/ts-sdk. One client instance is used for all read/write and account/transaction APIs.
new Aptos(config) for the same network.AptosConfig – use Network.TESTNET or Network.MAINNET (or custom endpoints).process.env.APTOS_NETWORK or import.meta.env.VITE_APP_NETWORK.Network.TESTNET as default for development – devnet resets frequently.Network enum.network when using custom endpoints – in v5.2+ use Network.CUSTOM with custom URLs.import { Aptos, AptosConfig, Network } from "@aptos-labs/ts-sdk";
const config = new AptosConfig({ network: Network.TESTNET });
const aptos = new Aptos(config);// Predefined networks
const devnet = new AptosConfig({ network: Network.DEVNET });
const testnet = new AptosConfig({ network: Network.TESTNET });
const mainnet = new AptosConfig({ network: Network.MAINNET });
// Custom endpoints (network is REQUIRED in v5.2+)
const custom = new AptosConfig({
network: Network.CUSTOM,
fullnode: "https://your-fullnode.example.com/v1",
indexer: "https://your-indexer.example.com/v1/graphql",
faucet: "https://your-faucet.example.com",
});// lib/aptos.ts or similar
import { Aptos, AptosConfig, Network } from "@aptos-labs/ts-sdk";
function getNetwork(): Network {
const raw =
typeof process !== "undefined" ? process.env.APTOS_NETWORK : import.meta.env?.VITE_APP_NETWORK;
switch (raw) {
case "mainnet":
return Network.MAINNET;
case "devnet":
return Network.DEVNET;
default:
return Network.TESTNET;
}
}
const config = new AptosConfig({ network: getNetwork() });
export const aptos = new Aptos(config);const config = new AptosConfig({
network: Network.TESTNET,
fullnode: "https://fullnode.testnet.aptoslabs.com/v1", // override default
indexer: "https://indexer.testnet.aptoslabs.com/v1/graphql",
faucet: "https://faucet.testnet.aptoslabs.com",
pepper: "https://...", // keyless pepper service
prover: "https://...", // keyless prover
});
const aptos = new Aptos(config);// Disable HTTP/2 when using Bun (recommended)
const config = new AptosConfig({
network: Network.TESTNET,
clientConfig: { http2: false },
});
const aptos = new Aptos(config);After construction, use the same aptos instance for:
aptos.getAccountInfo(), aptos.getBalance(), aptos.getAccountResources(), etc.aptos.transaction.build.simple(), aptos.signAndSubmitTransaction(), aptos.waitForTransaction().aptos.view().aptos.fundAccount() (devnet/testnet).aptos.coin.*, aptos.digitalAsset.*, aptos.fungibleAsset.*, aptos.object.*, aptos.ans.*, aptos.staking.*.| Mistake | Correct approach |
|---|---|
| Creating Aptos in every function | One singleton; pass aptos or import from shared module |
| Using devnet for persistent dev | Prefer testnet; devnet resets |
| Custom URLs without Network.CUSTOM | Set network: Network.CUSTOM when providing fullnode/indexer/faucet |
| Forgetting http2: false on Bun | Set clientConfig: { http2: false } for Bun |
src/api/aptos.ts, src/api/aptosConfig.ts919362b
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.