raptor.solanatracker.io.
- Currently free. There’s no charge for the binary, and no API key or license key. Download it and run it.
- No limits. Run as many instances as you want and serve as many requests as your hardware handles.
- You can resell it. Put your own API in front of it, charge for access or add your own platform fee.
Download from GitHub
Report an issue
What the binary does
Out of the box, the binary serves quotes and builds swap transactions. Four more features are off until you turn them on.404.
Raptor keeps pool state current by streaming account updates from Yellowstone gRPC, so it uses very little RPC after startup.
Requirements
- A Linux or macOS server.
- Linux: x86-64 with glibc 2.30 or newer, such as Ubuntu 20.04+, Debian 11+ or RHEL 9+.
- macOS: Apple Silicon or Intel.
- A Solana RPC endpoint, set as
RPC_URL. - A Yellowstone gRPC endpoint, set as
YELLOWSTONE_ENDPOINT, plusYELLOWSTONE_TOKENif your provider needs one. Raptor won’t start without it. - A writable directory for the pool cache. By default it’s
.r_cachenext to the binary. SetRAPTOR_POOL_DATA_DIRto use another directory. - Outbound HTTPS. On startup, Raptor downloads the current pool index from Solana Tracker, then keeps it current from Yellowstone.
Install
Pick the file for your server
raptor-<version>-<platform>.zip.Download and verify it
checksums.txt.raptor-<version>-<platform>.zip: OK. If it prints anything else, delete the zip and download it again.Keep raptor.sig in the same directory as raptor. The binary uses it to check that it hasn’t been modified.Check that it runs
xattr -d com.apple.quarantine raptor.Run
Set your endpoints and start the server.0.0.0.0:8080. Set BIND_ADDR to change it, for example BIND_ADDR=127.0.0.1:9000.
To turn on every optional feature except arbitrage:
Wait until it’s ready
Raptor indexes pools before it can route. Until it finishes,/quote returns 503 with Server warming up. /ready returns 200 once Raptor can serve quotes, and 503 before that:
/health returns OK as soon as the server is up, even while it’s still indexing. Point load-balancer health checks at /ready so an instance gets traffic only once it can quote.
Make your first quote
https://raptor.solanatracker.io with your server’s address.
Optional features
Every flag also has an environment variable. For on/off variables,1, true, yes and on all turn the feature on.
WebSocket streaming
ws://your-server:8080/stream for live quotes, or to /stream/swap for quotes with a ready-to-sign transaction. Raptor pushes an update whenever the best route changes, so clients don’t need to poll. See WebSocket for the message format.
Send and track transactions
POST /send-transaction and GET /transaction/{signature}. Raptor sends signed transactions straight to the upcoming block leaders over QUIC using Yellowstone Jet, and resends them until they land or expire. See Send and track transactions for the request and response formats.
Quote and swap in one call
POST /quote-and-swap, which quotes and builds the transaction in one request. It saves a round trip for bots and backends that don’t need to show the quote first. See Quote and swap in one request.
Arbitrage
/quote accept the same mint as input and output, for example SOL to SOL. Raptor then looks for a cycle through several pools that returns more than you put in, as described in Arbitrage.
Without this flag, same-mint quotes return 400 with Circular arbitrage is disabled.
Limit what Raptor routes
By default, Raptor routes through every supported DEX and pool. These filters narrow that for the whole instance. DEX filters also reduce what Raptor streams from Yellowstone, which saves memory and bandwidth. Callers can narrow routing further on each request withdexes and pools.
raydium-clmm, raydium_clmm and "Raydium CLMM" all mean the same DEX. raydium and meteora match every pool type from that DEX, and orca matches Whirlpool. Set an include list or an exclude list, not both. If both are set, the include list wins.
# starts a comment. When you combine filters, a pool must pass all of them.
Run several instances
Each instance runs independently with its own Yellowstone stream, so you can put as many as you need behind a load balancer. Every quote carries a signedquoteId. By default, /swap accepts only quotes made by the same instance. If your load balancer can send a client’s /quote and /swap to different instances, give every instance the same secret:
openssl rand -hex 32 and keep it private.
Memory and performance
--low-memory on small servers. Launchpads such as Pump.fun have millions of bonding-curve pools, and low-memory mode keeps them on disk.
Startup options
Run it as a service
- systemd
- Docker
raptor and raptor.sig in /opt/raptor, then create /etc/systemd/system/raptor.service:/opt/raptor/raptor.env, one NAME=value per line:Update
Download the new release the same way, replaceraptor and raptor.sig, and restart. Keep the pool cache directory between versions. Release notes are on GitHub and in Recent changes.
To update several instances without downtime, give them all the same RAPTOR_QUOTE_SECRET and restart them one at a time. Each instance rejoins the load balancer once /ready returns 200.
Configuration reference
Flags take their value either way:--workers 8 or --workers=8.
Troubleshooting
Raptor exits with “RPC_URL environment variable is required”
Raptor exits with “RPC_URL environment variable is required”
RPC_URL and YELLOWSTONE_ENDPOINT in the environment that runs Raptor. Under systemd, put them in the EnvironmentFile, because variables exported in your shell don’t reach the service./quote returns 503 “Server warming up”
/quote returns 503 “Server warming up”
/ready returns 200. If it never does, check the logs for Yellowstone connection errors, and check that the server can make outbound HTTPS requests./stream, /send-transaction or /quote-and-swap returns 404
/stream, /send-transaction or /quote-and-swap returns 404
--enable-websocket, --enable-yellowstone-jet or --enable-quote-and-swap./swap rejects a quote made by another instance
/swap rejects a quote made by another instance
RAPTOR_QUOTE_SECRET on every instance, or send each client’s /quote and /swap to the same instance.Linux reports “GLIBC_2.30 not found”
Linux reports “GLIBC_2.30 not found”
My RPC provider rate-limits Raptor
My RPC provider rate-limits Raptor
--rpc-rate-limit below your plan’s requests per second. Raptor makes most of its RPC calls at startup, then reads mainly from Yellowstone.FAQ
Does the binary need an API key or a license?
Does the binary need an API key or a license?
Can I resell access to my instance?
Can I resell access to my instance?
feeAccount and feeBps.Is it an alternative to the Metis binary?
Is it an alternative to the Metis binary?
Is the source code available?
Is the source code available?
Do swaps from my instance use the same on-chain program?
Do swaps from my instance use the same on-chain program?
RaptorD5ojtsqDDtJeRsunPLg6GvLYNnwKJWxYE4m87.