CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-solana--wallet-adapter-wallets

Comprehensive collection of Solana wallet adapters for TypeScript applications with tree-shaking support

Pending
Overview
Eval results
Files

browser-mobile-wallets.mddocs/

Browser & Mobile Wallets

Browser extension and mobile wallet adapters that support full transaction signing, message signing, and modern Solana features like versioned transactions.

Capabilities

Phantom Wallet

Popular browser extension and mobile wallet with iOS deep linking support.

/**
 * Phantom wallet adapter with support for versioned transactions and iOS deep linking
 */
class PhantomWalletAdapter extends BaseMessageSignerWalletAdapter {
  name: WalletName<'Phantom'>;
  url: string;
  icon: string;
  supportedTransactionVersions: ReadonlySet<TransactionVersion>;
  
  constructor(config?: PhantomWalletAdapterConfig);
  
  /** Connect to Phantom wallet, with iOS universal link support */
  connect(): Promise<void>;
  
  /** Disconnect from wallet */
  disconnect(): Promise<void>;
  
  /** Auto-connect if already connected, with iOS handling */
  autoConnect(): Promise<void>;
  
  /** Send transaction with wallet signing and broadcasting */
  sendTransaction<T extends Transaction | VersionedTransaction>(
    transaction: T,
    connection: Connection,
    options?: SendTransactionOptions
  ): Promise<TransactionSignature>;
  
  /** Sign transaction without broadcasting */
  signTransaction<T extends Transaction | VersionedTransaction>(transaction: T): Promise<T>;
  
  /** Sign multiple transactions in batch */
  signAllTransactions<T extends Transaction | VersionedTransaction>(transactions: T[]): Promise<T[]>;
  
  /** Sign arbitrary message */
  signMessage(message: Uint8Array): Promise<Uint8Array>;
}

const PhantomWalletName: WalletName<'Phantom'>;

interface PhantomWalletAdapterConfig {}

Usage Example:

import { PhantomWalletAdapter, PhantomWalletName } from "@solana/wallet-adapter-wallets";

const adapter = new PhantomWalletAdapter();

// Check if wallet is available
if (adapter.readyState === WalletReadyState.Installed) {
  await adapter.connect();
  
  // Sign a message
  const message = new TextEncoder().encode("Hello Solana!");
  const signature = await adapter.signMessage(message);
}

Solflare Wallet

Multi-platform wallet with network configuration and MetaMask integration.

/**
 * Solflare wallet adapter with network configuration support
 */
class SolflareWalletAdapter extends BaseMessageSignerWalletAdapter {
  name: WalletName<'Solflare'>;
  url: string;
  icon: string;
  supportedTransactionVersions: ReadonlySet<TransactionVersion>;
  
  constructor(config?: SolflareWalletAdapterConfig);
  
  connect(): Promise<void>;
  disconnect(): Promise<void>;
  autoConnect(): Promise<void>;
  sendTransaction<T extends Transaction | VersionedTransaction>(
    transaction: T,
    connection: Connection,
    options?: SendTransactionOptions
  ): Promise<TransactionSignature>;
  signTransaction<T extends Transaction | VersionedTransaction>(transaction: T): Promise<T>;
  signAllTransactions<T extends Transaction | VersionedTransaction>(transactions: T[]): Promise<T[]>;
  signMessage(message: Uint8Array): Promise<Uint8Array>;
}

const SolflareWalletName: WalletName<'Solflare'>;

interface SolflareWalletAdapterConfig {
  /** Network to connect to (mainnet-beta, devnet, testnet) */
  network?: WalletAdapterNetwork;
}

Coinbase Wallet

Enterprise-grade wallet with full transaction support.

/**
 * Coinbase wallet adapter for browser extension integration
 */
class CoinbaseWalletAdapter extends BaseMessageSignerWalletAdapter {
  name: WalletName<'Coinbase Wallet'>;
  url: string;
  icon: string;
  supportedTransactionVersions: ReadonlySet<TransactionVersion>;
  
  constructor(config?: CoinbaseWalletAdapterConfig);
  
  connect(): Promise<void>;
  disconnect(): Promise<void>;
  sendTransaction<T extends Transaction | VersionedTransaction>(
    transaction: T,
    connection: Connection,
    options?: SendTransactionOptions
  ): Promise<TransactionSignature>;
  signTransaction<T extends Transaction | VersionedTransaction>(transaction: T): Promise<T>;
  signAllTransactions<T extends Transaction | VersionedTransaction>(transactions: T[]): Promise<T[]>;
  signMessage(message: Uint8Array): Promise<Uint8Array>;
}

const CoinbaseWalletName: WalletName<'Coinbase Wallet'>;

interface CoinbaseWalletAdapterConfig {}

Additional Browser/Mobile Wallets

All following wallets use the same BaseMessageSignerWalletAdapter interface with empty configuration:

// Alpha Wallet
class AlphaWalletAdapter extends BaseMessageSignerWalletAdapter {
  name: WalletName<'Alpha'>;
  supportedTransactionVersions: ReadonlySet<'legacy'>;
}
const AlphaWalletName: WalletName<'Alpha'>;
interface AlphaWalletAdapterConfig {}

// Avana Wallet
class AvanaWalletAdapter extends BaseMessageSignerWalletAdapter {
  name: WalletName<'Avana'>;
}
const AvanaWalletName: WalletName<'Avana'>;
interface AvanaWalletAdapterConfig {}

// Bitget Wallet (also exports BitKeepWalletAdapter alias)
class BitgetWalletAdapter extends BaseMessageSignerWalletAdapter {
  name: WalletName<'Bitget'>;
}
const BitgetWalletName: WalletName<'Bitget'>;
const BitKeepWalletName: WalletName<'Bitget'>; // Alias
interface BitgetWalletAdapterConfig {}


// Clover Wallet
class CloverWalletAdapter extends BaseMessageSignerWalletAdapter {
  name: WalletName<'Clover'>;
}
const CloverWalletName: WalletName<'Clover'>;
interface CloverWalletAdapterConfig {}

// Coin98 Wallet - Legacy transactions only
class Coin98WalletAdapter extends BaseMessageSignerWalletAdapter {
  name: WalletName<'Coin98'>;
  supportedTransactionVersions: ReadonlySet<'legacy'>;
}
const Coin98WalletName: WalletName<'Coin98'>;
interface Coin98WalletAdapterConfig {}


// Fractal Wallet
class FractalWalletAdapter extends BaseMessageSignerWalletAdapter {
  name: WalletName<'Fractal'>;
}
const FractalWalletName: WalletName<'Fractal'>;
interface FractalWalletAdapterConfig {}

// Huobi Wallet
class HuobiWalletAdapter extends BaseMessageSignerWalletAdapter {
  name: WalletName<'HuobiWallet'>;
}
const HuobiWalletName: WalletName<'HuobiWallet'>;
interface HuobiWalletAdapterConfig {}

// HyperPay Wallet
class HyperPayWalletAdapter extends BaseMessageSignerWalletAdapter {
  name: WalletName<'HyperPay'>;
}
const HyperPayWalletName: WalletName<'HyperPay'>;
interface HyperPayWalletAdapterConfig {}

// Krystal Wallet
class KrystalWalletAdapter extends BaseMessageSignerWalletAdapter {
  name: WalletName<'Krystal'>;
}
const KrystalWalletName: WalletName<'Krystal'>;
interface KrystalWalletAdapterConfig {}


// Neko Wallet
class NekoWalletAdapter extends BaseMessageSignerWalletAdapter {
  name: WalletName<'Neko'>;
}
const NekoWalletName: WalletName<'Neko'>;
interface NekoWalletAdapterConfig {}

// Nightly Wallet
class NightlyWalletAdapter extends BaseMessageSignerWalletAdapter {
  name: WalletName<'Nightly'>;
}
const NightlyWalletName: WalletName<'Nightly'>;
interface NightlyWalletAdapterConfig {}

// Nufi Wallet
class NufiWalletAdapter extends BaseMessageSignerWalletAdapter {
  name: WalletName<'NuFi'>;
}
const NufiWalletName: WalletName<'NuFi'>;
interface NufiWalletAdapterConfig {}

