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 live trading finals are October 6โ€“8, 2026, with winners announced October 7 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