Skip to content
Pure Python · No CSDK · No JVM · No libcrypt.so.1

Talk to Informix without linking against IBM's 92 MB tarball.

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.

pip install informix-driver
live capture · 01-connect-only.socat · sqli/9088

1.6× faster bulk inserts than IfxPy

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.

~10% behind IfxPy on bulk fetches

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.

50 KB wheel. Zero native deps.

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.

Async, like a modern driver should be

FastAPI, aiohttp, asyncio. Pool, connections, cursors all have async def versions. IfxPy has none of this.

PEP 249, no surprises

connect(), Connection, Cursor, description, rowcount, the full DB-API exception hierarchy — and threadsafe sharing through a per-connection wire lock.

Clean-room reverse engineering

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 →