Build Solana transactions
without complexity

Type-safe, composable transaction builder with automatic retry, priority fees, smart defaults, and multiple execution paths built on top of @solana/kit. Ready for transaction v1: opt in to 4096-byte transactions with a single option. Add @pipeit/actions for ready-made swap and perps plans from Titan, Jupiter, Phoenix and Flash.

Built-in Retry Logic
Exponential backoff with configurable attempts and rich error types for debugging.
Pre-flight Simulation
Test transactions before sending to catch errors early and save on network fees.
Priority Fee Presets
Choose from none/low/medium/high/veryHigh or use percentile-based estimation.
Address Lookup Tables
Automatic ALT compression for v0 transactions reduces size and cost.
Transaction v1 Ready
Pass version: 1 for 4096-byte transactions. Compute budget and lamports fee land in the message config automatically.
DeFi Actions
@pipeit/actions ships InstructionPlan builders for Titan and Jupiter swaps and Phoenix and Flash perps that drop straight into executePlan.
Durable Nonce Support
Create long-lived transactions that don't expire with blockhash.
Composable Middleware
Plug in logging, simulation, retry, or custom logic at any execution step.
Export Any Format
Output base64, base58, or raw bytes for custom transports and hardware wallets.
Continuous Resubmission
TPU client resubmits until confirmed for highest possible landing rates.
Rich Error Diagnostics
Human-readable error messages with program-specific context and debugging hints.

Write less boilerplate, keep your code simple.

PipeIt simplifies Solana Kit's API and adds opinionated features like automatic retry, priority fees, smart defaults, and more.

@solana/kit

Manual blockhash fetching, message building, signing, and confirmation

1import { 2  createSolanaRpc,3  createSolanaRpcSubscriptions,4  createTransactionMessage,5  setTransactionMessageFeePayer,6  setTransactionMessageLifetimeUsingBlockhash,7  appendTransactionMessageInstruction,8  pipe,9  sendAndConfirmTransactionFactory,10  address,11  lamports,12} from '@solana/kit';13import { signTransactionMessageWithSigners } from '@solana/signers';14import { getTransferSolInstruction } from '@solana-program/system';15 16const rpc = createSolanaRpc(rpcUrl);17const rpcSubscriptions = createSolanaRpcSubscriptions(wsUrl);18 19const { value: latestBlockhash } = await rpc.getLatestBlockhash().send();20 21const message = pipe(22  createTransactionMessage({ version: 0 }),23  tx => setTransactionMessageFeePayer(signer.address, tx),24  tx => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, tx),25  tx => appendTransactionMessageInstruction(26    getTransferSolInstruction({27      source: signer,28      destination: address(recipient),29      amount: lamports(1_000_000_000n),30    }),31    tx32  )33);34 35const signedTx = await signTransactionMessageWithSigners(message);36const sendAndConfirm = sendAndConfirmTransactionFactory({ rpc, rpcSubscriptions });37await sendAndConfirm(signedTx, { commitment: 'confirmed' });

@pipeit/core

Automatic blockhash, retry logic, priority fees, and confirmation

1import { TransactionBuilder } from '@pipeit/core';2import { getTransferSolInstruction } from '@solana-program/system';3import { address, lamports } from '@solana/kit';4 5const signature = await new TransactionBuilder({ 6  rpc,7  autoRetry: true, 8  priorityFee: 'medium',9})10  .setFeePayerSigner(signer)11  .addInstruction(12    getTransferSolInstruction({13      source: signer,14      destination: address(recipient),15      amount: lamports(1_000_000_000n),16    })17  )18  .execute({19    rpcSubscriptions,20    commitment: 'confirmed',21  });

Interactive Playground

Real mainnet examples of multi-step pipelines and atomic transactions

Simple Transfer

Single instruction, single transaction - baseline example

Strategy: auto
Batch 1 (1 instructions)
transfer-sol
Status: idle

Batched Transfers

Multiple transfers batched into one atomic transaction

Strategy: auto
Batch 1 (3 instructions)
transfer-1
transfer-2
transfer-3
Status: idle

Mixed Pipeline

Instruction and transaction steps - shows when batching breaks

Strategy: auto
Batch 1 (2 instructions)
setup-1
setup-2
verify-state
Batch 2 (2 instructions)
finalize-1
finalize-2
Status: idle

Large Transaction (v1)

Nine instructions in one ~1.4 KB transaction - only possible with transaction v1 (4096-byte limit)

Strategy: auto
Batch 1 (9 instructions)
transfer-1
transfer-2
transfer-3
transfer-4
transfer-5
transfer-6
transfer-7
transfer-8
memo
Status: idle

Jupiter Swap

Swap tokens through Jupiter Metis with @pipeit/actions/metis

Strategy: auto
jupiter-swap
Status: idle

Titan Swap

Swap tokens through Titan with the @pipeit/actions/titan InstructionPlan API

Strategy: auto
titan-swap
Status: idle

Jito Bundle

MEV-protected bundle submission with Jito tip instructions

Strategy: auto
Batch 1 (3 instructions)
transfer-1
transfer-2
jito-tip
Status: idle

TPU Direct

Direct QUIC submission to validator TPU - bypass RPC queues for maximum speed

TPU Direct — awaiting execution
Strategy: auto
tpu-transfer
Status: idle