# informix-db Pure-Python driver for IBM Informix IDS, speaking the SQLI wire protocol over raw sockets. **No IBM Client SDK. No JVM. No native libraries.** ## Status 🟢 **Phase 1 complete.** `connect()` / `close()` work end-to-end against a real Informix server. Cursor / execute / fetch land in Phase 2. To our knowledge this is the **first pure-socket Informix driver in any language** — every other Informix driver (`IfxPy`, the legacy `informixdb`, ODBC bridges, Perl `DBD::Informix`) wraps either IBM's CSDK or the JDBC JAR. ## Quick start ```python import informix_db with informix_db.connect( host="127.0.0.1", port=9088, user="informix", password="in4mix", database="sysmaster", server="informix", ) as conn: # cursor() / execute() / fetchone() arrive in Phase 2 pass ``` ## Test against the official Informix dev container ```bash docker compose -f tests/docker-compose.yml up -d # IBM Developer Edition, pinned by digest uv sync --extra dev uv run pytest # 34 unit tests (no Docker needed) uv run pytest -m integration # 6 integration tests (needs the container) ``` ## Phase 0 artifacts (still useful — they ARE the public reference) - [`docs/PROTOCOL_NOTES.md`](docs/PROTOCOL_NOTES.md) — byte-level wire-format reference, derived from packet captures + JDBC decompilation, validated against a real server - [`docs/JDBC_NOTES.md`](docs/JDBC_NOTES.md) — index into the decompiled IBM JDBC driver's wire-protocol classes - [`docs/DECISION_LOG.md`](docs/DECISION_LOG.md) — running rationale for protocol / auth / type decisions - [`docs/CAPTURES/`](docs/CAPTURES) — socat hex-dump captures of three reference scenarios (connect, SELECT, full DML cycle) - [`tests/reference/RefClient.java`](tests/reference/RefClient.java) — re-runnable JDBC ground-truth client for capturing fresh traces ## License MIT.