Skip to content

LiteSVM/litesvm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

208 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation


LiteSVM

github crates.io docs.rs build status

πŸ“ Overview

litesvm is a fast and lightweight library for testing Solana programs. It works by creating an in-process Solana VM optimized for program developers. This makes it much faster to run and compile than alternatives like solana-program-test and solana-test-validator. In a further break from tradition, it has an ergonomic API with sane defaults and extensive configurability for those who want it.

πŸš€ Getting Started

πŸ”§ Installation

cargo add --dev litesvm

πŸ€– Minimal Example

use litesvm::LiteSVM;
use solana_address::Address;
use solana_keypair::Keypair;
use solana_message::Message;
use solana_signer::Signer;
use solana_system_interface::instruction::transfer;
use solana_transaction::Transaction;

let from_keypair = Keypair::new();
let from = from_keypair.pubkey();
let to = Address::new_unique();

let mut svm = LiteSVM::new();
svm.airdrop(&from, 10_000).unwrap();

let instruction = transfer(&from, &to, 64);
let tx = Transaction::new(
    &[&from_keypair],
    Message::new(&[instruction], Some(&from)),
    svm.latest_blockhash(),
);
let tx_res = svm.send_transaction(tx).unwrap();

let from_account = svm.get_account(&from);
let to_account = svm.get_account(&to);
assert_eq!(from_account.unwrap().lamports, 4936);
assert_eq!(to_account.unwrap().lamports, 64);

Capabilities

Beyond simple transfers, litesvm supports:

  • Program loading β€” load compiled .so files with add_program_from_file or raw bytes with add_program. Pull programs from mainnet/devnet using solana program dump.
  • Simulation β€” dry-run a transaction without committing state changes using simulate_transaction.
  • Time travel β€” overwrite the Clock sysvar with set_sysvar::<Clock>(), or jump to a future slot with warp_to_slot.
  • Arbitrary account writes β€” use set_account to write any account state bypassing runtime checks (e.g. give a test wallet a large USDC balance without owning the mint keypair).
  • Compute budget control β€” override compute unit limits and heap size with with_compute_budget.
  • Transaction history β€” look up past transactions by signature with get_transaction; configure history capacity with with_transaction_history.
  • Sigverify control β€” disable signature checking with with_sigverify(false) to speed up tests that don't need signing.
  • Custom syscalls β€” register custom BPF syscalls with with_custom_syscall.
  • Register tracing β€” capture BPF register traces (requires the register-tracing feature flag).

Additional Crates

litesvm-token

litesvm-token provides ergonomic helpers for testing SPL Token programs. Rather than hand-rolling the instructions for creating mints, token accounts, and ATAs, it exposes a builder-style API covering the full range of token operations: CreateMint, CreateAssociatedTokenAccount, MintTo, Transfer, Burn, Approve, and their checked variants, plus authority management (SetAuthority, FreezeAccount, ThawAccount).

cargo add --dev litesvm-token

See the SPL token testing guide for a full walkthrough.

litesvm-loader

litesvm-loader provides helpers for working with Solana's upgradeable BPF loader in LiteSVM. It wraps the repetitive deployment flow for upgradeable programs by creating the buffer account, writing program bytes in chunks, deploying the program, and exposing a helper for changing the upgrade authority.

cargo add --dev litesvm-loader

See the loader API docs for the available helpers.

litesvm-utils

litesvm-utils dramatically reduces test boilerplate through three ergonomic traits that extend LiteSVM:

  • TestHelpers β€” create funded accounts, token mints, and ATAs; derive PDAs; and manipulate slots, all in a single method call.
  • AssertionHelpers β€” readable one-liner assertions for account existence, ownership, SOL/token balances, and account data length.
  • TransactionHelpers β€” execute instructions and assert success, failure, or specific error codes without manually constructing transactions.

It also ships a LiteSVMBuilder for fluent, chainable test environment setup. The crate is framework-agnostic and works with native, Anchor, and SPL programs.

cargo add --dev litesvm-utils

See the litesvm-utils testing guide for a full walkthrough.

anchor-litesvm

anchor-litesvm brings Anchor-native testing to LiteSVM with syntax mirroring anchor-client β€” but with no RPC overhead. It's the recommended way to test Anchor programs with LiteSVM.

  • AnchorContext β€” manages the LiteSVM instance, payer, and program in one place. Use AnchorLiteSVM::build_with_program() to set up the full test environment in a single call.
  • Program builder β€” fluent, type-safe instruction building via accounts(), args(), and instruction(), using the client types generated by declare_program! from your IDL.
  • Account deserialization β€” automatically fetches and deserializes Anchor accounts (including PDAs), handling discriminators for you.
  • Event parsing β€” extracts and deserializes typed events from transaction logs.
cargo add --dev anchor-litesvm

See the anchor-litesvm testing guide for a full walkthrough.

Further Reading

πŸ› οΈ Developing litesvm

Run the tests

The tests in this repo use some test programs you need to build first (Solana CLI >= 1.18.8 required):

cd crates/litesvm/test_programs && cargo build-sbf

Then just run cargo test.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors