Skip to main content

This minimal extension demoes wide Stable ABI compatibility.

Four wheels to cover 3 CPython versions × 3 operating systems × 2 GIL/free-threading variants.

Note that up-to date tools -- ones that are aware of the abi3t wheel tag (for example, pip >= 26.1, packaging >= 26.1, uv >= 0.11.3).

CPython versions: 3.13, 3.14, and 3.15.0b1+.

OSs: Linux (64-bit x86), macOS (universal2), Windows (64-bit x86) (Covering other CPU architectures is possible but would mostly just complicate this demo.)

The shim

The file ft_compat.h contains the compatibility shim needed to make the new API necessary for abi3t (PEP 793 PyModExport & PEP 803 PySlot) work on older versions of Python. It's intended to be reusable, and includes a usage comment.

Note that the extension must be compiled with CPython 3.15+.

Installation

python -m pip install abi3-abi3t-universal

Usage

There's one trivial function that increments and returns a number, mostly to demo module state.

>>> import abi3_abi3t_universal
>>> abi3_abi3t_universal.increment_value()
0
>>> abi3_abi3t_universal.increment_value()
1
>>> abi3_abi3t_universal.increment_value()
2

Caveats

As abi3t is not widely supported in build tools at the time of writing, we use Setuptools, and reach into its internals to select the appropriate tags.

Windows

On Windows, until CPython 3.15.0b2, separate abi3 and abi3t wheels are required due to DLL linkage details. (This will not be fixed for 3.13 and 3.14.)

This project builds two wheels:

  • abi3_abi3t_universal-0.2-cp313-abi3-win_amd64.whl
  • abi3_abi3t_universal-0.2-cp313-abi3t-win_amd64.whl

For real libraries, it might be more practical to build 4 wheels, three of which can be dropped when 3.13 & 3.14 support is removed:

  • abi3_abi3t_universal-0.2-cp313-cp313t-win_amd64.whl (for 3.13 FT)
  • abi3_abi3t_universal-0.2-cp314-cp314t-win_amd64.whl (for 3.14 FT)
  • abi3_abi3t_universal-0.2-cp313-abi3-win_amd64.whl (for 3.13 GIL & 3.14 GIL)
  • abi3_abi3t_universal-0.2-cp315-abi3.abi3t-win_amd64.whl (3.15+)

(The first two can be merged into cp313.cp314-cp313t.cp314t but I'd be a bit worried about tool support for such a tag.)

Licence

All my contributions are marked CC0 1.0, see LICENCE.CC0.

The file ft_compat.h copies/adapts definitions from CPython headers, as necessary for compatibility. I'm pretty sure that's fair use, but I'm not a lawyer. Follow the PSF licence to be safe.

Release files for abi3-abi3t-universal 0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for abi3-abi3t-universal 0.2
File
abi3_abi3t_universal-0.2-cp313-abi3t-win_amd64.whl CPython 3.13 abi3t Windows x86-64 Details
abi3_abi3t_universal-0.2-cp313-abi3.abi3t-manylinux1_x86_64.manylinux_2_5_x86_64.whl CPython 3.13 abi3t, abi3 Linux glibc 2.5+ x86-64 Details
abi3_abi3t_universal-0.2-cp313-abi3.abi3t-macosx_10_15_universal2.whl CPython 3.13 abi3t, abi3 macOS 10.15+ universal2 (ARM64, x86-64) Details
abi3_abi3t_universal-0.2-cp313-abi3-win_amd64.whl CPython 3.13 abi3 Windows x86-64 Details

Total release size: 47.6 kB

Release files / abi3_abi3t_universal-0.2-cp313-abi3t-win_amd64.whl

Download URL abi3_abi3t_universal-0.2-cp313-abi3t-win_amd64.whl
Size 11.4 kB
Tags CPython 3.13 Windows x86-64 abi3t
SHA-256 checksum
How to use checksums
613cb2cdc8b44ac962150a82b1f4508cb56ad37f02234e7ba0965d7c129d712e
BLAKE2b-256 checksum
How to use checksums
9369e79d6bc92581cf266ede96cfe374bbfd85deae33299bd2e5770434f4f91c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 18, 2026.

Transparency log

Release files / abi3_abi3t_universal-0.2-cp313-abi3.abi3t-manylinux1_x86_64.manylinux_2_5_x86_64.whl

Download URL abi3_abi3t_universal-0.2-cp313-abi3.abi3t-manylinux1_x86_64.manylinux_2_5_x86_64.whl
Size 14.0 kB
Tags CPython 3.13 Linux glibc 2.5+ x86-64 abi3 abi3t
SHA-256 checksum
How to use checksums
9156ea7a9c144193f2456bd7663fafa7d8b44e5ba75f39aa069feff3b4b07dec
BLAKE2b-256 checksum
How to use checksums
bc111413e559c5164d1299786977c41db640100d47e2b0d96aab13d7eb6c0cbe
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 18, 2026.

Transparency log

Release files / abi3_abi3t_universal-0.2-cp313-abi3.abi3t-macosx_10_15_universal2.whl

Download URL abi3_abi3t_universal-0.2-cp313-abi3.abi3t-macosx_10_15_universal2.whl
Size 10.8 kB
Tags CPython 3.13 abi3 abi3t macOS 10.15+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
84ecaca439eb99db8d071fb926047ad6e460e2c42671cee653839c134f1c6a31
BLAKE2b-256 checksum
How to use checksums
867bbd6a19d275524e9635b1fa336547da7665a0a36d483d01cbf611051b9075
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 18, 2026.

Transparency log

Release files / abi3_abi3t_universal-0.2-cp313-abi3-win_amd64.whl

Download URL abi3_abi3t_universal-0.2-cp313-abi3-win_amd64.whl
Size 11.4 kB
Tags CPython 3.13 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
b27fc30b3d85e69b080b55deb87027755f3fce3a0a8a96bd6aecae53fced2347
BLAKE2b-256 checksum
How to use checksums
ba7479bc37a63ae0c1b7bf16a7b4a058f7561f2fdde1931c1249fa7e8f689bd9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 18, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2 This release

4 release files

0.1.1

4 release files

0.1

4 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page