Keychain

Solana Keychain provides a unified interface for signing Solana transactions across multiple key management backends. Develop locally with an in-memory key, then switch to enterprise key management, cloud HSMs, or managed wallet services in production — without rewriting your signing code.

Why Keychain?

  • Single Interface: One SolanaSigner trait works across all backends
  • Swap Backends: Change key management providers through configuration, not code
  • Zero-Cost Abstraction: Feature flags include only what you need
  • Audited: Security-reviewed by Accretion

Architecture

  • Languages: Rust + TypeScript, at full parity
  • Trait: Unified SolanaSigner interface
  • Backends: Memory, Vault, AWS KMS, GCP KMS, Privy, Turnkey, Fireblocks, CDP, Crossmint, Dfns, Openfort, Para, Utila, Fordefi
  • Compatibility: @solana/kit and @solana/signers compatible (TypeScript) | solana-sdk and solana-sdk-v3 compatible (Rust)

Supported Backends

Backends span local development, self-hosted and cloud key management, and managed or MPC wallet services. See Choosing a backend to compare custody models and pick the right one.

BackendUse CaseRustTypeScript
MemoryDevelopment, testing
HashiCorp VaultSelf-hosted key management
AWS KMSCloud-native (AWS)
GCP KMSCloud-native (GCP)
PrivyEmbedded wallets
TurnkeyNon-custodial key management
FireblocksInstitutional custody
CDPCoinbase Developer Platform
CrossmintCrossmint managed wallets
DfnsDfns wallet infrastructure
OpenfortOpenfort backend wallets
ParaPara MPC wallets
UtilaUtila MPC custody
FordefiFordefi MPC custody

Quick Start

Rust

Install the Rust crate:

cargo add solana-keychain

Basic usage:

use solana_keychain::{Signer, SolanaSigner};
// Create a signer from any backend
let signer = Signer::from_memory("base58_private_key")?;
// All signers share the same interface
let pubkey = signer.pubkey();
let signature = signer.sign_transaction(&mut tx).await?;

TypeScript

Install the TypeScript package:

pnpm add @solana/keychain

Basic usage:

import { createKeychainSigner } from "@solana/keychain";
import { signTransactionWithSigners } from "@solana/signers";
// Create any signer via the unified factory
const signer = await createKeychainSigner({
backend: "vault",
vaultAddr: "https://vault.example.com:8200",
vaultToken: "hvs.xxxxx",
keyName: "my-solana-key",
publicKey: "base58_public_key"
});
// Sign an already-compiled transaction
const signedTx = await signTransactionWithSigners(
[signer],
compiledTransaction
);

Next steps

Source

Built and maintained by the Solana Foundation. Licensed under MIT.

Is this page helpful?

Table of Contents

Edit Page
© 2026 Solana Foundation. All rights reserved.