Skip to content

Hummingbot v2.17.0 Release Notes

Released on September 22, 2026

Repository Description GitHub Release DockerHub Release
Hummingbot Client Core Client v2.17.0 changelog version-2.17.0
Gateway DEX Middleware v2.17.0 changelog version-2.17.0

Note

Other Hummingbot repositories such as Condor and Hummingbot-API follow a continuous deployment model without fixed version releases. Use the main branch for these repositories.

How to Install / Update

  • Hummingbot Client: See the Hummingbot Client Quickstart โ€” upgrade to v2.17.0 for the Kalshi perpetual connector, Gateway unified-route client, and executor slippage ramp. Derive users must re-run connect derive / connect derive_perpetual after this release (config keys renamed).
  • Gateway: See the Gateway Installation guide โ€” upgrade to v2.17.0 for the unified /trading route surface, Meteora DAMM v2 AMM, and Orca Whirlpools SDK migration. Connector-scoped /connectors/{dex}/{type}/* paths are removed; call /trading/{amm,clmm,router}/* instead.
  • Condor + Hummingbot API: See the Condor Quickstart or full documentation at condor.hummingbot.org. Pull the latest main branches together โ€” this cycle hardens Tailscale and MQTT broker auth, so mixed versions can fail to connect.

๐ŸŽ๏ธ Agent Builders Cup

The Agent Builders Cup is an agentic strategy hackathon run by Botcamp, our affiliated education company. Builders created Hummingbot V2 Controllers and Condor Agents, each exchange sponsor team selected its top two, and those agents go head to head in a livestreamed trading competition for a $20,000 total prize pool.

The live trading finals are October 6โ€“8, 2026, with winners announced October 9 at our Token2049 side event in Singapore. Sponsor teams: Orca, Derive, Gate, XRPL, Bitget, and Meteora. See botcamp.xyz/hackathons for the schedule and livestream.

๐Ÿฆ What's New - Hummingbot Client

๐Ÿ”Œ New Connector (Kalshi Perpetual)

  • Kalshi โ€“ Perpetual connector for the USD-margined perpetual futures on Kalshi, the CFTC-regulated US exchange โ€” its margin markets, not its event contracts (KXBTCPERP โ†’ BTC-USD). Full derivative lifecycle: RSA-PSS REST and WebSocket auth, order book and user streams, balances, positions, leverage, and funding. Resting close orders emulate reduce_only (Kalshi only accepts it on IOC) so a take-profit is cancelled once its position is gone. Also fixes shared ExchangePyBase order tracking so DNS/HTTP timeouts no longer count toward the lost-order limit.

See Kalshi for documentation on how to use this connector.

PRs: #8454 | #8464

๐ŸŒ‰ Gateway Client: Unified Routes, Slippage Ramp & Commands

The client now matches Gateway's unified /trading surface. Token and pool methods send chainNetwork instead of separate chain + network, which had broken every Gateway executor after the Gateway-side change.

  • Slippage ramp โ€” LPExecutorConfig and OrderExecutorConfig gain slippage_pct / slippage_multiplier / max_slippage_pct, defaulting to a 0.05 โ†’ 0.25 โ†’ 1.25 โ†’ 5 ramp that widens only on SLIPPAGE_EXCEEDED. LP volume is now fees รท fee rate (flow that crossed the position) instead of capital deposited.
  • Token discovery โ€” GatewayHttpClient.add_token_by_address persists a token by mint/address through POST /tokens/save/{address}.
  • Trimmed gateway commands โ€” LP and trading actions (gateway lp, pool, swap, token) move to Gateway routes, Hummingbot API, and Condor. gateway ping folds into bare gateway. Remaining surface: allowance, approve, balance, config, connect, generate-certs, list. Autocomplete for chains, namespaces, and DEX names is also fixed.

PRs: #8431 | #8441 (Thanks to mlguys! ๐Ÿ™) | #8438

๐Ÿ’ง LP Executor & Strategy V2

  • Configurable position refresh โ€” LPExecutorConfig.position_refresh_interval (default 1s) throttles on-chain position reads so multi-executor controllers don't flood RPC. Failed reads count toward the interval, so a 5xx cannot start a per-tick retry storm. (#8446). Thanks to mlguys! ๐Ÿ™
  • Standardized executor configs โ€” Executor config models are aligned across Order, Position, Grid, DCA, TWAP, XEMM, Arbitrage, and LP, with improved Hyperliquid order-cancel parsing. (#8421)
  • Faster backtesting โ€” The controller's executors_info view is now active executors plus those that closed within a time window (default one hour), so a long grid backtest is no longer O(nยฒ) in executor count. Executors created on the closing tick now appear in results. (#8447)

๐Ÿ› ๏ธ Connector Updates

  • Hyperliquid: Auth now rejects a private key that does not derive to the supplied api_address at connect time, instead of showing "connected" and failing on every signed request (#8212). Thanks to ipezygj! ๐Ÿ™ Builder fee (HGP-87) resolves on the first order even when the connector is embedded and start_network() is skipped โ€” so grid executors deployed from Condor carry the Foundation builder code (#8417).
  • Derive: Config keys renamed to match session-key auth: derive_api_key โ†’ derive_wallet_address, derive_api_secret โ†’ session_private_key, sub_id โ†’ subacct_id (spot and perpetual, mainnet and testnet). Breaking: re-run connect derive / connect derive_perpetual โ€” old YAML keys fail pydantic validation at password unlock and take down client startup. (#8430)
  • XRPL: Token balances no longer disappear when a market has no trading_pair_symbol (including the shipped SOLO-XRP default). (#8448)

Other Updates

  • #8402 โ€“ Updated the README exchange tables on development for the v2.16.0 connector lineup
  • #8403 โ€“ Refreshed the README on master, updating the exchange tables along with the Getting Started and Strategies sections

๐ŸŒ‰ What's New - Gateway

๐Ÿ”€ Unified Trading Route Surface

Gateway's public API collapses from 182 paths to 54. Trading type is now a path segment and the connector a parameter; openapi.json is generated from the route table without a running server.

Was Is
/connectors/{dex}/{type}/* (128 paths) removed
/trading/swap/{quote,execute} /trading/router/{quote-swap,execute-quote,execute-swap}
/connectors/{dex}/{amm,clmm}/quote-swap /trading/{amm,clmm}/quote-swap
/trading/amm/{add,remove}-liquidity /trading/amm/{add,remove}
/chains/{solana,ethereum}/* /chains/{chain}/*

Security: every route that signs is gated from what the route does, not a path allowlist โ€” closing unauthenticated POST /chains/ethereum/approve (GHSA-r4q2-79mv-2355). Amounts serialize as decimal strings so JSON floats cannot round lamports. Unknown request keys are rejected instead of silently stripped.

PRs: gateway #683 | hummingbot #8431 | hummingbot-api #221

๐ŸŒŠ Meteora DAMM v2 (AMM) & Wide DLMM Ranges

Gateway adds Meteora DAMM v2 (constant-product cp-amm) under /trading/amm/* as a second Meteora trading type alongside existing DLMM (clmm). Pool info, swap quote/execute, add/remove liquidity, and create-pool (requires an explicit configAddress; seed price defaults to the unified swap-router quote so new pools open on-market). Positions are NFTs: remove requires a positionAddress, and add without one opens a new position rather than topping up an existing one.

Meteora DLMM openPosition no longer rejects ranges wider than 70 bins. 70 is a transaction limit, not a position limit (POSITION_MAX_LENGTH is 1400). Wide ranges are chunked across transactions; quote-liquidity reports positionCount and transactionCount so callers see the cost before opening.

See Meteora and Connectors.

PRs: #671 | #696

๐Ÿ‹ Orca Whirlpools SDK Migration

The Orca connector moves to @orca-so/whirlpools 8.x, client 7.x, core 3.x, and Solana Kit 5.x. Position closure is reward-complete and Token-2022-aware (fixes ClosePositionNotEmpty from uncollected rewards). Position, pool, mint, and tick-array reads come from one getMultipleAccounts snapshot so fee math no longer mixes slots.

PRs: #676 | #687 | Thanks to mlguys! ๐Ÿ™

Other Updates

  • #675 โ€“ Fixed Uniswap CLMM execute-swap reverting with "Too little received" by clearing sqrtPriceLimitX96, which had capped every swap at its own average execution price and turned normal price impact into a failed, gas-burning transaction (slippage already comes from amountOutMinimum)
  • #695 โ€“ Fixed swap responses to report confirmed on-chain amounts, returned complete CLMM position listings, resolved Raydium positions from an address instead of requiring custody of the wallet key, and corrected the CoinGecko Demo and Pro onchain endpoints
  • #703 โ€“ Fixed the default wallet to resolve from the chain a request names, so an EVM swap no longer inherited the Solana default address and failed validation
  • #677 โ€“ Switched the Docker buildx workflow to build images on every push to main / development, not only on merged pull requests

๐Ÿฆ… What's New - Condor and Hummingbot API

๐Ÿค– New Condor Agents

This cycle ships a set of ready-to-run trading agents โ€” CLMM LP, HIP-3 funding, XRPL CLOB, Derive flow, Meteora launch LP, and adaptive grids:

  • Solana DEX LP Expert โ€” autonomous CLMM liquidity on Meteora / Orca / Raydium: scan GeckoTerminal by fee yield, size into slots, place LP Executors, recycle out-of-range idle capital. (#162)
  • Delta-Neutral Funding Agent โ€” HIP-3 (XYZ: issuer perps on Hyperliquid) carry: two pmm_mister controllers, beta-weighted long/short so net delta โ‰ˆ 0, leaned to the funding-favorable side. (#165)
  • XRPL CLOB Market Maker โ€” on-ledger maker for RLUSD/XRP that quotes tighter than AMM pool fees so pathfinding routes takers to the CLOB; fair value from a CEX, not on-ledger. (#176)
  • Derive Perp Smart-Money Flow Agent โ€” directional LONG/SHORT on derive_perpetual from cross-market capital-flow plus a Solana on-chain pulse. (#178)
  • Meteora Launch LP โ€” early LP on tokens graduating into DAMM v2, with mint/freeze-authority and holder-concentration gates, plus a chain-agnostic manage_amm tool. (#192)
  • Adaptive Grid Trader โ€” grid whose range comes from measured ATR, re-leaned hourly, with limit_price as the known worst-case exit. (#179)

See Condor for documentation.

๐Ÿ“ˆ DEX Trade Panel

The Condor web dashboard trade panel now treats a Gateway network like a CEX: pick a DEX venue, chart the pool, and manage LP positions. Venue traits (order book? LP? which strategies?) come from the API instead of a CEX/DEX boolean. Follow-up polish shares the default server with Telegram and warns on Meteora's bin cap before Gateway rejects the open.

PRs: #203 | #214 | hummingbot-api #206

๐Ÿง  Agent Runtime, Primitives & Custom LLMs

  • Custom OpenAI-compatible endpoints โ€” Venice, Together, Fireworks, vLLM, or LM Studio work as a first-class model source across Telegram, the web dashboard, and agent consults/loops. Endpoints live in config.yml; agent keys are custom@<endpoint>:<model-id>. (#175)
  • General agent upgrade โ€” finished background tasks stream back into the chat that started them; Telegram conversations and agent bindings survive respawn; shared skill/routine library (routine_cookbook, backtest_flow, self_improve); backtesting on one surface. (#194)
  • Discoverable primitives โ€” catalog() / describe() / call_routine() index fetchers and routines from the live code so agents can find and compose them without guessing imports. (#217)
  • Orphaned CLMM recovery โ€” manage_clmm plus manage_executors orphaned / resolve_orphan actions, so a terminal LP executor still holding an on-chain position is visible and recoverable instead of minting a second one. (#204)

๐Ÿ”’ Tailscale, MQTT & Broker Hardening

Condor and Hummingbot API close the remaining public-bind gaps from the v2.15.1 Tailscale work:

  • Postgres and EMQX bind 127.0.0.1 only. Docker no longer publishes them on all interfaces ahead of the host firewall.
  • Tailscale is exclusive. Enabling it binds the API and Condor dashboard to loopback and proxies through tailscale serve, instead of joining the tailnet while port 8000 stayed public.
  • MQTT requires authentication. The EMQX broker no longer accepts anonymous hbot/# subscribe or hbot/<id>/stop publish. Existing Linux deploys that came up with zero broker accounts need make emqx-auth-reset.
  • make doctor checks deps, .env, model readiness, dashboard bind, and API/broker connectivity. Condor delegates hummingbot-api setup instead of rewriting .env.

See the Tailscale guide.

PRs: condor #213 | condor #231 | hummingbot-api #220 | hummingbot-api #222 | hummingbot-api #225 | hummingbot-api #229

Other Updates

  • condor #172 โ€“ Fixed agent startup failing on an unquoted numeric MCP username or password in config.yml, which had broken LM Studio and other pydantic-ai backends
  • condor #180 โ€“ Added ticker volume to the web dashboard trade page
  • condor #196 โ€“ Fixed the executor risk gate to measure planned exposure in quote units, instead of counting a base-token amount as quote and rejecting valid executors Thanks to mlguys! ๐Ÿ™
  • condor #200 โ€“ Fixed the risk gate to accept controller_id as a top-level argument as well as inside executor_config, unblocking executor creates on the Derive Perp Smart-Money Flow agent
  • condor #205 โ€“ Added the user feedback survey to the README
  • condor #224 โ€“ Hardened sharing: matched BIP-39 recovery phrases regardless of separator, fixed outbox unshare, flush, and off-switch handling, and added secret redaction at ingress
  • condor #240 โ€“ Completed a 114-item security, correctness, and performance sweep, including owner-scoped reports, live share revocation, and moving Gateway infrastructure off the agent surface
  • hummingbot-api #202 โ€“ Added compression to bot data payloads
  • hummingbot-api #204 โ€“ Fixed controller config class resolution and removed the deprecated stat-arb controller
  • hummingbot-api #205 โ€“ Improved backtesting storage by archiving results to disk instead of holding them in memory
  • hummingbot-api #215 โ€“ Improved Gateway certificate generation and fixed order book validation when registering trading pairs
  • hummingbot-api #221 โ€“ Adopted Gateway's unified route surface, and recorded landed reverts and position rent on LP and swap executor events
  • hummingbot-api #223 โ€“ Added the human-readable field prompt to the connector config-map endpoint, so clients no longer had to invent their own labels for credential forms
  • hummingbot-api #226 โ€“ Added executor performance as a first-class read surface (GET /performance/history and /latest), so an executor's PnL survived a restart instead of being booked at zero
  • hummingbot-api #234 โ€“ Fixed order-history search to page by a real keyset cursor, instead of returning the same "0:" cursor and looping on page one forever