ib_insync vs ib_async: Which IBKR Python Wrapper to Use
The most-used Python wrapper for Interactive Brokers' API was ib_insync. It was archived read-only on March 14, 2024, following the passing of its author, Ewald de Wit. The maintained community successor is ib_async, developed by the ib-api-reloaded organization. This page explains what changed, how compatible the two libraries are, and which to use for new and existing projects. No investment advice, no affiliate links — neutral guidance for researchers choosing their stack.
ib_insync is archived as of March 14, 2024. The repository is preserved for reference but receives no commits, bug fixes, or API compatibility updates. New IBKR Python projects must use ib_async.
Broker API comparisons — Module 2 cluster:
- Broker APIs hub ↑ up-link
- Alpaca vs Interactive Brokers
- ib_insync vs ib_async ← you are here
- Best Paper Trading Sandboxes
Head-to-Head Comparison
Both libraries wrap Interactive Brokers' TWS API and Client Portal Gateway using Python's asyncio model. The distinction is entirely one of maintenance status.
| Library | Status | Latest Release | Python Req. | Maintainer | License |
|---|---|---|---|---|---|
| ib_insync | Archived (read-only, 2024-03-14) | v0.9.86 (last) | ≥3.6 | Ewald de Wit (archived) | BSD |
| ib_async | Active | v2.0.1 (Jun 2025) | ≥3.10 | Matt Stancliff, ib-api-reloaded org | BSD |
Four Points of Nuance
1. The transition was due to the author's passing, not abandonment
ib_insync was actively maintained and widely used. Its archival was not a product decision or a case of a maintainer losing interest — Ewald de Wit passed away in early 2024, and the repository was archived shortly after. This context matters for how you interpret the codebase: ib_insync is not broken or deprecated in a technical sense. It is frozen at v0.9.86, a stable release that worked well. The library's asyncio design and core architecture are sound. The problem is that Interactive Brokers' API evolves, Python versions evolve, and there is no longer anyone to apply updates. ib_async was created precisely to continue that work.
2. API compatibility: ib_async is largely a drop-in replacement
ib_async was designed to be API-compatible with ib_insync. The core objects — IB, Contract, Order, Trade, Ticker — follow the same interfaces. The asyncio event loop model, the ib.connect() flow, and the callback/event patterns are preserved. Most ib_insync codebases can migrate to ib_async by changing the import statement and resolving any Python version requirements. Non-trivial differences and breaking changes are documented in ib_async's release notes. For projects with extensive ib_insync usage, review those notes before migrating — but expect the migration to be measured in hours, not days.
3. Python version requirement: 3.10+ is a real constraint
ib_async requires Python 3.10 or newer. ib_insync's last stable version works with Python 3.6+. If your trading system still runs Python 3.7, 3.8, or 3.9, migrating to ib_async requires a Python version upgrade as a prerequisite. Python 3.10 introduced structural pattern matching and improved typing features; ib_async uses the improved async/await semantics available from 3.10 onwards. For teams on older Python versions, the migration has two steps: Python upgrade first, then ib_insync → ib_async. Python 3.10+ is the current standard for production trading systems, so this is a worthwhile upgrade regardless.
4. ib_async is actively developed, not just patched
ib_async is not merely applying bug fixes to a frozen codebase. The ib-api-reloaded organization makes ongoing changes to keep pace with IBKR's API updates, resolve Python compatibility issues, and improve the library. v2.0.1 (June 2025) reflects a significant version bump from ib_insync's v0.9.x series. Any new IBKR API features — new order types, new data endpoints, authentication changes — will be implemented in ib_async and not in ib_insync. Over time, the divergence between the two libraries will increase as IBKR's API evolves.
Best for Whom
- All new IBKR Python projects: ib_async. No exceptions. ib_insync will not receive bug fixes or compatibility updates.
- Existing ib_insync code that works and is stable: Evaluate migration when you next touch the codebase, or when you hit a compatibility issue. There is no urgency for code that is not actively developed — ib_insync will not spontaneously break.
- Existing ib_insync code that is actively developed: Migrate now. Any new feature work or bug fixes you need will be easier on ib_async's maintained codebase.
When Neither Fits
Both ib_insync and ib_async wrap IBKR's API specifically. If you want to avoid IBKR's authentication complexity entirely, Alpaca (alpaca-py, REST + WebSocket, API key, no session management) covers US stocks, ETFs, options, and crypto with a significantly simpler integration path. For code-first backtesting that connects directly to IBKR live without a separate wrapper, QuantConnect/LEAN has native IBKR broker connection support via its Lean CLI. IBKR's official Python, Java, C++, and C# clients are also available for teams that prefer the official SDK over a community wrapper — but those clients are lower-level than ib_insync/ib_async and require more manual event loop management.
Related comparisons: Alpaca vs Interactive Brokers (full broker comparison) · Best Paper Trading Sandboxes (IBKR paper vs alternatives) · All broker APIs (full 11-venue table)
Frequently Asked Questions
- What happened to ib_insync?
- ib_insync was archived read-only on March 14, 2024, following the passing of its author, Ewald de Wit. The repository (github.com/erdewit/ib_insync) is preserved for reference but receives no further commits, bug fixes, or compatibility updates. Existing code that uses ib_insync will continue to work as long as the library's dependencies remain compatible, but new projects must use ib_async, the maintained community successor.
- Is ib_async a drop-in replacement for ib_insync?
- Largely yes. ib_async (ib-api-reloaded organization) is designed to be API-compatible with ib_insync. Most code that uses ib_insync's IB class, Contract, Order, and Trade objects will work with ib_async with minimal changes — primarily the import statement and any Python version adjustments. ib_async requires Python 3.10 or newer, which may require a Python upgrade if your environment is on an older version. The ib-api-reloaded organization documents breaking changes in its release notes.
- Which Python version does ib_async require?
- ib_async requires Python 3.10 or newer. ib_insync's last supported versions include Python 3.6 and newer. If your existing environment runs Python 3.7, 3.8, or 3.9, migrating to ib_async requires a Python version upgrade. Python 3.10+ is the current standard for most production trading systems, and the async/await improvements in 3.10+ are part of why ib_async chose it as the minimum version.
- Should I migrate my existing ib_insync code to ib_async?
- If your existing ib_insync code works and you are not actively developing it, there is no immediate urgency — ib_insync will not spontaneously break. The case for migrating: over time, IBKR may change its API in ways that require library updates, and ib_insync will not receive those fixes. If you hit a bug or compatibility issue, only ib_async will have a path to resolution. For any new IBKR Python project, start with ib_async; for stable existing code, evaluate migration when you next touch the codebase.
- What is the ib-api-reloaded organization?
- ib-api-reloaded is the GitHub organization that maintains ib_async. The project was created to provide an actively maintained fork of ib_insync after the original library was archived. The lead maintainer is Matt Stancliff. The organization follows the same asyncio-based architecture as ib_insync and aims to preserve API compatibility while adding Python 3.10+ support, ongoing IBKR API compatibility fixes, and continued development. The repository is at github.com/ib-api-reloaded/ib_async.
Drill IBKR API patterns, authentication architecture, and Python wrapper trade-offs with AlgoDrill's spaced-repetition flashcards.
Start Flashcards → View Reading List →