Skip to main content
Raptor is also a single binary that you run on your own servers. It’s the same routing engine and the same HTTP and WebSocket API as the hosted service at 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

The latest release for Linux and macOS, with checksums and release notes.

Report an issue

Bugs and feature requests go to the GitHub repository. Questions go to Discord.
You don’t need to self-host to use Raptor. The hosted API, which is also currently free, needs no setup. Self-host when you want your own capacity, your own infrastructure or no dependency on a shared service.

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. A request to an endpoint that’s turned off returns 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, plus YELLOWSTONE_TOKEN if your provider needs one. Raptor won’t start without it.
  • A writable directory for the pool cache. By default it’s .r_cache next to the binary. Set RAPTOR_POOL_DATA_DIR to use another directory.
  • Outbound HTTPS. On startup, Raptor downloads the current pool index from Solana Tracker, then keeps it current from Yellowstone.

Install

1

Pick the file for your server

Each release has one zip per platform, named raptor-<version>-<platform>.zip.
2

Download and verify it

These commands download the latest release and check it against the published checksums.txt.
The check prints 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.
3

Check that it runs

If macOS blocks a binary you downloaded in a browser, clear the quarantine flag with xattr -d com.apple.quarantine raptor.

Run

Set your endpoints and start the server.
Raptor listens on 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

Every example in the overview works against your instance once you replace 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

Clients connect to 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

This turns on 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. The server needs outbound UDP access to Solana validators for QUIC.

Quote and swap in one call

This turns on 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

This lets /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 with dexes and pools. DEX names are case-insensitive and accept several spellings, so 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.
Allowlist files have one address per line. Raptor ignores empty lines, and # 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 signed quoteId. 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:
Instances that share the secret accept each other’s quotes. Generate one with openssl rand -hex 32 and keep it private.

Memory and performance

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

Put raptor and raptor.sig in /opt/raptor, then create /etc/systemd/system/raptor.service:
Put your settings in /opt/raptor/raptor.env, one NAME=value per line:
Start it and follow the logs:

Update

Download the new release the same way, replace raptor 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

Set 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.
Raptor is still indexing pools. Wait until /ready returns 200. If it never does, check the logs for Yellowstone connection errors, and check that the server can make outbound HTTPS requests.
The feature is turned off. Start Raptor with --enable-websocket, --enable-yellowstone-jet or --enable-quote-and-swap.
Set the same RAPTOR_QUOTE_SECRET on every instance, or send each client’s /quote and /swap to the same instance.
The binary needs glibc 2.30 or newer. Use Ubuntu 20.04+, Debian 11+ or a newer distribution, or run the Docker image above.
Set --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

No. The binary is currently free: download it and run it. There’s no key and no request limit.
Yes. You can run it behind your own API, charge for access and add your own platform fee with feeAccount and feeBps.
Yes. Raptor fills the same role: a self-hosted aggregator that quotes and builds swaps. It needs no binary key, and you can run unlimited instances.
No. Raptor is closed source, and the GitHub repository hosts the releases. Open an issue there for bugs and feature requests.
Yes. Every instance builds transactions for the Raptor program, RaptorD5ojtsqDDtJeRsunPLg6GvLYNnwKJWxYE4m87.