v2.0.0-alpha · 18 DEX adapters · 12 TX providers

Trade every Solana DEX
from your terminal

One CLI and TypeScript SDK to buy, sell, LP, and create pools across every major Solana protocol. Built for traders, bots, and AI agents.

outsmart
$ npm install -g outsmart@alpha
$ outsmart buy --dex raydium-cpmm --pool Q2sPH... --amount 0.1
 
  Simulation OK (142,380 CU)
  TX sent: 5zwjta... — confirming...
  confirmed: true
  out: 2,001.886 TOKEN

Quick Start

1. Install

# From npm (recommended)
npm install -g outsmart@alpha

# Or from source
git clone https://github.com/outsmartchad/outsmart-cli.git
cd outsmart-cli && npm install --legacy-peer-deps && npm run build

2. Configure

outsmart init

Prompts for wallet key and RPC endpoint. Saved to ~/.outsmart/config.env. One-time setup.

3. Trade

# Buy tokens (token auto-detected from pool)
outsmart buy --dex raydium-cpmm --pool <POOL> --amount 0.1

# Sell everything
outsmart sell --dex raydium-cpmm --pool <POOL> --pct 100

# Swap aggregator (no pool needed)
outsmart buy --dex jupiter-ultra --token <MINT> --amount 0.5

# Preview without spending
outsmart buy --dex raydium-cpmm --pool <POOL> --amount 0.1 --dry-run

# Check your bag
outsmart balance

Commands

outsmart buy

Buy tokens with SOL. On-chain DEXes require --pool; aggregators require --token.

outsmart buy --dex raydium-cpmm --pool <POOL> --amount 0.1
outsmart buy --dex jupiter-ultra --token <MINT> --amount 0.5
FlagDescription
-d, --dex <name>DEX adapter name (required)
-a, --amount <sol>SOL amount to spend (required)
-p, --pool <addr>Pool address (required for on-chain DEXes)
-t, --token <mint>Token mint (auto-detected; required for aggregators)
--dry-runSimulate only — preview CU without sending

outsmart sell

Sell a percentage of your held token balance.

outsmart sell --dex raydium-cpmm --pool <POOL> --pct 100
outsmart sell --dex jupiter-ultra --token <MINT> --pct 50

outsmart quote / find-pool

outsmart quote --dex raydium-cpmm --pool <POOL>
outsmart find-pool --dex raydium-cpmm --token <MINT>

Shared Swap Options

OptionDescriptionDefault
--slippage <bps>Slippage tolerance300 (3%)
--priority <uL>Priority fee per CUfrom env
--tip <sol>MEV tip in SOL0.001
--cu <units>Compute unit limitauto
--jitoUse Jito bundlesfalse
--dry-runSimulate onlyfalse
--quote <mint>Quote token mintWSOL

Stablecoin Auto-Swap

Some pools use USDC/USDT/USD1 as the quote token. The CLI handles the conversion automatically — no extra steps.

# LaunchLab pool quoted in USD1
outsmart buy --dex raydium-launchlab --pool <POOL> --amount 0.1
# → auto-swaps SOL → USD1 → buys token

Uses Jupiter Ultra if JUPITER_API_KEY is set, otherwise falls back to on-chain pools.

Wallet

# Show active wallet
outsmart wallet

# List all wallets
outsmart wallet list

# Add / switch / remove
outsmart wallet add --label trading
outsmart wallet switch trading
outsmart wallet remove trading

Balance

outsmart balance                # SOL + USDC/USDT/USD1
outsmart balance --token <MINT> # specific token

Liquidity

# Add liquidity
outsmart add-liq --dex meteora-dlmm --pool <POOL> --amount-sol 0.5 --strategy spot --bins 50

# Remove / claim fees / list positions
outsmart remove-liq --dex meteora-damm-v2 --pool <POOL> --pct 100
outsmart claim-fees --dex meteora-dlmm --pool <POOL>
outsmart positions --dex meteora-dlmm --pool <POOL>

Pool Creation

# PumpFun token
outsmart create-pump-coin --name "My Token" --symbol "MYTKN" --uri "https://..."

# PumpSwap AMM pool
outsmart create-pool --base <MINT> --quote So111...112 --base-amount 1000000 --quote-amount 1

# Meteora DAMM v2 custom pool
outsmart create-damm-pool --base <MINT> --base-amount 1000000 --quote-amount 0.5 \
  --max-fee 5000 --min-fee 100 --dynamic-fee

