Build Solana transactions
without complexity

Type-safe, composable transaction builder with automatic retry, priority fees, and smart defaults, and multiple execution paths built on top of @solana/kit.

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

Jupiter Swap

Swap tokens using Jupiter aggregator

Strategy: auto
jupiter-swap
Status: idle

Titan Swap

Swap tokens using Titan aggregator with 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