// Onto Wallet
class OntoWalletAdapter extends BaseMessageSignerWalletAdapter {
  name: WalletName<'ONTO'>;
}
const OntoWalletName: WalletName<'ONTO'>;
interface OntoWalletAdapterConfig {}


// Saifu Wallet
class SaifuWalletAdapter extends BaseMessageSignerWalletAdapter {
  name: WalletName<'Saifu'>;
}
const SaifuWalletName: WalletName<'Saifu'>;
interface SaifuWalletAdapterConfig {}

// Salmon Wallet
class SalmonWalletAdapter extends BaseMessageSignerWalletAdapter {
  name: WalletName<'Salmon'>;
}
const SalmonWalletName: WalletName<'Salmon'>;
interface SalmonWalletAdapterConfig {}

// Sky Wallet
class SkyWalletAdapter extends BaseMessageSignerWalletAdapter {
  name: WalletName<'SKY Wallet'>;
}
const SkyWalletName: WalletName<'SKY Wallet'>;
interface SkyWalletAdapterConfig {}


// Spot Wallet
class SpotWalletAdapter extends BaseMessageSignerWalletAdapter {
  name: WalletName<'Spot'>;
}
const SpotWalletName: WalletName<'Spot'>;
interface SpotWalletAdapterConfig {}

// Tokenary Wallet
class TokenaryWalletAdapter extends BaseMessageSignerWalletAdapter {
  name: WalletName<'Tokenary'>;
}
const TokenaryWalletName: WalletName<'Tokenary'>;
interface TokenaryWalletAdapterConfig {}

// TokenPocket Wallet
class TokenPocketWalletAdapter extends BaseMessageSignerWalletAdapter {
  name: WalletName<'TokenPocket'>;
}
const TokenPocketWalletName: WalletName<'TokenPocket'>;
interface TokenPocketWalletAdapterConfig {}

// Torus Wallet
class TorusWalletAdapter extends BaseMessageSignerWalletAdapter {
  name: WalletName<'Torus'>;
}
const TorusWalletName: WalletName<'Torus'>;
interface TorusWalletAdapterConfig {}

// Trust Wallet
class TrustWalletAdapter extends BaseMessageSignerWalletAdapter {
  name: WalletName<'Trust'>;
}
const TrustWalletName: WalletName<'Trust'>;
interface TrustWalletAdapterConfig {}

// XDEFI Wallet
class XDEFIWalletAdapter extends BaseMessageSignerWalletAdapter {
  name: WalletName<'XDEFI'>;
}
const XDEFIWalletName: WalletName<'XDEFI'>;
interface XDEFIWalletAdapterConfig {}

Usage Patterns

Multi-Wallet Setup

import {
  PhantomWalletAdapter,
  SolflareWalletAdapter,
  CoinbaseWalletAdapter,
} from "@solana/wallet-adapter-wallets";

const wallets = [
  new PhantomWalletAdapter(),
  new SolflareWalletAdapter({ network: WalletAdapterNetwork.Mainnet }),
  new CoinbaseWalletAdapter(),
];

// Use with wallet selection UI
const selectedWallet = wallets.find(w => w.name === 'Phantom');
await selectedWallet?.connect();

Transaction Signing

import { PhantomWalletAdapter } from "@solana/wallet-adapter-wallets";
import { Transaction, SystemProgram, PublicKey } from "@solana/web3.js";

const adapter = new PhantomWalletAdapter();
await adapter.connect();

// Create transaction
const transaction = new Transaction().add(
  SystemProgram.transfer({
    fromPubkey: adapter.publicKey!,
    toPubkey: new PublicKey("..."),
    lamports: 1000000,
  })
);

// Sign and send
const signature = await adapter.sendTransaction(transaction, connection);

Message Signing

const message = new TextEncoder().encode("Verify wallet ownership");
const signedMessage = await adapter.signMessage(message);

// Verify signature
import { nacl } from "tweetnacl";
const isValid = nacl.sign.detached.verify(
  message,
  signedMessage,
  adapter.publicKey!.toBytes()
);

Install with Tessl CLI

npx tessl i tessl/npm-solana--wallet-adapter-wallets

docs

browser-mobile-wallets.md

hardware-wallets.md

index.md

specialized-wallets.md

wallet-list.md

tile.json