Mysten Incubation

Dev Wallet

A development-only wallet for building and testing Sui dApps, no extension required

A development-only wallet for building and testing Sui dApps — no browser extension required.

This wallet is for development and testing only. Do not use it to store real funds.

Pre-1.0: This package is under active development. Minor versions may contain breaking changes until the API stabilizes at 1.0.

Dev wallet panel showing account and balances

Quick start

The recommended path: if your app uses @mysten/dapp-kit-react, embed the wallet directly with the dApp Kit plugin. It inherits your network config, appears in the wallet picker, and needs no extension.

pnpm add @mysten-incubation/dev-wallet
import { createDAppKit } from '@mysten/dapp-kit-react';
import { devWalletInitializer } from '@mysten-incubation/dev-wallet';
import { WebCryptoSignerAdapter } from '@mysten-incubation/dev-wallet/adapters';

const dAppKit = createDAppKit({
	networks: ['devnet'],
	walletInitializers: [
		devWalletInitializer({
			adapters: [new WebCryptoSignerAdapter()],
			autoConnect: true,
			mountUI: true,
		}),
	],
});

That's it — the dev wallet now shows up in dApp Kit's wallet picker. See Getting started for the full setup, peer dependencies, and a non-dApp-Kit path.

How it works

The dev wallet implements the wallet-standard interface (sui:signTransaction, sui:signAndExecuteTransaction, sui:signPersonalMessage) and registers itself in the wallet-standard registry. It appears in dApp Kit's wallet picker alongside production wallets.

Key management is handled by pluggable adapters — InMemory (ephemeral), WebCrypto (persistent), Passkey (biometric), and Remote CLI (sui keystore). See Adapters for details.

Other ways to use it

Beyond the embedded happy path, the dev wallet covers a few more workflows:

I want to...HowDetails
Connect a wallet to localnet or a custom networkBuilt-in — devnet, testnet, localnet included by default. Pass custom URLs via networks config.Getting started
Test my dApp end-to-end without click-through approvalsSet autoApprove: truee2e testing
Keep a persistent dev wallet that survives page reloadsUse WebCryptoSignerAdapter — keys stored in IndexedDB, survive refresh and restartWebCrypto adapter
Sign with the same address I published contracts fromUse the standalone wallet + RemoteCliAdapterCLI signing
Share one wallet across multiple dAppsRun the standalone wallet, register it in each dAppStandalone mode
Build a demo app users can try without installing a walletSet autoConnect: true, mountUI: true — wallet embeds directly, no extension neededGetting started
Keep dev keys separate from mainnet credentialsAll adapters are isolated from production wallets by design — keys are ephemeral or browser-scopedAdapters

Standalone wallet

Run the wallet as its own web app — your dApp connects via popup, just like a production wallet. Start the server, then register it through walletInitializers:

pnpm dlx @mysten-incubation/dev-wallet serve
import { createDAppKit } from '@mysten/dapp-kit-react';
import { devWalletClientInitializer } from '@mysten-incubation/dev-wallet/client';

const dAppKit = createDAppKit({
	networks: ['devnet'],
	walletInitializers: [devWalletClientInitializer({ origin: 'http://localhost:5174' })],
});

The default port is 5174. If the port is busy, the server picks the next available one — check the terminal output. See Standalone mode for details.

Guides

On this page