How Jito Bundles Work on Solana (Explained for Devs)

How a Jito bundle travels from your app to a Solana block: the block engine, the tip, ordering, atomic execution, and why a bundle sometimes never lands.

By DevBundler Team · · 5 min read

The short answer

A Jito bundle is a group of up to 5 Solana transactions sent to Jito's block engine instead of the normal transaction path. A Jito-enabled validator executes them in order and atomically, so all of them land in the same block or none do, and a tip transfer inside the bundle pays for inclusion.

Key takeaways

  • A Jito bundle holds up to 5 transactions that execute in the order given, back to back, with nothing in between.
  • Bundles are atomic: if any transaction would fail, the whole bundle is dropped and nothing is charged.
  • The tip is an ordinary SOL transfer to one of Jito's tip accounts, placed inside a transaction in the bundle.
  • A bundle can only land in a slot whose leader runs Jito's validator client, and before its blockhash expires.
  • Bundles exist on mainnet only. On devnet, the same transactions have to be sent one by one.

Five transactions, one tip, one block. That is a Jito bundle in a sentence. The interesting part is the path those five transactions take, because it is different from how a normal Solana transaction gets into a block, and the differences explain both why bundles are useful for launches and why they sometimes vanish without a trace.

The normal path, for comparison

When you send an ordinary transaction, your RPC node forwards it to the current leader (the validator producing blocks for this slot) and the next few leaders. The leader's scheduler picks transactions from what it has received, roughly favoring higher priority fees, and packs them into the block. Your transaction lands somewhere in the block, or in a later block, or not at all.

There is no promise about ordering between two transactions you send. Send three buys from three wallets a few milliseconds apart and they can land in any order, in different blocks, with strangers' transactions between them.

What Jito adds

Jito Labs maintains a modified Solana validator client (Jito-Solana) and runs a service called the block engine. Validators that run the Jito client receive bundles from the block engine, alongside their normal transaction flow.

A bundle is a list of up to 5 signed transactions with two rules attached:

  1. Sequential. They execute in exactly the order listed, back to back. No outside transaction can be placed between them.
  2. Atomic. Either every transaction succeeds and they all land in the same block, or none of them land.
The path of a bundle
  1. Your app

    signs up to 5 transactions and sends them as one bundle

  2. Block engine

    simulates the bundle and drops it if any part fails

  3. Auction

    competes with other bundles on tip for space in the block

  4. Leader

    a Jito-enabled validator executes it in order, in one block

The block engine is the gatekeeper. It simulates each bundle before forwarding it. If transaction 3 of 5 would fail, for example because a wallet does not have enough SOL or a slippage check would trip, the whole bundle is thrown out at this stage. Nothing reaches the chain, so nothing is charged.

How the tip works

There is no special "tip field" in a Solana transaction. A Jito tip is a plain SOL transfer to one of a small set of tip accounts that Jito publishes. You put that transfer instruction inside one of the bundle's transactions, usually the last one.

Because the bundle is atomic, the tip has a nice property: it only gets paid if everything lands. A failed or dropped bundle costs you nothing.

When several bundles want space in the same block, the ones paying more for the space they use tend to win. That is the whole auction from your side: tip enough to be competitive at that moment. Jito's minimum and typical tip levels change, so check current figures rather than hardcoding a number. Jito tips explained covers how to choose one.

What a pump.fun launch bundle contains

Here is how DevBundler uses the 5-transaction limit for a mainnet launch:

TransactionWhat it does
1Creates the coin, then the dev wallet buys
2Buys from the first group of buyer wallets
3Next group
4Next group
5Last group, plus the Jito tip

Five transactions for up to 11 wallets only works because of an address lookup table. Every pump.fun buy references a long list of accounts, and a Solana transaction can be at most 1232 bytes. The lookup table lets each transaction refer to those accounts by 1-byte indexes instead of full 32-byte addresses. DevBundler creates one reusable table per account, once, for about 0.005 SOL.

Order is not cosmetic here. Each buy pushes the bonding curve price up for the next one, so the wallet in transaction 2 pays less per token than the wallet in transaction 5. Since the bundle runs in a fixed order, a tool can quote every wallet against the price left by the wallets before it, and the quotes will match what lands.

Why do bundles fail to land?

Bundles fail quietly. There is no on-chain error, because nothing reached the chain. These are the usual reasons:

Common reasons a bundle does not land

  • A transaction fails simulation: a wallet short of SOL, or a pump.fun slippage error such as 6002 TooMuchSolRequired or 6003 TooLittleSolReceived.
  • The coin address is already used, or the curve is already complete (6005 BondingCurveComplete).
  • The tip is too low to win space while the network is busy.
  • The blockhash expires before a Jito-enabled leader takes the bundle. A blockhash is only valid for about 150 slots, roughly a minute.
  • The bundle reaches the block engine while the upcoming leaders are not running the Jito client, and by the time one is, the blockhash has expired.

Most Solana stake runs the Jito client, so the last case is less common than it sounds, but it happens. The fix for most of these is the same: rebuild with a fresh blockhash and send again. DevBundler checks balances, the coin address and the curve before it sends anything, so the first two reasons are usually caught before you spend a lamport.

What about devnet?

Jito bundles are a mainnet service, so there is nothing to send a bundle to on devnet. A bundler can still run the same launch there by sending the create and the buys one after another. You lose atomicity and same-block ordering, but you get to practice the whole flow with free test SOL. Keep in mind that devnet's pump.fun curve is configured very differently from mainnet, so the percentages you see there will not match a real launch.

Bundles outside of launches

The same mechanism is useful after launch too. Selling from several wallets is the mirror image of buying from them: you want the sells to land together, in a known order, without outside trades between them. DevBundler's trading bar has a "Bundle" mode (Premium) that packs selected wallets into one Jito bundle in the same block, alongside a "Fast" mode where each wallet sends its own transaction immediately. In Fast mode each wallet's trade stands on its own, so one failure does not hold up the rest; Bundle gives you the ordering and the all-or-nothing behavior.

If you want the deeper reasoning on why the atomic part holds, read why bundled transactions land together. If you want to see a bundle in action on your own coin, the full launch guide walks through every step.

Frequently asked questions

›How many transactions can a Jito bundle have?

Up to 5. They execute sequentially in the order you list them, and all of them land in the same block or none do.

›Do I pay the Jito tip if my bundle fails?

No. The tip is a transfer inside one of the bundle's transactions, and a bundle is all or nothing. If it does not land, the tip transfer never executes.

›Why did my Jito bundle not land?

Common reasons are a transaction that fails in simulation (for example a slippage error or a wallet short of SOL), a tip too low to win space in the block, or a blockhash that expired before a Jito-enabled leader picked the bundle up.

›Can I use Jito bundles on devnet?

No. Jito bundles are a mainnet service. Tools like DevBundler send the same transactions one after another on devnet, which is fine for practice but not atomic.

›Can someone else's transaction land between transactions in my bundle?

No. The bundle executes as one sequence. Other transactions can land before or after it in the same block, but not in the middle.

Keep reading