@mysten/sui v2.0 and a new dApp Kit are here! Check out the migration guide
Mysten Labs SDKs

Dev Wallet

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

Use cases

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 standalone wallet + RemoteCliAdapterCLI Signing
Share one wallet across multiple dAppsRun standalone wallet, register 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
Prototype fast with zero setupUse WebCryptoSignerAdapter with defaults — three lines of configGetting Started
Keep dev keys separate from mainnet credentialsAll adapters are isolated from production wallets by design — keys are ephemeral or browser-scopedAdapters

Quick Start

Embedded in your app (dApp Kit plugin)

If your app uses @mysten/dapp-kit-react, embed the wallet directly — it inherits your network config automatically:

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

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

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:

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

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

The default port is 5174 (Vite's default). If the port is busy, Vite picks the next available — check the terminal output. See Standalone Mode for details.

How it works

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.

Guides

On this page