Supported Python and platforms¶
What Frames2Py supports, and what each claim rests on. Tested means the full test suite
passed in the repository's CI (.github/workflows/ci.yml) against the built wheel,
installed into a fresh environment; a job fails if the wheel wasn't the code under test.
Supported and fast are separate claims: nothing on this page says anything about
throughput. Throughput has been measured on one machine only (Performance).
Core package¶
The core needs NumPy and nothing else. It is pure Python (a py3-none-any wheel).
| Linux x86_64 | Linux ARM64 | macOS ARM64 | |
|---|---|---|---|
| CPython 3.11 | tested | tested | tested |
| CPython 3.12 | tested | not in CI | not in CI |
| CPython 3.13 | tested | not in CI | not in CI |
| CPython 3.14 | tested | tested | tested |
| CPython 3.14t, GIL disabled | tested | tested | tested |
- CI runners: GitHub-hosted
ubuntu-24.04,ubuntu-24.04-arm(native ARM64, not emulated) andmacos-15(Apple silicon), with uv-managed CPython builds. - Python: 3.11 is the lowest supported version; it follows from the NumPy floor. 3.12 and 3.13 run in CI on Linux x86_64 only.
- Other platforms: Windows and Intel macOS are not supported and not tested. The wheel installs anywhere pip accepts it, but that is not a support claim.
- Other interpreters: PyPy and other Python implementations are not supported. Neither is WebAssembly (Pyodide).
- Package index: releases are published on PyPI as
frames2py; see Installation.
Free-threaded CPython¶
| build | status |
|---|---|
| CPython 3.14t, GIL disabled | supported: tested on all three platforms above |
| CPython 3.13t, GIL disabled | refused: Engine(...) raises RuntimeError |
| CPython 3.15t and later, GIL disabled | refused until each minor version is verified |
any free-threaded build with the GIL enabled (PYTHON_GIL=1) |
behaves as a standard build |
- What "supported" means on 3.14t: the full test suite passes, including the
concurrency tests of the documented model (one producer thread, any number of consumer
threads, lifecycle calls from any thread; see
Lifecycle and threads). CI checks that the GIL stays disabled
once NumPy and every optional backend are imported, and that the concurrency test which
only runs without the GIL (parallel
statsreads duringingest()) ran and passed. - Why other minors are refused: the snapshot hand-off relies on CPython source-level behaviour that is checked for each minor version before it is enabled (Architecture).
- No classifier: the package metadata carries no free-threading Trove classifier, because the classifiers can't say "3.14t only".
- Throughput on 3.14t has been measured on one Apple M4; see Performance.
CPython 3.15¶
- Not supported: there is no 3.15 classifier and no support claim.
- Informational CI job: runs the suite without extras on the current 3.15 pre-release (3.15.0rc2 on 2026-09-29). Its result is not a support claim.
- Extras on 3.15: on 2026-09-29, h5py 3.16.0 and dv-processing 2.0.4 published no CPython 3.15 wheels.
NumPy¶
- Floor:
numpy>=2.4. NumPy 2.4.0 is yanked, so the lowest release a resolver installs is 2.4.1. - Floor tested: CI runs the full suite with NumPy 2.4.1 and every optional backend at its declared minimum, on CPython 3.11, on Linux x86_64 and macOS ARM64. The NumPy version is checked inside the test process.
- Current releases: the other jobs use the locked releases: NumPy 2.4.6 on CPython 3.11 (NumPy 2.5 needs 3.12 or newer), and 2.5.3 on 3.12 and later.
Constrained resources¶
- Tested: the suite without extras, contract tests included, passes from the wheel in a Linux ARM64 container limited to 1 CPU and 2 GiB of memory.
- Scope: a compatibility result under CPU and memory limits on a hosted runner. It is not a memory requirement, not a test on a small device and not a throughput measurement; no throughput has been measured on any edge device.
Optional extras¶
Each extra was tested in every "tested" cell of the core table: those jobs have every extra installed, and a missing backend fails the run instead of skipping its tests.
| extra | installs | notes |
|---|---|---|
evt |
nothing beyond NumPy | the EVT 2.0 / 3.0 decoder is part of Frames2Py |
aedat4 |
dv-processing >= 2.0.4 | see the platform limits below |
hdf5 |
h5py >= 3.16, hdf5plugin >= 7.1 | |
recorder |
h5py >= 3.16, hdf5plugin >= 7.1 | |
viewer |
pyglet >= 2.1.16 | window tests on Linux only, see below |
The minimum versions above were tested too, on CPython 3.11, in the NumPy floor jobs.
Platform limits¶
- AEDAT4 on macOS: dv-processing 2.0.4 publishes macOS ARM64 wheels for macOS 15 and
later only (
macosx_15_0_arm64). On older macOS,frames2py[aedat4]has no wheel to install. CI's macOS runner is macOS 15. - AEDAT4 on Linux: dv-processing's Linux wheels need the system
libatomic1library. - Viewer windows: real window tests run in CI on Linux x86_64 under Xvfb, with CPython
3.11 and 3.14t. On macOS, CI tests the renderer, which needs no window, but opens no
window.
viewer.run()must be called on the main thread on every platform; it raisesRuntimeErrorotherwise.