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 and 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, plus 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. That means all of them: IfxPy, the legacy informixdb, ODBC bridges, JPype/JDBC, and Perl’s DBD::Informix. To our knowledge informix-driver 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 →