gitwtfhub

wtf is abi3audit?

pypa/abi3audit — explained in plain English

Analysis updated 2026-08-15 · repo last pushed 2026-08-10

123PythonAudience · developerComplexity · 2/5ActiveSetup · easy

TL;DR

abi3audit scans Python packages that claim cross-version compatibility via the abi3 tag and flags C-level function calls that break that promise, preventing crashes and security issues on older Python versions.

Mindmap

mindmap
  root((abi3audit))
    What it does
      Scans compiled Python extensions
      Checks function calls against abi3 rules
      Reports version mismatches
    Inputs
      Single compiled files
      Packaged wheels
      Entire PyPI package history
    Outputs
      Readable text summary
      JSON report for automation
    Use cases
      Catch abi3 tag misuse
      Prevent crashes on older Python
      Audit packages before release
    Audience
      C-extension maintainers
      Packaging infrastructure teams
      Security reviewers
    Limitations
      Cannot catch runtime tricks
      Flags unknown Py_ functions
      May produce rare false positives

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Why would anyone build with this?

REASON 1

Audit your own C-extension package before tagging it abi3 to catch functions that aren't stable on your target Python version.

REASON 2

Scan a wheel downloaded from PyPI to verify its abi3 compatibility claim before deploying it across multiple Python versions.

REASON 3

Generate a JSON report of abi3 violations for integration into a CI pipeline that blocks non-compliant package releases.

REASON 4

Inspect an entire package's release history on PyPI to find versions where an abi3 tag was incorrectly applied.

What's in the stack?

Pythonabi3-inspectpackagingpipJSON

How it stacks up

pypa/abi3auditfangcun-ai/skillwardnolanx-ai/nolanx.ai
Stars123123123
LanguagePythonPythonPython
Last pushed2026-08-10
MaintenanceActive
Setup difficultyeasymoderatehard
Complexity2/54/54/5
Audiencedeveloperops devopsgeneral

Figures from each repo's GitHub metadata at analysis time.

How do you spin it up?

Difficulty · easy Time to first run · 5min

Install via pip and run against any wheel, compiled file, or PyPI package name with no external dependencies required.

Open-source license permitting free use, modification, and distribution with attribution.

Wtf does this do

Some Python packages include pieces written in C for speed. When developers distribute these, they can use a special tag called "abi3" that promises the code will work across multiple future versions of Python without needing to be recompiled. Unfortunately, Python doesn't actually verify that promise, a package can slap the abi3 tag on without anyone checking that the code truly meets the requirements. That mismatch can cause crashes or even security holes down the line. abi3audit is a tool that scans these packages and flags the problem. The tool inspects the compiled files inside a Python package and checks every function call against a master list of what's actually allowed under the abi3 rules. If it finds a function that only became "stable" in Python 3.10, but the package is tagged as compatible with Python 3.6, it reports a mismatch. You can run it on a single compiled file, a packaged wheel, or an entire package's history on PyPI. It can print a readable summary or spit out a JSON report for automation. The primary audience is anyone who builds or maintains packages that use the abi3 tag, developers of Python extensions written in C, and the packaging infrastructure that serves those extensions to users. For example, if a maintainer tags their package as compatible with Python 3.7 forward but accidentally uses a C function that wasn't stabilized until 3.10, this tool would flag it before users on older Python versions hit mysterious crashes. The tool is honest about its blind spots. It can't catch tricks where an extension sneaks around the rules at runtime, and it doesn't have an exhaustive list of every forbidden function, instead it flags anything starting with "Py_" or "_Py_" that isn't on the approved list. That approach could rarely produce a false positive, but it's far safer than no checking at all. The recommendation is to scan entire packaged wheels rather than loose files, since wheels carry the metadata needed to know what the intended compatibility target actually was.

Yoink these prompts

Prompt 1
I have a Python wheel file tagged abi3 targeting Python 3.7+. Install abi3audit and scan the wheel, then show me a human-readable summary of any abi3 compliance violations.
Prompt 2
Write a CI step using abi3audit that scans every wheel artifact in dist/, outputs JSON, and fails the build if any abi3 violations are found.
Prompt 3
I want to audit every release of the package 'cryptography' on PyPI for abi3 compliance. Use abi3audit to scan the package's full release history and report which versions have mismatches.
Prompt 4
I have a single compiled .so file from a Python C extension. Run abi3audit against just that file and explain what each flagged symbol means in plain English.

Frequently asked questions

wtf is abi3audit?

abi3audit scans Python packages that claim cross-version compatibility via the abi3 tag and flags C-level function calls that break that promise, preventing crashes and security issues on older Python versions.

What language is abi3audit written in?

Mainly Python. The stack also includes Python, abi3-inspect, packaging.

Is abi3audit actively maintained?

Active — commit in last 30 days (last push 2026-08-10).

What license does abi3audit use?

Open-source license permitting free use, modification, and distribution with attribution.

How hard is abi3audit to set up?

Setup difficulty is rated easy, with roughly 5min to a first successful run.

Who is abi3audit for?

Mainly developer.

View the repo → Decode another repo

This repo across BitVibe Labs

Don't trust strangers blindly. Verify against the repo.