ib_async

The community continuation of ib_insync — same API, new maintainers, TWS still required.

by ib-api-reloaded

Last updated

From
Free
Licence
BSD-2-Clause
Self-hosted
Yes
Platforms
Library

What it is

ib_async is a Python library that speaks Interactive Brokers' TWS API protocol directly and hands back typed objects — Stock('AAPL', 'SMART', 'USD'), ib.reqHistoricalData(...), ib.placeOrder(...). The design is ib_insync's, unchanged: a linear synchronous style that works in scripts and Jupyter, the same calls available as ...Async coroutines for asyncio applications, and an IB object that keeps positions, orders and account values in sync as events arrive from the gateway.

It is a continuation, and the dates are worth stating precisely. ib_insync's author, Ewald de Wit, died on Monday 11 March 2024. The notice is in that repository's own README, signed by Maritza and Philippe de Wit, added by a commit titled "In memoriam" on 14 March 2024 — the last commit it ever received, and the repository is now a public archive. Five days after it, on 19 March 2024, ib_async 1.0.0 was published to PyPI under a new GitHub organisation, ib-api-reloaded, which describes itself as an "Alternative Interactive Brokers API Client (unaffiliated)". The LICENSE file carries both copyright lines — Ewald de Wit for 2019–2023, Matt Stancliff for 2024 — under unchanged BSD 2-Clause terms.

Its current state, also by date: version 2.1.0 went to PyPI on 8 December 2025, and the default branch main last moved two days before that. Work did not stop — the next branch carries commits through 14 July 2026 — but none of it is released, and there is no v2.1.0 tag or GitHub release at all. The newest release on the repo is v2.0.1 from 22 June 2025. Install from PyPI today and you get December's code.

Pricing

Nothing is for sale — no pro build, no hosted tier, no commercial licence. The bills belong to Interactive Brokers: an IBKR account with API access, plus a market-data subscription for any real-time quote the library streams. Delayed quotes need no subscription and are one call away with ib.reqMarketDataType(3).

Data & coverage

Whatever the account behind the gateway can see. The contract classes are Stock, Option, Future, ContFuture, Forex, Index, CFD, Commodity, Bond, FuturesOption, MutualFund, Warrant, Crypto and Bag combos — IB's instrument range rather than a curated one. Past quotes and historical bars, the client exposes IB's scanner (reqScannerData), market depth, historical ticks, fundamental data, news providers and historical news, Wall Street Horizon event data, calculateImpliedVolatility and calculateOptionPrice, account summary, positions and PnL streams. None of it is ib_async's data, and entitlements stay IB's question.

Integrations

pip install ib_async, and the name is the project's own: PyPI lists the repository as ib-api-reloaded/ib_async with Matt Stancliff as maintainer, and the README prints that same line. The trap is next door — ib_insync is still installable, resolving to 0.9.86 from July 2023 and pointing at the archived repo. Nothing warns you.

Python 3.10 or newer and three dependencies: aeventkit (the organisation's fork of de Wit's eventkit, renamed on PyPI, still imported as eventkit), nest_asyncio and tzdata. What it connects to is a desktop application — TWS with API mode enabled, default port 7497, or IB Gateway on 4001, with "Download open orders on connection" checked. ib_async.ibcontroller ships IBC and Watchdog to launch that app with tradingMode set to live or paper and restart it when it dies — the part everyone needs by week two. FlexReport pulls IB Flex statements by token and query id for the account history the live API will not give you.

Limitations

  • Useless without an IB account. Not a licensing restriction — the code is free to read, fork and run — but it connects to nothing unless TWS or Gateway is running and logged in.
  • Not a REST client. IB's Web API is a different product; this speaks the socket protocol to a Java desktop app that has to stay up through IB's daily restarts.
  • The protocol range is pinned in the source. MinClientVersion is 157 and MaxClientVersion 178, so the handshake advertises v157..178 and anything older is dropped with "TWS/gateway version must be >= 972". Fields IB adds above 178 arrive when a maintainer raises the ceiling.
  • The client throttles itself to MaxRequests = 45 per second, and IB's own pacing rules sit behind that — historical-data requests in particular.
  • Nine months since the last release, with the active work sitting unreleased on next.
  • Effectively one maintainer. The organisation shows no public members, and commits on both branches are overwhelmingly from one account.
  • No backtester. This is a connection, not a research stack.
  • Unaffiliated with Interactive Brokers. When the API changes, you have an issue tracker.

Alternatives

If what you want is the engine rather than the connection, NautilusTrader reaches IB through its own adapter and gives you a backtester that runs the same strategy live, and QuantRocket wires Zipline and Moonshot to IB inside Docker. backtrader has an IB store too, but it rests on IbPy, archived since January 2017. The rest of the shelf is in backtesting frameworks.

Specs

Interfaces
Python, Python
Export
None
Asset classes
Stocks, ETF, Options, Futures, Forex, Crypto, Bonds, Indices, Mutual funds, Commodities
Markets
Global
Platforms
Library
AI features
None
Capabilities
Scanning, Automation, Live trading, Paper trading, Portfolio tracking, Broker import, News, Options analysis
Pricing verified
Capabilities verified
Coverage verified

Also worth comparing

  • LumibotOne strategy class for backtest and live, plus a built-in LLM agent runtime.
  • NautilusTraderRust core, Python API, one strategy that backtests and trades live unchanged.
  • StockSharpC#/.NET algo stack with 384 connectors; source is published but no longer open source.
  • Backtesting.pyA single-instrument Python backtester — one OHLC series, one strategy, no live trading.
  • BacktraderAn event-driven Python backtester with 122 indicators, frozen since April 2023.
  • btPython backtesting for allocation and rebalancing rules, not entries and exits.

FAQ

Is ib_async the same project as ib_insync?

It is its continuation, not a rename. ib_insync's author, Ewald de Wit, died in March 2024; the archived repository's last commit added a notice from his family. ib_async 1.0.0 was published five days later by a new GitHub organisation, keeping the code, the BSD 2-Clause licence and his copyright line.

Can I still use ib_insync?

It still installs — 0.9.86, uploaded in July 2023 — and it still works against TWS. Nothing will be fixed in it, because the repository is a public archive. Anything new, including support for newer protocol fields, happens in ib_async.

Do I need an Interactive Brokers account to use ib_async?

Yes. The library is free to read and run, but it connects to a locally running TWS or IB Gateway logged into an IBKR account. Without those credentials it has nothing to talk to, and real-time quotes additionally need market-data subscriptions bought from IB.

Does ib_async need IB's own ibapi package?

No. It implements the TWS API binary protocol itself, and its only runtime dependencies are aeventkit, nest_asyncio and tzdata. pandas is optional and is imported only by the util.df and util.barplot helpers.