This release adds support for Expedition’s EXP_API_VERSION 1.2 DLL (ExpeditionX), while continuing to work with older Expedition installs.
Highlights
Dual DLL compatibility — ExpeditionDLL now probes available exports at init, so the same package works on legacy ExpDLL and ExpeditionX without separate installs.
New typed channel API — get_exp_var2() / set_exp_var2() and the ExVal type wrap the new GetExpVar2 / SetExpVar2 exports.
Existing code keeps working — set_exp_vars(), get_exp_vars(), and boat position helpers automatically fall back to single-var SetExpVar / GetExpVar when batch exports are removed.
Clear capability detection — use api_version ("legacy" or "1.2"), has_batch_vars, and has_exp_var2 to branch in your integration code.
What still works on Expedition < 12.8.0
Core channel I/O, system vars/bools, boat count, MOB, user var names, and batch position/var updates (via Python fallback).
Legacy-only APIs
On ExpDLL 1.2, these methods raise ExpeditionAPIError because the underlying exports were removed:
Var precision: set_var_precision, get_var_precision
Boat UI: set_boat_name, get_boat_colour, set_boat_colour
AIS: get_ais_dangerous_cpa
Marks/routes: ping_mark, create_active_route, add_mark_to_active_route
get_variation() still works on 1.2 via the existing Var.MagVar fallback when GetVariation is not exported.
Upgrade notes
No enum breaking changes — channel enums are unchanged from 2.0; this is a DLL-wrapper release, not a major bump.
Check your Expedition install — Python bitness must still match the Expedition install (32 vs 64 bit).
Inspect capabilities at runtime if you use legacy-only APIs:
from Expedition import ExpeditionDLL
exp = ExpeditionDLL.from_default_location()
print(exp.api_version) # "1.2" or "legacy"
Requirements
Windows with Expedition installed and running (for live DLL integration)
Python 3.10+
Full details: see CHANGELOG.md.