I built this all-in-one Solana CLI toolkit to handle every step of wallet management and bundle operations from a single interface. It covers HD wallet generation (BIP39/SLIP-0010), vanity addresses, batch operations, AES-256-GCM encryption, Jito MEV bundles, multi-wallet sweep/distribute, a full rotation system for anti-detection, and a cyberpunk terminal UI. Compatible with Phantom, Solflare, Backpack, and Ledger.
git clone https://github.com/andreagnzz/bundle-aio.git
cd bundle-aio
npm install
npm run buildGlobal install:
npm install -g bundle-aio# Generate a simple wallet
bundle-aio generate
# Generate with 24 words, 5 accounts, encrypted output
bundle-aio generate --words 24 --accounts 5 --encrypt --output wallet.json
# Find a vanity address
bundle-aio vanity --prefix So --threads 8
# Send a Jito bundle
bundle-aio bundle-jito --transactions tx1.json tx2.json --tip-strategy p50
# Sweep all wallets to one destination
bundle-aio bundle-sweep --source-bundle wallets.swbundle --destination <address>
# Distribute SOL equally to 10 wallets
bundle-aio bundle-distribute --source-key payer.json --destinations targets.json --strategy equalbundle-aio generate [options]
Options:
-w, --words <number> Word count: 12|15|18|21|24 (default: 12)
-a, --accounts <number> Accounts to derive (default: 1, max: 100)
-p, --passphrase <string> BIP39 passphrase (25th word)
-l, --language <lang> Language: english|french|spanish|japanese
-o, --output <path> Output file path
-e, --encrypt Encrypt output with AES-256-GCM
-n, --network <net> Network: mainnet|devnet|testnet
--show-private Show private keys (with warning)
--qr Display QR codes for addresses
--derivation <path> Custom derivation path
--format <fmt> Output: json|csv|jsonlbundle-aio vanity [options]
Options:
--prefix <string> Desired address prefix
--suffix <string> Desired address suffix
--contains <string> String contained anywhere
--case-sensitive Case-sensitive matching
--threads <number> Worker threads (default: CPU cores - 1)
--save <path> Save found wallet to filebundle-aio batch [options]
Options:
-n, --count <number> Wallets to generate (default: 10, max: 10000)
-o, --output <path> Output file path
--format <fmt> Format: csv|json|jsonl
--encrypt Encrypt private keys
--no-private Exclude private keys
--unique-seed Unique mnemonic per wallet
--progress Show progressbundle-aio inspect [options]
Options:
--file <path> Wallet JSON file
--mnemonic <phrase> Mnemonic phrase
--private-key <key> Private key (base58)
-a, --accounts <number> Accounts to derive (default: 5)
--show-balance Fetch SOL balances
--show-tokens Fetch SPL tokens
--decrypt Decrypt encrypted filebundle-aio balance [options]
Options:
--address <pubkey> Solana address
--file <path> Wallet file
-n, --network <net> Network
--rpc <url> Custom RPC URL
--tokens Show SPL tokens
--history <number> Last N transactions
--watch Auto-refresh every 10sbundle-aio airdrop [options]
Options:
--address <pubkey> Destination address
--amount <sol> SOL amount (max: 2)
-n, --network <net> devnet|testnet only
--file <path> Airdrop to all addresses in file
--delay <ms> Delay between airdrops# Sign a message
bundle-aio sign --message "Hello" --private-key <key>
# Verify a signature
bundle-aio sign --verify --message "Hello" --signature <sig> --address <pubkey>bundle-aio bundle-jito [options]
Options:
--transactions <paths...> Transaction JSON files (max 4 user txs)
--tip-strategy <strategy> Tip: min|p25|p50|p75|p95|custom (default: p50)
--tip-amount <lamports> Custom tip in lamports
--region <region> Jito region: mainnet|amsterdam|frankfurt|ny|tokyo
--monitor Monitor bundle until landing (default: true)
--timeout <ms> Monitoring timeout (default: 60000)
--simulate Simulate before sending
--dry-run Build without sending
--keypair <path> Fee payer keypair JSON fileMulti-region failover is built in. If the primary region fails, the client automatically tries fallback regions.
Consolidate SOL and SPL tokens from multiple wallets into a single destination.
bundle-aio bundle-sweep [options]
Options:
--source-file <path> JSON file with source wallets
--source-bundle <path> Encrypted .swbundle file
--destination <address> Destination address
--mode <mode> sol-only|tokens-only|all (default: all)
--keep-rent Keep rent exemption balance (default: true)
--use-jito Use Jito for atomicity
--concurrent <n> Parallel wallets (default: 5)
--dry-run Estimate without sendingDistribute SOL or SPL tokens from one wallet to many destinations.
bundle-aio bundle-distribute [options]
Options:
--source-key <path> Source keypair JSON file
--destinations <path> Destinations JSON/CSV file
--token <mint> SPL token mint (omit for native SOL)
--strategy <strategy> equal|weighted|fixed|fill-to (default: equal)
--total <amount> Total amount in lamports
--target-balance <lamports> Target balance for fill-to strategy
--create-ata Create missing ATAs (default: true)
--use-jito Use Jito bundles
--dry-run Validate without sendingEncrypted .swbundle files store multiple wallets in a single file with AES-256-GCM + Argon2id.
# Pack wallets into an encrypted bundle
bundle-aio bundle-pack --input wallet1.json wallet2.json -o farm.swbundle
# List wallets without decrypting (addresses only)
bundle-aio bundle-list --file farm.swbundle
# Extract specific wallets
bundle-aio bundle-unpack --file farm.swbundle --indices 0,2,4
# Add a wallet to an existing bundle
bundle-aio bundle-add --file farm.swbundle --wallet new.json
# Merge multiple bundles
bundle-aio bundle-merge --files a.swbundle b.swbundle -o merged.swbundle- RPC Pool — Multi-endpoint connection pool with round-robin, fastest, weighted-random, and failover strategies. Automatic health checks and latency monitoring.
- Priority Fees — Dynamic priority fee estimation from recent block data.
- Transaction Builder — Versioned transaction construction with compute budget optimization.
- Retry Engine — Smart retry with Solana error classification (blockhash expired, rate limited, insufficient funds, etc). Exponential backoff with jitter.
- Simulation — Pre-flight simulation for individual transactions and full bundles.
The rotation module prevents pattern detection when submitting multiple bundles:
- TipRotator — Rotates across all 8 Jito tip accounts. Never selects the same account consecutively. Varies tip amounts within a configurable range using
crypto.randomBytes. - TimingRotator — Generates human-like delays between submissions with bursts (rapid-fire), normal delays, and pauses. All randomness from
crypto.randomBytes. - RegionRotator — Distributes bundle submissions across Jito's 5 geographic regions. Optional latency tracking.
- SignerRotator — Rotates fee-paying wallets with configurable cooldown periods and max consecutive use limits.
- PatternEngine — Orchestrates all four rotators. Produces a
DetectionRiskReportanalyzing consecutive repeat rates and timing variance.
For submitting batches of bundles:
- Sequential — Bundle N+1 is not sent until bundle N lands or fails.
- Pipelined — All bundles sent immediately, monitored in parallel.
- Adaptive — Starts pipelined, switches to sequential after a configurable failure threshold (default: 30%).
- Abort on critical failure with configurable max failures.
The terminal interface features a neon-themed visual layer:
- ASCII art banners with Solana gradient
- Live rotation dashboards with in-place rendering
- Styled wallet cards, sweep reports, and distribute reports
- Progress bars, spinners, and styled tables
- Confirmation screens for sensitive operations
This project takes security seriously:
- Private keys are never displayed without the explicit
--show-privateflag - File encryption uses AES-256-GCM with Argon2id key derivation (3 iterations, 64MB memory)
- Sensitive memory (seed buffers, key material) is zeroed after use
- All BIP39 checksums are validated before any derivation
- Input sanitization on all user-facing parameters to prevent injection
- Wallet files (
.json,.csv,.swbundle) are gitignored by default - All randomness in the rotation system uses
crypto.randomBytes, notMath.random
| Wallet | Derivation Path | Compatible |
|---|---|---|
| Phantom | m/44'/501'/{i}'/0' | Yes |
| Solflare | m/44'/501'/{i}'/0' | Yes |
| Backpack | m/44'/501'/{i}'/0' | Yes |
| Ledger | m/44'/501'/{i}' | Yes |
npm run dev # Run in development mode
npm test # Run tests with coverage (230 tests, 90%+ coverage)
npm run build # Compile TypeScript
npm run lint # Lint source codeContributions are welcome! If you'd like to contribute:
- Fork the repository
- Create your feature branch (
git checkout -b feature/my-feature) - Write tests for your changes
- Make sure all tests pass (
npm test) - Commit your changes
- Push to your branch and open a Pull Request
Please make sure your code follows the existing style and passes linting.
MIT