Install & first query
Up and running with the IBM Informix Developer Edition Docker image in five minutes. Get started →
Every other Informix driver wraps IBM's C SDK or the JDBC JAR. We weren't into that.
So we read the protocol and wrote it ourselves — PEP 249, sync + async, pooled, TLS.
Within 10% of IBM's own C driver on bulk fetches, 1.6× faster on
bulk inserts. No compile step. No LD_LIBRARY_PATH ritual. No
libcrypt.so.1 from 2018.
Pipelined executemany sends every BIND+EXECUTE PDU before draining responses. IBM’s C driver still pays one round-trip per row. We figured we could do better.
Phase 39’s buffered reader closed the gap from 2.4× to within measurement noise of the C driver. The remaining ~10% is honest physics — for now.
No 92 MB OneDB tarball. No libcrypt.so.1 from 2018. No LD_LIBRARY_PATH ritual. Works on Python 3.10–3.14 — including the versions IfxPy doesn’t.
FastAPI, aiohttp, asyncio. Pool, connections, cursors all have async def versions. IfxPy has none of this.
connect(), Connection, Cursor, description, rowcount, the full DB-API exception hierarchy — and threadsafe sharing through a per-connection wire lock.
Decompiled IBM JDBC. Annotated socat captures. Differential testing against IfxPy on every codec path. Every architectural decision lives in the phase log. Receipts.
import informix_db
with informix_db.connect( host="db.example.com", port=9088, user="informix", password="...", database="mydb", server="informix",) as conn: cur = conn.cursor() cur.execute("SELECT id, name FROM users WHERE id = ?", (42,)) user_id, name = cur.fetchone()That’s it. No IBM_DB_HOME. No DSN file. No libcrypt.so.1.
The existing tools were not my style.
Every other Informix driver in any language wraps either IBM’s C Client SDK or the JDBC JAR. IfxPy, the legacy informixdb, ODBC bridges, JPype/JDBC, Perl DBD::Informix — all of them. To our knowledge informix-db is the first pure-socket Informix driver in any language.
The OneDB CSDK is a 92 MB tarball. It needs libcrypt.so.1 (deprecated 2018, missing on Arch, Fedora 35+, RHEL 9). It needs four LD_LIBRARY_PATH entries. It needs setuptools < 58. And IfxPy itself is broken on Python 3.12+. For containerized deployments, ETL pipelines, FastAPI services, or anywhere a build toolchain on the runtime is friction, this driver is the alternative that didn’t previously exist. Now it does.
Install & first query
Up and running with the IBM Informix Developer Edition Docker image in five minutes. Get started →
Compared to IfxPy
Head-to-head benchmarks, install gauntlet, and when each driver wins. Read →
The buffered reader
How Phase 39 closed the bulk-fetch gap from 2.4× to ~1.1× — and the architectural mistake the first pass got wrong. Read →
Architecture
SQLI on the wire. Sockets, framing, codec, resultsets. How the layers stack. Read →