# Market Makers

> Canonical: https://docs.velocity.exchange/developers/market-makers

Market making on Velocity means providing liquidity through resting orders, through JIT auctions, or through both. This section covers the mechanisms a maker quotes into, the three strategies built on them, and the production patterns every market making bot needs.

> **Warning:**
>
> The DLOB is to be removed. A resting order will live in one CLOB market account
> instead of in the `User` account of its owner. Pages in this section that
> describe the DLOB describe it as it works now. A maker starting work should read
> [PropAMM and CLOB Order Flow](/developers/concepts/propamm-and-clob-order-flow.md) first.

## Start here

Place two-sided quotes that track the oracle, in under 10 minutes, before deciding anything else.

## How fills actually happen

Read both of these before choosing a strategy. They decide what a quote competes against.

The one thing to take from those pages: there is no fixed JIT, then DLOB, then AMM waterfall. `determine_perp_fulfillment_methods` walks the crossing makers in price order and inserts an AMM step ahead of any maker the AMM out-prices, capped at that maker's price. Better price fills first, whoever is quoting it. Being on the book is not enough.

## Choosing a strategy

Velocity supports three approaches. All three earn the maker rebate on a fill, so the choice is about latency infrastructure, capital lockup, and how selective the strategy needs to be about flow.

| | DLOB MM | JIT-only | SWIFT |
|---|---|---|---|
| **How it works** | Resting limit orders on the DLOB | React to taker auctions as they open | Receive signed taker orders offchain, before the auction |
| **Capital** | Committed onchain while orders rest | Deployed only on the fills taken | Deployed only on the fills taken |
| **Latency needed** | Low: oracle offset orders reprice themselves | High: the response has to land inside the auction window | Highest: the 100 to 500 ms head start is the whole point |
| **Flow selection** | None, anything crossing the quote fills | Per auction | Per order, with the most time to decide |

Start with **DLOB MM** using oracle offset orders. They float with the oracle, so a quoting desk sends roughly 30 transactions per day rather than one per oracle tick, and the infrastructure bar is the lowest of the three.

## Running it in production

## Reference implementations

Velocity maintains reference bots in `apps/keeper-bots-v2`, part of the `velocity-v1` monorepo. That monorepo is not public yet, so these are pointers for readers who already have access rather than something to clone.

| Bot | Source | Strategy |
|---|---|---|
| **FloatingPerpMakerBot** | `src/bots/floatingMaker.ts` | Oracle offset resting orders on the DLOB |
| **JitMaker** | `src/bots/jitMaker.ts` | JIT auction fills using `JitterSniper`/`JitterShotgun` |

`FloatingPerpMakerBot` is the better starting point: it shows oracle offset orders under production conditions. `JitMaker` shows auction participation through `@velocity-exchange/jit-proxy`, which is on npm. See [JIT Auctions](/developers/market-makers/jit-auctions.md#jit-proxy-library).

## Related resources

- [Velocity SDK](/developers/velocity-sdk/setup.md): SDK reference for orders and positions
- [Protocol Concepts](/developers/concepts.md): accounts and onchain data
- [Trading fees](/protocol/trading/trading-fees.md): the fee tiers and maker rebate a strategy earns against
