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
  • 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

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.