ib_async
The community continuation of ib_insync — same API, new maintainers, TWS still required.
by ib-api-reloaded
Last updated
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.
MinClientVersionis 157 andMaxClientVersion178, so the handshake advertisesv157..178and 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 = 45per 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
- Lumibot — One strategy class for backtest and live, plus a built-in LLM agent runtime.
- NautilusTrader — Rust core, Python API, one strategy that backtests and trades live unchanged.
- StockSharp — C#/.NET algo stack with 384 connectors; source is published but no longer open source.
- Backtesting.py — A single-instrument Python backtester — one OHLC series, one strategy, no live trading.
- Backtrader — An event-driven Python backtester with 122 indicators, frozen since April 2023.
- bt — Python 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.