Getting Started
Install starskiff and boot your first Cosmos SDK node
Overview
starskiff spawns real Cosmos SDK nodes as child processes for integration tests — no Kubernetes, just the chain's node from a binary or a container image. An instance boots in seconds: init → genesis patching → account funding → gentx → start → health-polled until the first block.
Installation
Prerequisites
Most instances run from an image, so a running Docker is all you need — simd, wasmd, gaiad, xplad, and evmd pull their image on first use.
The exceptions: the hermes relayer runs as a host binary (put it on PATH, e.g. from an official release), and marood has no default image — inject a source yourself, either an image or a binary on PATH.
Any instance also accepts a binary or image override — the escape hatch for local development. See the instance pages for the full list, and the CI guide for provisioning binaries on CI runners.
Quick Start
import { , } from 'starskiff';
const [] = ;
const = .({
: 'test-1',
: [{ : ., : '1000000000stake', : . }],
});
await .();
// Ready-to-use endpoint URLs:
.; // http://localhost:26657 — CometBFT RPC
.; // http://localhost:9090 — gRPC
.; // http://localhost:1317 — REST (Cosmos SDK API)
await .();start() resolves once the node reports its first block (and, for EVM chains, once the JSON-RPC server responds). stop() kills the process and removes the temporary home directory — every run starts from a fresh genesis.
Using with cosmjs
import { SigningStargateClient, GasPrice } from '@cosmjs/stargate';
import { DirectSecp256k1HdWallet } from '@cosmjs/proto-signing';
const wallet = await DirectSecp256k1HdWallet.fromMnemonic(alice.mnemonic, { prefix: 'cosmos' });
const client = await SigningStargateClient.connectWithSigner(instance.rpcUrl, wallet, {
gasPrice: GasPrice.fromString('0stake'),
});For wiring instances into your test runner, see the vitest guide; for EVM JSON-RPC testing, see the evmd instance.