Mysten Incubation
Features

Accounts and wallet

Named identities, funding, and the dev wallet.

Use account(name, opts?) for every named identity. The bare form creates an ephemeral key and funds it with the default SUI amount on faucet-bearing local networks.

import { account } from '@mysten-incubation/devstack';

const alice = account('alice');
const ci = account('ci', { kind: 'env', key: 'ALICE_PRIVATE_KEY' });
const demo = account('demo', { kind: 'inline', privateKey: 'suiprivkey1...' });
const local = account('local', {
	kind: 'keystore',
	path: '~/.sui/sui_config/sui.keystore',
	aliasOrAddress: 'local',
});

Cross-coin funding uses direct coin members, not string records:

import { account } from '@mysten-incubation/devstack';

const alice = account('alice', {
	funding: [{ coin: 'sui', amount: 2_000_000_000n }],
});

Use wallet() or wallet({ accounts }) to expose the dev wallet server and generated dapp-kit config:

import {
	defineDevstack,
	account,
	HOST_SERVICE_PORT_TOKEN,
	hostService,
	sui,
	wallet,
} from '@mysten-incubation/devstack';

const DEV_PORT = 5173;

const localnet = sui();
const alice = account('alice');
const bob = account('bob');
const devWallet = wallet({
	accounts: [alice, bob],
});
const app = hostService({
	name: 'app',
	script: `pnpm exec vite --host 127.0.0.1 --strictPort --port ${HOST_SERVICE_PORT_TOKEN}`,
	port: DEV_PORT,
	ready: { kind: 'http' },
	after: [devWallet] as const,
});

export default defineDevstack({ members: [localnet, app], stackName: 'main' });

wallet({ accounts: 'all' }) expands to every account member in the final defineDevstack(...) call. The wallet binds to 127.0.0.1 by default, stores its pairing token under the stack runtime root, emits generated config at src/generated/dapp-kit/config.ts, and automatically allows the stack-scoped dev-server route such as http://dev.<app>.localhost:5175. Add allowedOrigins only for nonstandard browser origins.