[workspace]
members = [".", "integration/common", "integration/async", "integration/sync", "tools/proto-gen"]
default-members = ["."]
[package]
name = "ibapi"
version = "5.2.0"
edition = "2021"
rust-version = "1.88"
authors = ["Wil Boayue <wil@wsblabs.com>"]
description = "An unofficial Rust client for the Interactive Brokers TWS API. Async (Tokio) and blocking clients for TWS and IB Gateway."
readme = "README.md"
repository = "https://github.com/wboayue/rust-ibapi/"
documentation = "https://docs.rs/ibapi/latest/ibapi/"
license = "MIT"
keywords = ["interactive-brokers", "ibkr", "tws", "algo-trading", "trading"]
categories = ["finance", "api-bindings", "asynchronous"]
exclude = [
"justfile",
"assets/",
".github/",
".gitignore",
".dockerignore",
"AGENTS.md",
"CONTRIBUTING.md",
"deny.toml",
"rustfmt.toml",
"rust-toolchain.toml",
"tools/",
"integration/",
"docs/rules/",
]
[package.metadata.docs.rs]
all-features = true
[features]
default = ["async"]
async = ["dep:tokio", "dep:tokio-stream", "dep:futures", "dep:async-trait"]
sync = ["dep:crossbeam"]
utoipa-6 = ["utoipa", "dep:utoipa6"]
utoipa = []
[dependencies]
byteorder = "1.5.0"
crossbeam = { version = "0.8.4", optional = true }
log = "0.4.22"
thiserror = "2.0"
time = {version = "0.3.47", features = ["formatting", "macros", "local-offset", "parsing", "serde"]}
time-tz = "2.0.0"
serde = {version = "1.0.214" , features = ["derive"]}
serde_json = "1.0"
prost = "0.14"
utoipa6 = { package = "utoipa", version = "6", optional = true, features = ["time"] }
tokio = { version = "1.41", features = ["net", "rt-multi-thread", "sync", "time", "macros", "io-util"], optional = true }
tokio-stream = { version = "0.1", default-features = false, features = ["sync"], optional = true }
futures = { version = "0.3.31", optional = true }
async-trait = { version = "0.1.83", optional = true }
[dev-dependencies]
anyhow = "1.0.92"
clap = { version = "4.5.20", features = ["derive"] }
env_logger = "0.11.5"
pretty_assertions = "1.4.1"
tempfile = "3.13"
temp-env = { version = "0.3.6", features = ["async_closure"] }
serial_test = "4.0.1"
tokio = { version = "1.41", features = ["test-util"] }
toml = "1.0"
[[example]]
name = "async_connect"
path = "examples/async/connect.rs"
required-features = ["async"]
[[example]]
name = "async_positions"
path = "examples/async/positions.rs"
required-features = ["async"]
[[example]]
name = "async_account_summary"
path = "examples/async/account_summary.rs"
required-features = ["async"]
[[example]]
name = "async_pnl"
path = "examples/async/pnl.rs"
required-features = ["async"]
[[example]]
name = "async_managed_accounts"
path = "examples/async/managed_accounts.rs"
required-features = ["async"]
[[example]]
name = "async_smart_components"
path = "examples/async/smart_components.rs"
required-features = ["async"]
[[example]]
name = "async_soft_dollar_tiers"
path = "examples/async/soft_dollar_tiers.rs"
required-features = ["async"]
[[example]]
name = "async_config"
path = "examples/async/config.rs"
required-features = ["async"]
[[example]]
name = "async_update_config"
path = "examples/async/update_config.rs"
required-features = ["async"]
[[example]]
name = "async_user_info"
path = "examples/async/user_info.rs"
required-features = ["async"]
[[example]]
name = "async_request_fa"
path = "examples/async/request_fa.rs"
required-features = ["async"]
[[example]]
name = "async_replace_fa"
path = "examples/async/replace_fa.rs"
required-features = ["async"]
[[example]]
name = "async_set_server_log_level"
path = "examples/async/set_server_log_level.rs"
required-features = ["async"]
[[example]]
name = "async_verify_handshake"
path = "examples/async/verify_handshake.rs"
required-features = ["async"]
[[example]]
name = "async_wsh_metadata"
path = "examples/async/wsh_metadata.rs"
required-features = ["async"]
[[example]]
name = "async_wsh_event_data_by_contract"
path = "examples/async/wsh_event_data_by_contract.rs"
required-features = ["async"]
[[example]]
name = "async_wsh_event_data_by_filter"
path = "examples/async/wsh_event_data_by_filter.rs"
required-features = ["async"]
[[example]]
name = "async_market_data"
path = "examples/async/market_data.rs"
required-features = ["async"]
[[example]]
name = "async_order_update_stream"
path = "examples/async/order_update_stream.rs"
required-features = ["async"]
[[example]]
name = "async_preset_attached_orders"
path = "examples/async/preset_attached_orders.rs"
required-features = ["async"]
[[example]]
name = "async_notice_stream"
path = "examples/async/notice_stream.rs"
required-features = ["async"]
[[example]]
name = "async_place_order"
path = "examples/async/place_order.rs"
required-features = ["async"]
[[example]]
name = "async_wait_for_fill"
path = "examples/async/wait_for_fill.rs"
required-features = ["async"]
[[example]]
name = "async_wait_for_bracket"
path = "examples/async/wait_for_bracket.rs"
required-features = ["async"]
[[example]]
name = "async_realtime_bars"
path = "examples/async/realtime_bars.rs"
required-features = ["async"]
[[example]]
name = "async_tick_by_tick"
path = "examples/async/tick_by_tick.rs"
required-features = ["async"]
[[example]]
name = "async_market_depth"
path = "examples/async/market_depth.rs"
required-features = ["async"]
[[example]]
name = "async_historical_data"
path = "examples/async/historical_data.rs"
required-features = ["async"]
[[example]]
name = "async_historical_ticks"
path = "examples/async/historical_ticks.rs"
required-features = ["async"]
[[example]]
name = "async_head_timestamp"
path = "examples/async/head_timestamp.rs"
required-features = ["async"]
[[example]]
name = "async_historical_schedules"
path = "examples/async/historical_schedules.rs"
required-features = ["async"]
[[example]]
name = "async_tick_by_tick_last"
path = "examples/async/tick_by_tick_last.rs"
required-features = ["async"]
[[example]]
name = "async_historical_ticks_mid_point"
path = "examples/async/historical_ticks_mid_point.rs"
required-features = ["async"]
[[example]]
name = "async_historical_ticks_trade"
path = "examples/async/historical_ticks_trade.rs"
required-features = ["async"]
[[example]]
name = "async_histogram_data"
path = "examples/async/histogram_data.rs"
required-features = ["async"]
[[example]]
name = "async_broad_tape_news"
path = "examples/async/broad_tape_news.rs"
required-features = ["async"]
[[example]]
name = "async_calculate_implied_volatility"
path = "examples/async/calculate_implied_volatility.rs"
required-features = ["async"]
[[example]]
name = "async_calculate_option_price"
path = "examples/async/calculate_option_price.rs"
required-features = ["async"]
[[example]]
name = "async_connection_monitoring"
path = "examples/async/connection_monitoring.rs"
required-features = ["async"]
[[example]]
name = "async_last_trade_date_check"
path = "examples/async/last_trade_date_check.rs"
required-features = ["async"]
[[example]]
name = "async_contract_details"
path = "examples/async/contract_details.rs"
required-features = ["async"]
[[example]]
name = "async_contract_details_stream"
path = "examples/async/contract_details_stream.rs"
required-features = ["async"]
[[example]]
name = "async_contract_news"
path = "examples/async/contract_news.rs"
required-features = ["async"]
[[example]]
name = "async_historical_news"
path = "examples/async/historical_news.rs"
required-features = ["async"]
[[example]]
name = "async_market_rule"
path = "examples/async/market_rule.rs"
required-features = ["async"]
[[example]]
name = "async_matching_symbols"
path = "examples/async/matching_symbols.rs"
required-features = ["async"]
[[example]]
name = "async_news_article"
path = "examples/async/news_article.rs"
required-features = ["async"]
[[example]]
name = "async_news_bulletins"
path = "examples/async/news_bulletins.rs"
required-features = ["async"]
[[example]]
name = "async_news_providers"
path = "examples/async/news_providers.rs"
required-features = ["async"]
[[example]]
name = "async_option_chain"
path = "examples/async/option_chain.rs"
required-features = ["async"]
[[example]]
name = "async_options_exercise"
path = "examples/async/options_exercise.rs"
required-features = ["async"]
[[example]]
name = "async_scanner_parameters"
path = "examples/async/scanner_parameters.rs"
required-features = ["async"]
[[example]]
name = "async_scanner_subscription"
path = "examples/async/scanner_subscription.rs"
required-features = ["async"]
[[example]]
name = "async_scanner_subscription_complex"
path = "examples/async/scanner_subscription_complex.rs"
required-features = ["async"]
[[example]]
name = "async_subscription_fan_out"
path = "examples/async/subscription_fan_out.rs"
required-features = ["async"]
[[example]]
name = "bracket_order"
path = "examples/sync/bracket_order.rs"
required-features = ["sync"]
[[example]]
name = "breakout"
path = "examples/sync/breakout.rs"
required-features = ["sync"]
[[example]]
name = "broad_tape_news"
path = "examples/sync/broad_tape_news.rs"
required-features = ["sync"]
[[example]]
name = "cancel_orders"
path = "examples/sync/cancel_orders.rs"
required-features = ["sync"]
[[example]]
name = "completed_orders"
path = "examples/sync/completed_orders.rs"
required-features = ["sync"]
[[example]]
name = "contract_news"
path = "examples/sync/contract_news.rs"
required-features = ["sync"]
[[example]]
name = "executions"
path = "examples/sync/executions.rs"
required-features = ["sync"]
[[example]]
name = "historical_news"
path = "examples/sync/historical_news.rs"
required-features = ["sync"]
[[example]]
name = "news_article"
path = "examples/sync/news_article.rs"
required-features = ["sync"]
[[example]]
name = "news_bulletins"
path = "examples/sync/news_bulletins.rs"
required-features = ["sync"]
[[example]]
name = "news_providers"
path = "examples/sync/news_providers.rs"
required-features = ["sync"]
[[example]]
name = "options_exercise"
path = "examples/sync/options_exercise.rs"
required-features = ["sync"]
[[example]]
name = "options_purchase"
path = "examples/sync/options_purchase.rs"
required-features = ["sync"]
[[example]]
name = "orders"
path = "examples/sync/orders.rs"
required-features = ["sync"]
[[example]]
name = "place_order"
path = "examples/sync/place_order.rs"
required-features = ["sync"]
[[example]]
name = "scanner_parameters"
path = "examples/sync/scanner_parameters.rs"
required-features = ["sync"]
[[example]]
name = "scanner_subscription_active_stocks"
path = "examples/sync/scanner_subscription_active_stocks.rs"
required-features = ["sync"]
[[example]]
name = "scanner_subscription_complex_orders"
path = "examples/sync/scanner_subscription_complex_orders.rs"
required-features = ["sync"]
[[example]]
name = "submit_order"
path = "examples/sync/submit_order.rs"
required-features = ["sync"]
[[example]]
name = "wait_for_fill"
path = "examples/sync/wait_for_fill.rs"
required-features = ["sync"]
[[example]]
name = "wait_for_bracket"
path = "examples/sync/wait_for_bracket.rs"
required-features = ["sync"]
[[example]]
name = "calculate_implied_volatility"
path = "examples/sync/calculate_implied_volatility.rs"
required-features = ["sync"]
[[example]]
name = "calculate_option_price"
path = "examples/sync/calculate_option_price.rs"
required-features = ["sync"]
[[example]]
name = "contract_details"
path = "examples/sync/contract_details.rs"
required-features = ["sync"]
[[example]]
name = "contract_details_stream"
path = "examples/sync/contract_details_stream.rs"
required-features = ["sync"]
[[example]]
name = "family_codes"
path = "examples/sync/family_codes.rs"
required-features = ["sync"]
[[example]]
name = "head_timestamp"
path = "examples/sync/head_timestamp.rs"
required-features = ["sync"]
[[example]]
name = "histogram_data"
path = "examples/sync/histogram_data.rs"
required-features = ["sync"]
[[example]]
name = "historical_data"
path = "examples/sync/historical_data.rs"
required-features = ["sync"]
[[example]]
name = "historical_data_adjusted"
path = "examples/sync/historical_data_adjusted.rs"
required-features = ["sync"]
[[example]]
name = "historical_data_recent"
path = "examples/sync/historical_data_recent.rs"
required-features = ["sync"]
[[example]]
name = "historical_data_options"
path = "examples/sync/historical_data_options.rs"
required-features = ["sync"]
[[example]]
name = "historical_schedules"
path = "examples/sync/historical_schedules.rs"
required-features = ["sync"]
[[example]]
name = "historical_schedules_ending_now"
path = "examples/sync/historical_schedules_ending_now.rs"
required-features = ["sync"]
[[example]]
name = "historical_ticks_bid_ask"
path = "examples/sync/historical_ticks_bid_ask.rs"
required-features = ["sync"]
[[example]]
name = "historical_ticks_trade"
path = "examples/sync/historical_ticks_trade.rs"
required-features = ["sync"]
[[example]]
name = "managed_accounts"
path = "examples/sync/managed_accounts.rs"
required-features = ["sync"]
[[example]]
name = "market_data"
path = "examples/sync/market_data.rs"
required-features = ["sync"]
[[example]]
name = "market_depth"
path = "examples/sync/market_depth.rs"
required-features = ["sync"]
[[example]]
name = "matching_symbols"
path = "examples/sync/matching_symbols.rs"
required-features = ["sync"]
[[example]]
name = "pnl"
path = "examples/sync/pnl.rs"
required-features = ["sync"]
[[example]]
name = "positions"
path = "examples/sync/positions.rs"
required-features = ["sync"]
[[example]]
name = "readme_realtime_data_1"
path = "examples/sync/readme_realtime_data_1.rs"
required-features = ["sync"]
[[example]]
name = "readme_realtime_data_2"
path = "examples/sync/readme_realtime_data_2.rs"
required-features = ["sync"]
[[example]]
name = "server_time"
path = "examples/sync/server_time.rs"
required-features = ["sync"]
[[example]]
name = "stream_bars"
path = "examples/sync/stream_bars.rs"
required-features = ["sync"]
[[example]]
name = "stream_retry"
path = "examples/sync/stream_retry.rs"
required-features = ["sync"]
[[example]]
name = "switch_market_data_type"
path = "examples/sync/switch_market_data_type.rs"
required-features = ["sync"]
[[example]]
name = "account_summary"
path = "examples/sync/account_summary.rs"
required-features = ["sync"]
[[example]]
name = "account_updates"
path = "examples/sync/account_updates.rs"
required-features = ["sync"]
[[example]]
name = "account_updates_multi"
path = "examples/sync/account_updates_multi.rs"
required-features = ["sync"]
[[example]]
name = "connect"
path = "examples/sync/connect.rs"
required-features = ["sync"]
[[example]]
name = "connection_monitoring"
path = "examples/sync/connection_monitoring.rs"
required-features = ["sync"]
[[example]]
name = "notice_stream"
path = "examples/sync/notice_stream.rs"
required-features = ["sync"]
[[example]]
name = "tick_by_tick_all_last"
path = "examples/sync/tick_by_tick_all_last.rs"
required-features = ["sync"]
[[example]]
name = "tick_by_tick_bid_ask"
path = "examples/sync/tick_by_tick_bid_ask.rs"
required-features = ["sync"]
[[example]]
name = "tick_by_tick_last"
path = "examples/sync/tick_by_tick_last.rs"
required-features = ["sync"]
[[example]]
name = "tick_by_tick_mid_point"
path = "examples/sync/tick_by_tick_mid_point.rs"
required-features = ["sync"]
[[example]]
name = "wsh_event_data_by_contract"
path = "examples/sync/wsh_event_data_by_contract.rs"
required-features = ["sync"]
[[example]]
name = "wsh_event_data_by_filter"
path = "examples/sync/wsh_event_data_by_filter.rs"
required-features = ["sync"]
[[example]]
name = "smart_components"
path = "examples/sync/smart_components.rs"
required-features = ["sync"]
[[example]]
name = "soft_dollar_tiers"
path = "examples/sync/soft_dollar_tiers.rs"
required-features = ["sync"]
[[example]]
name = "config"
path = "examples/sync/config.rs"
required-features = ["sync"]
[[example]]
name = "update_config"
path = "examples/sync/update_config.rs"
required-features = ["sync"]
[[example]]
name = "user_info"
path = "examples/sync/user_info.rs"
required-features = ["sync"]
[[example]]
name = "request_fa"
path = "examples/sync/request_fa.rs"
required-features = ["sync"]
[[example]]
name = "replace_fa"
path = "examples/sync/replace_fa.rs"
required-features = ["sync"]
[[example]]
name = "set_server_log_level"
path = "examples/sync/set_server_log_level.rs"
required-features = ["sync"]
[[example]]
name = "verify_handshake"
path = "examples/sync/verify_handshake.rs"
required-features = ["sync"]
[[example]]
name = "wsh_metadata"
path = "examples/sync/wsh_metadata.rs"
required-features = ["sync"]
[[example]]
name = "historical_ticks_mid_point"
path = "examples/sync/historical_ticks_mid_point.rs"
required-features = ["sync"]
[[example]]
name = "market_depth_exchanges"
path = "examples/sync/market_depth_exchanges.rs"
required-features = ["sync"]
[[example]]
name = "market_rule"
path = "examples/sync/market_rule.rs"
required-features = ["sync"]
[[example]]
name = "next_order_id"
path = "examples/sync/next_order_id.rs"
required-features = ["sync"]
[[example]]
name = "option_chain"
path = "examples/sync/option_chain.rs"
required-features = ["sync"]
[[example]]
name = "pnl_single"
path = "examples/sync/pnl_single.rs"
required-features = ["sync"]
[[example]]
name = "positions_multi"
path = "examples/sync/positions_multi.rs"
required-features = ["sync"]
[[example]]
name = "readme_connection"
path = "examples/sync/readme_connection.rs"
required-features = ["sync"]
[[example]]
name = "readme_historical_data"
path = "examples/sync/readme_historical_data.rs"
required-features = ["sync"]
[[example]]
name = "readme_multi_threading_1"
path = "examples/sync/readme_multi_threading_1.rs"
required-features = ["sync"]
[[example]]
name = "readme_multi_threading_2"
path = "examples/sync/readme_multi_threading_2.rs"
required-features = ["sync"]
[[example]]
name = "readme_place_order"
path = "examples/sync/readme_place_order.rs"
required-features = ["sync"]
[[example]]
name = "async_group_events"
path = "examples/async/group_events.rs"
required-features = ["async"]
[[example]]
name = "group_events"
path = "examples/sync/group_events.rs"
required-features = ["sync"]