DEX Adapters

18 adapters covering every major Solana DEX. All confirmed on mainnet with real transactions.

AdapterProtocolBuySellPriceLPExtra
raydium-amm-v4AMM v4findpool
raydium-cpmmCPMMfindpool
raydium-clmmCLMMfindpool
raydium-launchlabLaunchlabfindpool, auto-swap
meteora-damm-v1Dynamic AMMfindpool
meteora-damm-v2CpAmmfullfindpool, create pool
meteora-dlmmDLMMfull
meteora-dbcDBC
pumpfunBonding Curvecreate coin
pumpfun-ammPumpSwap AMMcreate pool
orcaWhirlpool
byreal-clmmCLMMauto-swap
pancakeswap-clmmCLMM
fusion-ammFusion
futarchy-ammFutarchyauto-swap
futarchy-launchpadLaunchpadfund/claim
jupiter-ultraUltra APIaggregator
dflowIntent APIaggregator

TX Landing Providers

12 providers running simultaneously. Set the API key and the provider auto-enables.

JitoJITO_API_KEY
bloXrouteBLOXROUTE_AUTH_HEADER
HeliusHELIUS_API_KEY
NozomiNOZOMI_API_KEY
BlockrazorBLOCKRAZOR_API_KEY
NextBlockNEXTBLOCK_API_KEY
0slotZERO_SLOT_API_KEY
SoyasSOYAS_API_KEY
AstralaneASTRALANE_API_KEY
StelliumSTELLIUM_API_KEY
FlashblockFLASHBLOCK_API_KEY
Node1NODE1_API_KEY
⚡ Concurrent 🏁 Race 🎲 Random ➡️ Sequential

Programmatic API

Use outsmart as a TypeScript library in your bots, scripts, or AI agents.

import { getDexAdapter, listDexAdapters } from "outsmart";
import "outsmart/dist/dex/raydium-cpmm";
import "outsmart/dist/dex/jupiter-ultra";

const cpmm = getDexAdapter("raydium-cpmm");

// Buy
const result = await cpmm.buy({
  tokenMint: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
  amountSol: 0.1,
  opts: { slippageBps: 300 },
});

// Sell 100%
await cpmm.sell({ tokenMint: "...", percentage: 100 });

// Read price
const price = await cpmm.getPrice!("POOL_ADDRESS");

For AI agent integration, see outsmart-agent.

Configuration

Set via outsmart init or manually in ~/.outsmart/config.env.

VariableDescriptionDefault
PRIVATE_KEYBase58 wallet private keyrequired
MAINNET_ENDPOINTSolana RPC endpointrequired
TX_LANDING_MODEconcurrent | race | random | sequentialconcurrent
DEFAULT_TIP_SOLMEV tip in SOL0.001
DEFAULT_SLIPPAGE_BPSSlippage in bps300
JUPITER_API_KEYJupiter Ultra API keyworks without
DFLOW_API_KEYDFlow intent API keyrequired for dflow

Architecture

Clean adapter pattern. Each DEX module implements IDexAdapter and self-registers on import.

🔌
Adapter Pattern

Common interface: buy, sell, getPrice, findPool, addLiquidity. Zero coupling between adapters.

🛡
TX Simulation

Simulated before sending by default. Failed sims return immediately. --dry-run for preview.

🔄
RPC Resilience

Exponential backoff on 429/503/network errors. Blockhash expiry retry with fresh blockhash.

Project Structure

src/
  cli.ts                 # CLI entry point (Commander.js)
  index.ts               # Library entry point
  dex/
    types.ts           # IDexAdapter interface
    index.ts           # DexRegistry singleton
    ... 18 adapter files
  helpers/
    config.ts          # Wallet, connection, env
    wallets.ts         # Multi-wallet management
  transactions/
    send-rpc.ts        # Simulation, backoff, dry-run
    landing/
      orchestrator.ts  # Multi-provider submission
      providers/     # 12 provider implementations

Testing

# CI-safe (no RPC or SOL needed)
npm run test:unit        # 43 unit tests
npm run test:registry    # 18 adapters registered

# Mainnet integration
npm run test:raydium     # Raydium AMM v4, CPMM, CLMM
npm run test:meteora     # Meteora DAMM v2, DLMM, DBC
npm run test:pumpfun     # PumpFun + PumpSwap
npm run test:orca        # Orca Whirlpool
npm run test:clmm        # Byreal + PancakeSwap
npm run test:api         # Jupiter Ultra + DFlow