Skip to main content

rp2040py

license pypi version python versions Pre-commit Test MicroPython Releases Test Pi Pico SDK coverage

Raspberry Pi Pico (RP2040) Emulator in Python — started as a port of rp2040js, now grown into its own CLI/SDK toolkit around it (see Differences from upstream rp2040js below). It blinks, runs native code, and even the MicroPython REPL!

See docs/reference/porting-checklist.md for the file-by-file port status against upstream rp2040js.

Table of Contents

Installation

pip install rp2040py

or, with uv:

uv add rp2040py       # into a project
uv tool install rp2040py   # as a standalone CLI tool
uvx rp2040py ...           # run without installing at all

Any of these gives you the rp2040py console script (python -m rp2040py works identically), so the emulator is runnable without a git checkout - see Run the demo project below for the checkout-equivalent commands.

Environments without compiled-extension support (iOS)

rp2040py ships an optional Cython-accelerated backend as a compiled extension (see Performance) alongside a pure-Python fallback with identical behavior - but a handful of environments, fully sandboxed by the OS with no dynamic-library loading at all, can't load compiled .so extensions or import native code dynamically. So far that's confirmed only for iOS app runtimes like Pythonista and PythonIDE - not Android: both Termux and Python 3 IDE (Pydroid 3) load the compiled rp2040py.native extension fine, confirmed by hand (see "Tested" below). A plain pip install rp2040py in one of the affected iOS environments resolves to a platform-specific wheel that simply won't load. Force the pure-Python universal wheel instead:

pip download rp2040py --only-binary=:all: --platform any --abi none
pip install rp2040py-*.whl --upgrade

This is the exact same artifact rp2040py's own release pipeline builds and publishes for every release (RP2040PY_SKIP_NATIVE_BUILD=1, see .github/workflows/publish.yml's build-pure job) - not a degraded or unsupported build, just the emulator without the compiled speedup.

Shell completions

rp2040py install-completion sets up tab completion for every subcommand and flag (--board, --log-level, --littlefs, ...) in Bash or Zsh, via argcomplete:

rp2040py install-completion
# then open a new shell, or:
source ~/.bashrc   # or ~/.zshrc

This appends the shell's register-python-argcomplete hook to ~/.bashrc/~/.zshrc (detected from $SHELL) - a one-time setup step, not something run on every invocation.

To confirm you actually got it:

  • Before installing: the downloaded file's name - a genuine pure-Python wheel is rp2040py-<version>-py3-none-any.whl, with no platform/ABI tag (e.g. no cp310-abi3-manylinux...) anywhere in the filename.
  • At runtime: rp2040py.rp2040.RP2040.__module__ is "rp2040py._rp2040" (pure Python) rather than "rp2040py.native._rp2040" (compiled) - equivalently, watch for the UserWarning ("Native extensions are not available...") rp2040py.native raises on import once the compiled backend isn't present, which is the expected, harmless case here rather than an error.

Tested:

  • iOS
    • Pythonista - full support (no [fs] optional dependency); mpremote itself now confirmed to work over --tcp-port, but running the emulator and mpremote at the same time did not work on-device - the app's sandbox appears to only run one Python process per app instance, with no real subprocess/multi-process support, so there's no way to have rp2040py micropython --tcp-port ... and a separate mpremote invocation running concurrently the way this works on a normal OS. This is a constraint of the app sandbox itself, not something rp2040py/rp2040py mpremote can patch around (unlike the list_ports ImportError below).
    • PythonIDE - full support (no [fs] optional dependency); same mpremote-works-but-not-concurrently-with-the-emulator caveat as Pythonista above.
  • Android
    • Termux - full support, including mpremote via rp2040py mpremote (the real mpremote binary alone still fails - pySerial's list_ports has no Android backend and raises ImportError at import time regardless of which subcommand you run; rp2040py mpremote patches around it - see docs/reference/mpremote.md). The compiled rp2040py.native (Cython) extension loads and runs fine here too - confirmed by hand, no pure-Python fallback needed.
    • Python 3 IDE (Pydroid 3) - full support, including mpremote via rp2040py mpremote over --tcp-port (same caveat and same fix as Termux above) and the compiled rp2040py.native (Cython) extension, both confirmed by hand.

Run the demo project

The commands below assume rp2040py is installed (pip install rp2040py / uv add rp2040py / uv tool install rp2040py, or run ad hoc with uvx rp2040py ...). From a checkout of this repo instead, each maps 1:1 onto uv run python demo/*.py (demo/*.py are thin wrappers around the same src/rp2040py/cli code):

rp2040py subcommand Checkout equivalent
rp2040py run ... uv run python demo/emulator_run.py ...
rp2040py micropython ... uv run python demo/micropython_run.py ...
rp2040py kaluma ... uv run python demo/kaluma_run.py ...
rp2040py bench ... uv run python demo/benchmark.py ...

--board {pico,pico_w} (default pico) is available on all four and picks which board's fixed extras get attached alongside the RP2040 itself - the onboard LED and the BOOTSEL button on both, plus an emulated CYW43439 WiFi/Bluetooth chip on pico_w; see WiFi (Pico W / CYW43439) below.

Native code

You'd need to get hello_uart.hex by building it from the pico-examples repo, then copy it to the rp2040py root directory and run:

rp2040py run
# or, without installing:
uvx rp2040py run

You can also specify the path to the image on the command line and/or load a UF2 image:

rp2040py run --image ./my-pico-project.uf2

A GDB server will be available on port 3333, and the data written to UART0 will be printed to the console.

MicroPython code

No manual download needed: just run

rp2040py micropython
# or, without installing:
uvx rp2040py micropython

and enjoy the MicroPython REPL! Quit the REPL with Ctrl+X. The first run fetches the recommended MicroPython build (1.21.0, currently) from micropython.org into ~/.cache/rp2040py and reuses that cached file afterwards (falls back to the current directory if the cache directory isn't writable). 1.21 is recommended: it does far less work before dropping to the REPL prompt than newer releases, so it boots dramatically faster in the emulator (see the benchmark below). Newer releases work too, just slower to reach the REPL - e.g. 1.28.0.

A different version, a local UF2 file, or a CircuitPython version (--circuitpython, see below) can be loaded by supplying the --image option - a known version tag (1.28.0), or a path to a UF2 file already on disk:

[!TIP] Booting real firmware means executing millions of Thumb instructions through a pure-Python interpreter, which is dramatically slower than V8 JIT-compiling the equivalent JS in rp2040js. Measured with demo/benchmark.py booting MicroPython 1.28 + littlefs, then running a typical resident script (while True: print(...); time.sleep(1), same as ci-micropython.yml's fixture) to its first output:

Interpreter Time
CPython 3.10 133.3s
CPython 3.10 + rp2040py.native (Cython, on by default) 11.3s (~11.8x)
CPython 3.14 + PYTHON_JIT=1 79.9s (~1.7x)
PyPy 3.10 8.9s (~15x)

Re-measured 2026-08-14 (best-of-N, 3-5 runs each) on a 4-core Intel Xeon @2.8GHz shared/containerised host, booting MicroPython 1.28.0 to the resident script's first output; run-to-run contention on that host reached ~2x, so these are best-of-N minima, not single runs. Absolute seconds are host-specific - the ratios and ordering are the portable takeaway. The headline change since the original round: the native core has closed the gap to PyPy - it was ~3x slower than PyPy then (25.83s vs 8.75s), and is ~1.3x now (11.3s vs 8.9s), after the native _execute_batch() and SimulationClock ports landed (records 0031/0034/0039). The historical/analytical figures in the paragraphs below (46.65s→25.83s Cython history, the 33.90s abi3 gap, the 1.21-vs-1.28 numbers) are kept from that original measurement round.

The rp2040py.native figure improved from an earlier 46.65s (~4.1x) after fixing two Cython compilation gotchas in the bus/interpreter hot path (untyped address/value parameters forcing a PyLong box on every memory access, and bare 0x80000000+ hex literals silently compiling as Python-object constants instead of C literals) - see docs/records/0013-cython-core.md for the full writeup, including why PyPy's gap didn't close by the same amount (a real boot spends a large, unchanged share of its time in still-Python peripheral emulation that these fixes don't touch). This row is CPython 3.10 specifically (this project's default target, and below the abi3 floor - see Performance below): CPython 3.11+ actually measures slower in absolute terms (33.90s, ~5.6x) on the same fixed source, purely from the stable-ABI (Py_LIMITED_API) build every 3.11+ wheel uses - see the same record 0013 section for that gap too, found (and initially mismeasured!) while producing these very numbers.

The rp2040py.native row is what most installs actually get with no extra effort - see Performance below. It doesn't help PyPy (compilation is deliberately skipped there - PyPy's own JIT already does better on its own than routing through rp2040py.native's CPython-C-API-based extension would), so for CPU-bound runs PyPy is still the clear winner - with one measured exception: on a Pico W CYW43 boot, after the GPIO/PIO ports in 0047, PyPy's lead narrows to ~1.16x, i.e. the two are close enough there that it stops being an obvious choice. uv run --python pypy3.10 --no-dev -- rp2040py micropython ... (or ... -- python demo/micropython_run.py ... from a checkout). See docs/reference/porting-checklist.md for the full breakdown (including a synthetic instructions/sec benchmark) and CI's python_runtime matrix, which tests all three.

This is also why 1.21 is the recommended version: reaching the bare REPL prompt is fast on both 1.21 and 1.28 (well under a second, whether or not a littlefs main.py auto-runs first) - the gap above is specifically about running a script shaped like the one above afterward. On the same machine and CPython 3.10, that same script reaches its first print() in 3.72s (1,418,835 steps) under 1.21 versus 188.98s (64,679,599 steps) under 1.28 - identical instruction counts run-to-run (this is deterministic, not host-speed noise), so the ~45x gap is a real difference in how much work 1.28 does per loop iteration, not an emulator bug: profiling shows the core essentially never reaches WFI/idle during that time, so it's real Thumb instructions being interpreted, not something hanging. 1.28 still boots and mounts a mklittlefs-built littlefs image correctly (that's exactly the version pinned disk_version fixed compatibility for, see below); it's simply much more expensive to actually run typical resident scripts on.

Core-level per-instruction throughput work continues independently of this version gap (most recently: RP2040.write_uint32() was checking a peripheral dict lookup before cheap RAM/flash range comparisons - see docs/reference/porting-checklist.md for the running log). These are general wins, not something that closes the 1.21-vs-1.28 gap itself - that gap is real work MicroPython 1.28's own compiled firmware does per loop iteration, not something this project's emulator code controls.

rp2040py micropython --image 1.28.0
rp2040py micropython --image my_image.uf2

A GDB server on port 3333 can be enabled by specifying the --gdb flag:

rp2040py micropython --gdb

For using the MicroPython demo code in tests, --expect-text can come in handy: it will look for the given text in the serial output and exit with code 0 if found, or 1 if not found. It's repeatable (--expect-text foo --expect-text bar stops once both have appeared, on any line, not necessarily the same one or in that order) and, with --expect-regex, each --expect-text value is matched as a Python re pattern (via re.search) instead of a plain substring. You can find an example in the MicroPython CI test.

For one-shot, non-interactive runs (like micropython's own CLI), pass one of -c <command>, -m <module>, or a script <filename> - mutually exclusive, matching [-c <command> | -m <module> | <filename>]. Instead of dropping into the REPL, rp2040py boots the device, runs it via the raw-REPL protocol, prints its stdout/stderr, and exits with the device's exit status (0 on success, 1 if it raised):

rp2040py micropython -c "print(1 + 1)"
rp2040py micropython -m sys
rp2040py micropython path/to/script.py

mpremote

--tcp-port <port> serves the console over a plain TCP socket instead of this process's own stdio - for tools that expect a serial port but can't open one, notably mpremote in a sandboxed environment with no serial support at all (e.g. Pythonista, see above). No client-side patching needed - mpremote connect socket://host:port just talks directly to rp2040py, via pySerial's own built-in socket:// URL support:

rp2040py micropython --tcp-port 4321
# in another terminal:
mpremote connect socket://127.0.0.1:4321 exec "print(1 + 1)"
mpremote connect socket://127.0.0.1:4321 fs cp your_script.py :main.py

--pty (POSIX only) is the alternative: a real pseudo-terminal instead of a TCP socket, whose slave side (e.g. /dev/pts/3) is a genuine POSIX serial device path - everything --tcp-port supports also works here, plus mpremote's own bare interactive REPL, which does not work over --tcp-port's socket:// transport through the real mpremote binary (see below) - though rp2040py mpremote (a thin proxy subcommand, same arguments as mpremote itself) patches around that specific crash, so rp2040py mpremote connect socket://host:port repl works too, no --pty needed.

See docs/reference/mpremote.md for the full picture: connection details for both flags, the rp2040py mpremote proxy and the upstream bug it patches around (micropython#18660), how to quit the emulator when mpremote owns the console, and an explicit list of which mpremote commands are verified working against each transport (exec, fs, mount, run, reset/bootloader, the interactive repl over --pty or rp2040py mpremote, ...) versus the remaining documented limitations (the real mpremote binary's own bare interactive REPL over --tcp-port, --pty on Windows, and df on MicroPython ≤1.21).

Filesystem support

With MicroPython, you can use the filesystem on the Pico. This becomes useful as more than one script file is used in your code. Build a LittleFS formatted filesystem image (see mklittlefs below) and pass it with --littlefs path/to/littlefs.img, and your main.py will be automatically started from there (it's silently skipped, not an error, if the file doesn't exist - but it's never loaded unless --littlefs is given explicitly, even if a littlefs.img happens to sit in the current directory).

The mklittlefs subcommand builds such an image (requires the optional fs extra: pip install rp2040py[fs] / uv sync --extra fs). Every file keeps its own basename; pass --main to mark one of them as main.py (auto-run on boot) - omit it entirely for a filesystem with no auto-run script, e.g. modules staged for a raw-REPL-driven test, or omit files entirely for an empty formatted image. Always builds fresh - pass -f/--force to overwrite an existing --output (there's no "add these files to the existing image" mode; rebuild from the full file list):

rp2040py mklittlefs -o littlefs.img your_main.py your.py files.py here.py --main your_main.py
rp2040py mklittlefs -o littlefs.img --force your_main.py --main your_main.py  # to overwrite it later

--disk-version {2.0,2.1} selects the littlefs on-disk format (defaults to 2.0): MicroPython <=1.21's bundled littlefs can only mount 2.0, while 1.28's reads both - see docs/records/0003-littlefs-image-format.md for why.

--target {micropython,circuitpython,kaluma} presets --block-size/--block-count to a known firmware's own filesystem layout instead of spelling them out by hand (mutually exclusive with passing them explicitly) - see the Kaluma section below for why its layout differs from MicroPython/CircuitPython's.

The filesystem is writeable - MicroPython's os/rp2.Flash calls go through a real JEDEC SPI-NOR flash command emulation in the SSI peripheral (RPSSI), the same peripheral real hardware uses to erase/program flash.

--dump-fs <path> dumps the device's filesystem flash region back out to a local file when the micropython/kaluma subcommand exits (Ctrl+X, --expect-text, or the end of a -c/-m/script run) - the same layout --littlefs path/to/littlefs.img reads back in, so a dump can be fed straight back with --littlefs/--dump-fs pointing at the same path for persistence across runs:

rp2040py micropython --littlefs littlefs.img --dump-fs littlefs.img -c "open('log.txt', 'a').write('run\n')"

[!TIP] This makes --dump-fs a littlefs-python-free alternative to mklittlefs: instead of building the image on the host with littlefs-python, boot the real emulated MicroPython firmware against blank flash, write files to it the normal way (open(path, "wb").write(data), exactly as code running on a real Pico would), and dump the resulting filesystem - built by MicroPython's own bundled littlefs, not a separately-installed library. demo/mklittlefs_dump.py generates such a script from a list of local files (mirroring mklittlefs's own --main semantics) for use as the positional <filename> argument:

python demo/mklittlefs_dump.py your_main.py your.py files.py here.py --main your_main.py \
    --output flash_script.py
rp2040py micropython --dump-fs littlefs.img flash_script.py

Useful when the fs extra isn't installed, or to build against exactly the same littlefs version/behavior a given firmware boots with instead of whatever littlefs-python happens to bundle.

WiFi (Pico W / CYW43439)

--board pico_w (default: pico) attaches an emulated CYW43439 - the WiFi/Bluetooth chip on a real Pico W - over the same gSPI bus real firmware drives it through:

rp2040py micropython --board pico_w

network.WLAN works against it: nic.active(True), nic.scan(), and nic.connect(ssid, key) all complete, answered by a fixed fake "RP2040PY-GUEST" access point built into the emulation. The association is fake, but the network behind it is real - a NAT bridge gives the guest a DHCP lease, answers its ARP, and splices its TCP connections and UDP datagrams onto real sockets on your machine, so code running on the emulated Pico W reaches the actual internet. Live-boot verified against real, unmodified MicroPython firmware on both 1.23.0 and 1.28.0:

import network, socket, mip, ntptime

nic = network.WLAN(network.WLAN.IF_STA)
nic.active(True)
print(nic.scan())  # [(b'RP2040PY-GUEST', ...)]
nic.connect("RP2040PY-GUEST", "key")  # any password is accepted
print(nic.isconnected(), nic.ipconfig("addr4"))  # True ('10.0.0.2', '255.255.255.0')

s = socket.socket()  # real TCP, out through your host's network
s.connect(("1.1.1.1", 80))
s.send(b"GET / HTTP/1.0\r\n\r\n")
print(s.recv(64))  # b'HTTP/1.1 301 Moved Permanently\r\n...'

mip.install("os-path")  # real DNS + a real HTTPS download
ntptime.settime()  # real NTP, sets the emulated RTC
nic.disconnect()  # link really goes down: isconnected() -> False, status() -> 0

TLS works through the same path (the reflector relays bytes without inspecting them), and so do WebSockets over both ws:// and wss://. The same emulated chip also serves CircuitPython (wifi/socketpool) and Kaluma (require('wifi')/net) - three independent network stacks over one bus, none of them needing anything CYW43-specific from the emulator.

What is not emulated, so you don't discover it the hard way:

  • The AP is a fixture. scan() always returns the one fake "RP2040PY-GUEST" network, any password "succeeds," and there's no hidden-SSID or auth-failure path to test against.
  • No AP mode (network.WLAN.IF_AP), no IPv6, and one guest only (the guest/gateway IP and MAC are fixed constants, with no config surface yet).
  • No flow-control backpressure from the real destination onto the guest: the emulator always advertises a fixed TCP receive window, so a guest that outran a slow destination would grow the host process's socket buffer rather than being told to slow down. An emulated Cortex-M0 can't realistically outrun a real socket, which is why this hasn't mattered in practice.

See docs/records/0027-cyw43-wifi.md for what's emulated at the gSPI/SDPCM protocol level and docs/records/0048-cyw43-nat-reflector.md for the network bridge (how the reflector works, and the full list of what's still open).

CircuitPython code

To run the CircuitPython demo, follow the directions above for MicroPython but add --circuitpython:

rp2040py micropython --circuitpython

and start the CircuitPython REPL! As with MicroPython, the firmware (8.0.2 by default) is downloaded automatically on first use; a different version or a local file can be given via --image (e.g. --image 10.2.1 or a path to an already-downloaded UF2). The rest of the experience is the same as the MicroPython demo (Ctrl+X to exit, the --gdb option, etc).

WiFi works here too: --board pico_w gives CircuitPython's wifi/socketpool the same emulated CYW43439 and NAT bridge described under WiFi (Pico W / CYW43439) above - wifi.radio.connect(), a DHCP lease, and real TCP/DNS out to the internet. See tests/circuitpython/main-cyw43.py for a runnable example. Note that CircuitPython enforces WPA2's 8-64 character passphrase rule client-side, so the password you pass must be at least 8 characters even though the emulated AP accepts anything.

Filesystem support

For CircuitPython, you can create a FAT12 filesystem in Linux using the truncate and mkfs.vfat utilities:

truncate fat12.img -s 1M  # make the image file
mkfs.vfat -F12 -S512 fat12.img  # create the FAT12 filesystem

You can then mount the filesystem image and add files to it:

mkdir fat12  # create the mounting folder if needed
sudo mount -o loop fat12.img fat12/  # mount the filesystem to the folder
sudo cp code.py fat12/  # copy code.py to the filesystem
sudo umount fat12/  # unmount the filesystem

Then pass it explicitly with --fat12 (no default - fat12.img sitting in the current directory is never picked up implicitly):

rp2040py micropython --circuitpython --fat12 fat12.img

CircuitPython doesn't typically write to its own filesystem at runtime the way MicroPython's os/rp2.Flash does, so this hasn't been separately exercised - but the underlying flash-write path (see the MicroPython filesystem support section) is the same SSI peripheral either way.

Kaluma (other USB-CDC firmware, not MicroPython/CircuitPython)

rp2040py's USB/CDC emulation isn't MicroPython-specific - any firmware presenting a CDC-ACM serial console works the same way underneath. The kaluma subcommand runs Kaluma (a JavaScript runtime for RP2040), verified against 1.2.1 - it boots, USB enumerates, and evaluates real JS at its REPL prompt (e.g. sending 1+1 gets back 2):

rp2040py kaluma
# or, without installing:
uvx rp2040py kaluma
rp2040py kaluma --image 1.2.1
rp2040py kaluma --image my_kaluma_image.uf2

As with micropython, missing firmware is downloaded automatically (1.2.1 by default - the newest release still shipping a plain, non--w, RP2040 pico build; 1.3.0+ only ships pico2/pico2-w). Ctrl+X to exit, same as the MicroPython demo. Unlike micropython, kaluma is interactive-only - Kaluma has no raw-REPL-equivalent protocol, so there's no -c/-m/<filename>.

An optional <script.js> positional stages a local file into Kaluma's "user program" flash region before boot - the same one kaluma flash <file> writes to on real hardware, which Kaluma auto-executes on every boot:

rp2040py kaluma your_script.js

--board pico_w works here too, with the same emulated CYW43439 and NAT bridge the MicroPython section describes - Kaluma's own require('wifi') scans, joins, gets a DHCP lease, and opens real net.Socket connections to the internet through it. tests/kaluma/main-cyw43.js is a runnable example.

Give it a few real seconds after connecting before expecting output - like MicroPython, booting real firmware through an interpreted emulator takes actual wall-clock time (JerryScript engine init, then running your script), not something --expect-text needs to work around, just something to expect if driving this non-interactively.

Separately, Kaluma has its own pluggable littlefs-backed filesystem (see its docs), mounted from a 512K region of flash with 4096-byte blocks - a different flash region than the user-program one above, with no auto-run semantics of its own (plain storage, accessible from JS via require('fs')). Build a compatible image with mklittlefs and pass it via --littlefs explicitly (no default - unlike MicroPython's --littlefs, it's never picked up implicitly, even from a kaluma_littlefs.img sitting in the current directory):

rp2040py mklittlefs -o kaluma_littlefs.img --target kaluma your_script.js
rp2040py kaluma --littlefs kaluma_littlefs.img

--target {micropython,circuitpython,kaluma} presets --block-size/--block-count for a known firmware's filesystem layout (mutually exclusive with passing them explicitly) - omit both for MicroPython's own defaults.

--dump-fs <path> works here too, dumping the same littlefs-formatted region back out on exit - but unlike micropython, kaluma has no non-interactive exec mode to script filesystem writes through (no -c/<filename> raw-REPL equivalent, see above), so the mklittlefs-without- littlefs-python trick above doesn't apply the same way; use it interactively via require('fs') at the REPL instead, or stick with mklittlefs.

--tcp-port <port>/--pty also work here, same as micropython - see mpremote above (that section is mpremote-specific, but the underlying mechanism, a plain socket/pty serving the console instead of this process's own stdio, is not).

[!NOTE] Without a valid --littlefs image, board.js's unconditional mount-at-startup logs Bad block at 0x0/Superblock 0x0 has become unwritable/Error: No space left on device against the unformatted flash region - purely cosmetic, Kaluma catches and prints the error without aborting, so boot and <script.js> auto-run both continue normally past it. This used to reproduce even against a validly-built mklittlefs image, not just blank flash - no longer reproduced after the SSI flash-read/write fixes in docs/records/0008-ssi-flash-write.md (a real --target kaluma image now mounts and reads/writes cleanly, verified via tests/kaluma/index-flash-rw.js), though that wasn't a deliberate target of those fixes and hasn't been separately root-caused - flag it if it resurfaces.

Kaluma prints its "Welcome to Kaluma" banner exactly once, right at boot - but that's before the emulated USB-CDC connection to the host is actually up, so (same as real hardware racing a host terminal that isn't already attached - Kaluma's own docs: "if you cannot see the prompt, press Enter several times") those bytes are typically gone by the time anything's listening. kaluma doesn't send anything to work around this - type .hi yourself at the prompt to reprint the same banner on demand if you need to see it; if you're scripting against a device's output instead of typing at it interactively, stage a <script.js> and match against its output, which isn't racy (see the Kaluma CI test, which does exactly that).

Bootrom revisions

run, micropython, kaluma, and bench all boot a fixed bootrom (B1, bundled - no download needed) by default. --bootrom picks a different one: a b0/b1/b2 version tag (downloaded automatically from Raspberry Pi's pico-bootrom-rp2040 releases and cached locally, same as --image), or a local .elf/.bin path:

rp2040py micropython --bootrom b2
rp2040py micropython --bootrom path/to/custom.elf

Raspberry Pi only publishes .elf for each revision - pyelftools (a normal dependency, not an extra: it's a pure-Python wheel with no platform-specific build to justify gating it) parses out the ROM image on the fly, no separate conversion step needed. A local .bin (e.g. produced with objcopy -O binary) is loaded directly with no parsing at all.

Library API

Everything above is the CLI, but the emulator is also usable programmatically - e.g. to run code against a device and check its output the way Thonny does over a real serial port, from a test suite or another tool. rp2040py.device.MicroPythonDevice boots a UF2 image (optionally for a specific board, e.g. board="pico_w") and lets you run code on it via the same raw-REPL protocol mpremote run/tools/pyboard.py use, interrupting anything already running on the device first (e.g. an auto-run main.py from a littlefs image).

[!NOTE] Async-native only, no blocking API. MicroPythonDevice/KalumaDevice/BaseDevice boot and run as coroutines on an asyncio event loop (the same "engine room" the CLI itself runs on) - there is no blocking start()/exec()/exec_file() and no synchronous with device: form. Calling a blocking wrapper's Future.result() from the same loop it would need to run on deadlocks (the loop can't process the coroutine that resolves the Future while its own thread is stuck waiting on it), so this project stopped offering one rather than ship that footgun - wrap a call in asyncio.run(...) yourself if you want blocking behavior from a plain script.

asyncio, via astart()/aexec()/aexec_file(), entered as an async with context manager:

import asyncio
from rp2040py.device import MicroPythonDevice


async def main():
    async with MicroPythonDevice("RPI_PICO-20231005-v1.21.0.uf2") as device:
        stdout, stderr = await device.aexec("print(1 + 1)")
        assert stdout == b"2\r\n"

        stdout, stderr = await device.aexec_file("my_script.py")


asyncio.run(main())

Callback style, via exec_async()'s concurrent.futures.Future - no separate API needed, Future.add_done_callback() does this out of the box. Requires the device already started (astart()/start_async() first, or already inside async with):

def on_done(future):
    stdout, stderr = future.result()
    print(stdout.decode())


device.exec_async("print(1 + 1)").add_done_callback(on_done)

Both share one asyncio.Lock per device: since the device only has a single REPL channel and can't run two exec()s at once, calling exec_async()/aexec() again before a previous call finishes doesn't raise, it just queues behind it and runs once its turn comes. This is exactly what powers the CLI's own micropython -c/-m/<filename> batch mode - it's a caller of this same API, not a separate implementation. start_async()/astart()/stop() are available directly if you want more control over the lifecycle than the context manager gives you - stop() itself stays a plain synchronous call.

External devices & custom boards

Beyond the built-in --board {pico,pico_w} presets, the emulator has a real ExternalDevice extension point (rp2040py.external.device) - a device implements attach(rp2040) and gets wired up via attach_external_devices(). Four devices already ship in-tree this way (the onboard LED, the BOOTSEL button, the CYW43439 WiFi chip behind pico_w, and a Waveshare 2.9″ e-Paper display). Boards are just as open: boards.BoardSpec (what --board itself resolves to internally) is a public dataclass you can build your own instance of - your own device mix on an existing firmware family, or a fully custom board with its own firmware image and flash layout - and hand to any Device class (board=...) or the CLI (--board-spec target:attr / RP2040PY_BOARD_SPEC, on run/micropython/kaluma/mklittlefs). See docs/reference/external-devices-and-boards.md for the how-to (worked examples for both), and docs/records/0049 for the design history behind it.

Performance

The interpreter core (CortexM0Core) and the memory bus's hot read/write paths are also available as a compiled Cython extension (rp2040py.native), giving roughly 7x the instruction throughput of the pure-Python implementation on both a synthetic benchmark and a real MicroPython boot (see docs/records/0013-cython-core.md for the full measured breakdown).

That extension has since grown past the core itself: the PIO block and its state machines (0031, 0047), the per-batch execution loop (0034), the simulation clock (0039) and GPIO pins (0047) are all native too. Those are wins on top of the 7x above, on the paths each one covers rather than across the board - the most recent, measured end to end, is ~2.6x on a Pico W CYW43 boot through to scan() (0047), a PIO/GPIO-heavy workload the original core port barely touched.

This is on by default and needs nothing from you: pip install rp2040py builds it automatically when a C compiler is available (prebuilt wheels are published for common platforms, so most installs don't even need one) and falls back to the identical pure-Python implementation otherwise

  • correctness is the same either way, just the speed differs. A couple of environment variables exist for cases where you want to control this explicitly:

  • RP2040PY_SKIP_CYTHON=1 - force the pure-Python implementation at runtime, even if the compiled extension is installed (e.g. to rule out a native-specific issue).

  • RP2040PY_SKIP_NATIVE_BUILD=1 - skip compiling the extension at build time, for a deliberately pure-Python install/wheel.

Differences from upstream rp2040js

rp2040py started as a straight port of rp2040js - the core CPU/peripheral emulation still tracks it closely, and docs/reference/porting-checklist.md keeps a file-by-file checklist of that. But it's grown well past a 1:1 translation into its own toolkit with no rp2040js equivalent, built around actually running real firmware from a shell rather than embedding the emulator as a library (rp2040js's own primary use case, e.g. inside Wokwi):

  • A real packaged CLI - rp2040py/python -m rp2040py, installable via pip/uv, not just a checkout-only demo/*.ts script. Firmware (MicroPython/CircuitPython/Kaluma) is auto-downloaded and cached by version tag instead of needing to be fetched and placed by hand.
  • A real, writeable filesystem: RPSSI (the SSI peripheral MicroPython/CircuitPython's os/rp2.Flash calls go through to erase/program flash) implements the actual JEDEC SPI-NOR command set (WREN/WRDI, status/JEDEC-ID reads, page program, sector/block erase) - the same commands real flash hardware understands - not just a register stub. rp2040js has the same gap MicroPython/CircuitPython on rp2040py used to have (see docs/records/0008-ssi-flash-write.md's "SSI flash-write support"): on-device open(path, "w")/os.remove()/... genuinely persist to the emulated flash now, instead of raising/no-opping against an unimplemented peripheral.
  • A filesystem toolkit: mklittlefs builds a littlefs image on the host (needs littlefs-python, the optional fs extra); --dump-fs builds one without that dependency instead, by writing files to a booted device's real filesystem the normal way and reading the resulting flash region back out - see mpremote and Filesystem support above.
  • A programmatic device API (rp2040py.device.MicroPythonDevice/KalumaDevice) for driving a booted device from another Python program over the raw-REPL protocol (device.exec("print(1+1)")) - the same API micropython -c/-m/<filename> and --tcp-port themselves are built on, not a separate implementation. --tcp-port/--pty in particular let any serial-oriented external tool - mpremote chief among them, including its own bare interactive REPL via rp2040py mpremote (see mpremote) - drive the emulator over a real socket or pty, something rp2040js has no analogue for at all (no pty/socket-backed USB-CDC passthrough anywhere in its source, only stdio-driven demo scripts).
  • Broader firmware coverage: MicroPython, CircuitPython, and Kaluma (a second, independent USB-CDC-console JS runtime for RP2040 - unrelated to rp2040js despite both being JS) all boot and run against this emulator; a built-in GDB server (--gdb) works against any of them.
  • machine.reset()/machine.bootloader() actually reset the device: rp2040js's own RPWatchdog.onWatchdogTrigger (src/peripherals/watchdog.ts) defaults to logging "Watchdog triggered, but no reset handler provided" and does nothing else - the emulated CPU spins forever waiting for a reset that never happens. rp2040py's RPWatchdog.on_watchdog_trigger performs a real in-place reset (CPU core, PWM/DMA/USB-CDC peripheral state) and jumps back to flash's entry point, preserving flash/filesystem content and every externally-referenced peripheral object's identity - mpremote reset/mpremote bootloader (the latter performs the same reset rather than entering actual BOOTSEL mode, which isn't implemented) both return promptly instead of hanging.
  • Configurable bootrom revision (--bootrom b0/b1/b2, or a local .elf/.bin) - see Bootrom revisions below - auto-downloaded and cached the same way firmware images are. rp2040js ships exactly one hardcoded bootrom build (demo/bootrom.ts, revision B1), with no way to select a different revision at all.
  • An optional native-compiled backend (rp2040py.native, Cython) for when pure-Python instruction dispatch is the bottleneck - see Performance above - alongside a pure-Python universal wheel for environments that can't load compiled extensions at all (e.g. Pythonista).
  • Pico W / CYW43439 WiFi emulation (--board pico_w) - real network.WLAN calls (active()/scan()/connect()) against a real, unmodified MicroPython firmware's CYW43439 driver are answered at the actual gSPI/SDPCM protocol level, not stubbed out, and a NAT bridge carries the guest's TCP/UDP traffic onto your host's real network (socket, mip.install() and ntptime all reach the actual internet) - something rp2040js has no equivalent of at all (no --board concept, no WiFi chip emulation). See WiFi (Pico W / CYW43439) above.

See docs/reference/porting-checklist.md#known-differences-from-rp2040js for the exhaustive, file-level breakdown (including behavioral divergences found while porting, not just added features).

Used by

  • ballistics-lab/micropython-bclibc — tests its RP2040 usermod/natmod builds in CI by actually booting real firmware through this emulator (o-murphy/rp2040py/.github/actions/setup-rp2040py), not just compiling it.

Learn more

License

Released under the MIT license. Copyright (c) 2021, Uri Shaked. Copyright (c) 2026, Dmytro Yaroshenko.

Metadata

Release files for rp2040py 0.2.5

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

Source distribution (sdist)

Source distribution for rp2040py 0.2.5
File Size Uploaded
rp2040py-0.2.5.tar.gz 870.6 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for rp2040py 0.2.5
File
rp2040py-0.2.5-py3-none-any.whl Python 3 none any Details
rp2040py-0.2.5-cp314-cp314t-win_arm64.whl CPython 3.14 CPython 3.14 free-threading Windows ARM64 Details
rp2040py-0.2.5-cp314-cp314t-win_amd64.whl CPython 3.14 CPython 3.14 free-threading Windows x86-64 Details
rp2040py-0.2.5-cp314-cp314t-win32.whl CPython 3.14 CPython 3.14 free-threading Windows x86-32 Details
rp2040py-0.2.5-cp314-cp314t-musllinux_1_2_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-64 Details
rp2040py-0.2.5-cp314-cp314t-musllinux_1_2_i686.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-32 Details
rp2040py-0.2.5-cp314-cp314t-musllinux_1_2_armv7l.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ ARMv7l Details
rp2040py-0.2.5-cp314-cp314t-musllinux_1_2_aarch64.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ ARM64 Details
rp2040py-0.2.5-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ x86-64, Linux glibc 2.17+ x86-64 Details
rp2040py-0.2.5-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARMv7l, Linux glibc 2.31+ ARMv7l Details
rp2040py-0.2.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARM64, Linux glibc 2.28+ ARM64 Details
rp2040py-0.2.5-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ x86-32, Linux glibc 2.5+ x86-32 Details
rp2040py-0.2.5-cp314-cp314t-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64 Details
rp2040py-0.2.5-cp314-cp314t-macosx_10_15_x86_64.whl CPython 3.14 CPython 3.14 free-threading macOS 10.15+ x86-64 Details
rp2040py-0.2.5-cp314-cp314t-macosx_10_15_universal2.whl CPython 3.14 CPython 3.14 free-threading macOS 10.15+ universal2 (ARM64, x86-64) Details
rp2040py-0.2.5-cp314-cp314-android_24_x86_64.whl CPython 3.14 CPython 3.14 Android API level 24+ x86-64 Details
rp2040py-0.2.5-cp314-cp314-android_24_arm64_v8a.whl CPython 3.14 CPython 3.14 Android API level 24+ ARM64 v8a Details
rp2040py-0.2.5-cp313-cp313-android_24_x86_64.whl CPython 3.13 CPython 3.13 Android API level 24+ x86-64 Details
rp2040py-0.2.5-cp313-cp313-android_24_arm64_v8a.whl CPython 3.13 CPython 3.13 Android API level 24+ ARM64 v8a Details
rp2040py-0.2.5-cp311-abi3-win_arm64.whl CPython 3.11 abi3 Windows ARM64 Details
rp2040py-0.2.5-cp311-abi3-win_amd64.whl CPython 3.11 abi3 Windows x86-64 Details
rp2040py-0.2.5-cp311-abi3-win32.whl CPython 3.11 abi3 Windows x86-32 Details
rp2040py-0.2.5-cp311-abi3-musllinux_1_2_x86_64.whl CPython 3.11 abi3 Linux musl 1.2+ x86-64 Details
rp2040py-0.2.5-cp311-abi3-musllinux_1_2_i686.whl CPython 3.11 abi3 Linux musl 1.2+ x86-32 Details
rp2040py-0.2.5-cp311-abi3-musllinux_1_2_armv7l.whl CPython 3.11 abi3 Linux musl 1.2+ ARMv7l Details
rp2040py-0.2.5-cp311-abi3-musllinux_1_2_aarch64.whl CPython 3.11 abi3 Linux musl 1.2+ ARM64 Details
rp2040py-0.2.5-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 abi3 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details
rp2040py-0.2.5-cp311-abi3-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl CPython 3.11 abi3 Linux glibc 2.17+ ARMv7l, Linux glibc 2.31+ ARMv7l Details
rp2040py-0.2.5-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl CPython 3.11 abi3 Linux glibc 2.17+ ARM64, Linux glibc 2.28+ ARM64 Details
rp2040py-0.2.5-cp311-abi3-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl CPython 3.11 abi3 Linux glibc 2.5+ x86-32, Linux glibc 2.28+ x86-32 Details
rp2040py-0.2.5-cp311-abi3-macosx_11_0_arm64.whl CPython 3.11 abi3 macOS 11.0+ ARM64 Details
rp2040py-0.2.5-cp311-abi3-macosx_10_9_x86_64.whl CPython 3.11 abi3 macOS 10.9+ x86-64 Details
rp2040py-0.2.5-cp311-abi3-macosx_10_9_universal2.whl CPython 3.11 abi3 macOS 10.9+ universal2 (ARM64, x86-64) Details
rp2040py-0.2.5-cp310-cp310-win_arm64.whl CPython 3.10 CPython 3.10 Windows ARM64 Details
rp2040py-0.2.5-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
rp2040py-0.2.5-cp310-cp310-win32.whl CPython 3.10 CPython 3.10 Windows x86-32 Details
rp2040py-0.2.5-cp310-cp310-musllinux_1_2_x86_64.whl CPython 3.10 CPython 3.10 Linux musl 1.2+ x86-64 Details
rp2040py-0.2.5-cp310-cp310-musllinux_1_2_i686.whl CPython 3.10 CPython 3.10 Linux musl 1.2+ x86-32 Details
rp2040py-0.2.5-cp310-cp310-musllinux_1_2_armv7l.whl CPython 3.10 CPython 3.10 Linux musl 1.2+ ARMv7l Details
rp2040py-0.2.5-cp310-cp310-musllinux_1_2_aarch64.whl CPython 3.10 CPython 3.10 Linux musl 1.2+ ARM64 Details
rp2040py-0.2.5-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details
rp2040py-0.2.5-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl CPython 3.10 CPython 3.10 Linux glibc 2.31+ ARMv7l, Linux glibc 2.17+ ARMv7l Details
rp2040py-0.2.5-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ ARM64, Linux glibc 2.28+ ARM64 Details
rp2040py-0.2.5-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ x86-32, Linux glibc 2.5+ x86-32 Details
rp2040py-0.2.5-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details
rp2040py-0.2.5-cp310-cp310-macosx_10_9_x86_64.whl CPython 3.10 CPython 3.10 macOS 10.9+ x86-64 Details
rp2040py-0.2.5-cp310-cp310-macosx_10_9_universal2.whl CPython 3.10 CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64) Details

Total release size: 100.9 MB

Release files / rp2040py-0.2.5.tar.gz

Download URL rp2040py-0.2.5.tar.gz
Size 870.6 kB
Tags Source
SHA-256 checksum
How to use checksums
9658de7987063f344d9fd4ac9c28a2f131d78c4cc086b9d29b7b4cd1a1c61232
BLAKE2b-256 checksum
How to use checksums
683b4cf896f2578d3b3f8d93630d3f5d6753aa212414deb6597b867a5b5e5e52
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-py3-none-any.whl

Download URL rp2040py-0.2.5-py3-none-any.whl
Size 329.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
48a00cc9c612120fb84f20886f64f2f19cff6f3aa6d803306dd9ca2b08ba0a33
BLAKE2b-256 checksum
How to use checksums
1b8faaed3efe2349186be89d8bc333b6db652f683536493aabc813c73ebf8b00
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp314-cp314t-win_arm64.whl

Download URL rp2040py-0.2.5-cp314-cp314t-win_arm64.whl
Size 2.0 MB
Tags CPython 3.14 CPython 3.14 free-threading Windows ARM64
SHA-256 checksum
How to use checksums
5edebd32e175a54c86b12865f666348938c1119e352005addd6f16b4a3fb354b
BLAKE2b-256 checksum
How to use checksums
d11d37b4b29c725161e9fc63f2eee373ce6ebeca00a358816fb3aec140b2f8ad
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp314-cp314t-win_amd64.whl

Download URL rp2040py-0.2.5-cp314-cp314t-win_amd64.whl
Size 2.1 MB
Tags CPython 3.14 CPython 3.14 free-threading Windows x86-64
SHA-256 checksum
How to use checksums
41631395c2c4f2a2cc636cfa99d40123d01846de466b3feb716ee491cc0d6926
BLAKE2b-256 checksum
How to use checksums
9d21836961ab480bdc6a7d28d8a6d63fce80f72e6e193d8b9fa3f8bf5937b3e6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp314-cp314t-win32.whl

Download URL rp2040py-0.2.5-cp314-cp314t-win32.whl
Size 2.0 MB
Tags CPython 3.14 CPython 3.14 free-threading Windows x86-32
SHA-256 checksum
How to use checksums
fa15f759b3f991eaba2ede0db7bfa7d1cf3557b6026b6e8e928bf829c192dcca
BLAKE2b-256 checksum
How to use checksums
70bf6b47b2dc091c82a69619bbb5921e152a905982df89049df6224d2960109f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp314-cp314t-musllinux_1_2_x86_64.whl

Download URL rp2040py-0.2.5-cp314-cp314t-musllinux_1_2_x86_64.whl
Size 2.2 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
7a61dd626fee331363ffbbd6281509a802003810ae19c647f4e9029c303c6de3
BLAKE2b-256 checksum
How to use checksums
47a0e0b1d73ac5972589e46c877e71b8a210b7645af6663c6b5efd1c686ed46c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp314-cp314t-musllinux_1_2_i686.whl

Download URL rp2040py-0.2.5-cp314-cp314t-musllinux_1_2_i686.whl
Size 2.2 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-32
SHA-256 checksum
How to use checksums
d9aabdf2484b380a7cfccce54fdac0e84badccc1e44ff7059780f06082e52a0a
BLAKE2b-256 checksum
How to use checksums
2952ea732d63cbd46f6933b54318e8c76142637b4550d7a782c5ac10b0ff6e21
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp314-cp314t-musllinux_1_2_armv7l.whl

Download URL rp2040py-0.2.5-cp314-cp314t-musllinux_1_2_armv7l.whl
Size 2.1 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ ARMv7l
SHA-256 checksum
How to use checksums
cce8cfc77dbc80e697d417c6d1d29d3088242484998724f738ead3c7c765cbf5
BLAKE2b-256 checksum
How to use checksums
2286e92ad3be2ff3b1166df4259eb7458cabfb23bdd7d2d5a800db4407156579
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp314-cp314t-musllinux_1_2_aarch64.whl

Download URL rp2040py-0.2.5-cp314-cp314t-musllinux_1_2_aarch64.whl
Size 2.2 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
704b2dd33c3ce1b8eca8ec145bf596e7913804a134d6014cceba74c1358e33a9
BLAKE2b-256 checksum
How to use checksums
e281e84564b6d3286c20d3225298e877cd3cb94dcfa2bff208046ce663f244e9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL rp2040py-0.2.5-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 2.2 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
220f3fe510459622d5999844e0eb7e31f92d707c013bb84c9bd5027ec52fe45a
BLAKE2b-256 checksum
How to use checksums
921c33cdacd4378e6fc79e2e0ddf24d7f1da38bb3471bd20ab7295339627d09c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl

Download URL rp2040py-0.2.5-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl
Size 2.1 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARMv7l Linux glibc 2.31+ ARMv7l
SHA-256 checksum
How to use checksums
6d46aace70684260737413f62301738b35ce292b841c7c0380c1dd07afe3a4ea
BLAKE2b-256 checksum
How to use checksums
e37e1f0b9528e5e83a508d71f79de2d1a06ceb86155443a9f03e0a91c2ba1fa8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL rp2040py-0.2.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 2.2 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
dcf2e59e3ee3c10bd240c541b20bed9e14ac7e0f42960c37f9ebcf6a6ff37b4f
BLAKE2b-256 checksum
How to use checksums
9069b3d2d7e2d03f650021a7c31a04e975f2c9d50ec222105f1d8c3762736529
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl

Download URL rp2040py-0.2.5-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl
Size 2.2 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ x86-32 Linux glibc 2.5+ x86-32
SHA-256 checksum
How to use checksums
c4e567fde149addeb3a8fcc0dbd4d7f90962e3d07b9f583e1e67627095c5c574
BLAKE2b-256 checksum
How to use checksums
acdc374d8e0ece40da9df17eaae56d0578c8096602f2665f19756f056b9a56a2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp314-cp314t-macosx_11_0_arm64.whl

Download URL rp2040py-0.2.5-cp314-cp314t-macosx_11_0_arm64.whl
Size 2.2 MB
Tags CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
a1f4b6c8d2d48f59c6354e598d1cd0b54f13b877347baf5108afa927cabcdb17
BLAKE2b-256 checksum
How to use checksums
b89586d7501144341108ab415d288a9c8055d9c784789bb67abbd6f5b15cd7bf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp314-cp314t-macosx_10_15_x86_64.whl

Download URL rp2040py-0.2.5-cp314-cp314t-macosx_10_15_x86_64.whl
Size 2.2 MB
Tags CPython 3.14 CPython 3.14 free-threading macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
975339aa3fc4d653fcc75995cadd4cc957098a31c8c737cee69337b285388777
BLAKE2b-256 checksum
How to use checksums
518701e294065dc9c3d2a2a1db1d4624128552c797483d40a71190722fea5814
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp314-cp314t-macosx_10_15_universal2.whl

Download URL rp2040py-0.2.5-cp314-cp314t-macosx_10_15_universal2.whl
Size 2.8 MB
Tags CPython 3.14 CPython 3.14 free-threading macOS 10.15+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
7d239a3cc2bf0d4a4cad4b1d889f83956bfc4064c6b6a5fc4e3d3e42d6deb4ef
BLAKE2b-256 checksum
How to use checksums
b08a30e261bfe7145859ed3b891b67ce978973b525a57a45666b5aa51cbf4dd3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp314-cp314-android_24_x86_64.whl

Download URL rp2040py-0.2.5-cp314-cp314-android_24_x86_64.whl
Size 2.1 MB
Tags Android API level 24+ x86-64 CPython 3.14
SHA-256 checksum
How to use checksums
885bb601204da19ac5639ec0b30ad114e6a9ce99ce0a6957c55be661b3965564
BLAKE2b-256 checksum
How to use checksums
56e575f684fba565b822f585d3bcfb4cab6a68dbca0d8d77dc32949b02f80f01
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp314-cp314-android_24_arm64_v8a.whl

Download URL rp2040py-0.2.5-cp314-cp314-android_24_arm64_v8a.whl
Size 2.1 MB
Tags Android API level 24+ ARM64 v8a CPython 3.14
SHA-256 checksum
How to use checksums
9a434f18175bfb40ca071728bc18dd52b2ba8c9160822f2a82044e1bad95a396
BLAKE2b-256 checksum
How to use checksums
536c94c64cecf74d47bde763cbd46278676cc2bc6c21a79679ebd0ebfed11d6b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp313-cp313-android_24_x86_64.whl

Download URL rp2040py-0.2.5-cp313-cp313-android_24_x86_64.whl
Size 2.1 MB
Tags Android API level 24+ x86-64 CPython 3.13
SHA-256 checksum
How to use checksums
bdeb0b0cf5977e7d17e88a983a341121563695eacdbc180172ea98eb0474422b
BLAKE2b-256 checksum
How to use checksums
d1e3766c017303dc4080a652550a8a6c5e5659d3e73c203931cd2c55f4d4fa23
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp313-cp313-android_24_arm64_v8a.whl

Download URL rp2040py-0.2.5-cp313-cp313-android_24_arm64_v8a.whl
Size 2.0 MB
Tags Android API level 24+ ARM64 v8a CPython 3.13
SHA-256 checksum
How to use checksums
8edb571e8354b779dc14810e3a9bcdfe5d517752e2c0deec84b0236e9426edbc
BLAKE2b-256 checksum
How to use checksums
c2194d2767653d2ca197c6232c156b9602964e0139e93885b8aa7ecd0e14ab57
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp311-abi3-win_arm64.whl

Download URL rp2040py-0.2.5-cp311-abi3-win_arm64.whl
Size 2.0 MB
Tags CPython 3.11 Windows ARM64 abi3
SHA-256 checksum
How to use checksums
1bf2b66e53c2ee4b8b7182dce311e5295053051af22cf28ed7e2a4159103171e
BLAKE2b-256 checksum
How to use checksums
9df55981ba897256282270c338e96ee1b6d7488a46617685a312f34c5e8c7527
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp311-abi3-win_amd64.whl

Download URL rp2040py-0.2.5-cp311-abi3-win_amd64.whl
Size 2.0 MB
Tags CPython 3.11 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
6c7668ce2f30de7f7466b363a0282611967aaced93b216d4c76fd28a26b20bb9
BLAKE2b-256 checksum
How to use checksums
d68a35824b27eb81537df7c6b5974583c309edc451dcc46fbb4b3543b787e8ef
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp311-abi3-win32.whl

Download URL rp2040py-0.2.5-cp311-abi3-win32.whl
Size 1.9 MB
Tags CPython 3.11 Windows x86-32 abi3
SHA-256 checksum
How to use checksums
3adf875c83aee51a1c3ab2b41c2f7ce7cbc766e6fbd26dd66058f0ffe0364c46
BLAKE2b-256 checksum
How to use checksums
58e2a931a78543b4731a838df3c6eb0a3bb1bde7bcc8553f41e7884ada304433
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp311-abi3-musllinux_1_2_x86_64.whl

Download URL rp2040py-0.2.5-cp311-abi3-musllinux_1_2_x86_64.whl
Size 2.2 MB
Tags CPython 3.11 Linux musl 1.2+ x86-64 abi3
SHA-256 checksum
How to use checksums
f3fdd2bb8a29eea9c83c273b1f957759634feccb9a888446cac1a24d9784259a
BLAKE2b-256 checksum
How to use checksums
0bb69c6e053c742d913db8a4881ac33c375c0831ddf382ea9c8cc2aaa58e0c63
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp311-abi3-musllinux_1_2_i686.whl

Download URL rp2040py-0.2.5-cp311-abi3-musllinux_1_2_i686.whl
Size 2.2 MB
Tags CPython 3.11 Linux musl 1.2+ x86-32 abi3
SHA-256 checksum
How to use checksums
f6c24840c3760276abe526b37a16ee9d1b510801c53957bf7189c00918fe1046
BLAKE2b-256 checksum
How to use checksums
5ae3654359203864baa9e214614a80bf4030603bfdc45e4f08cc4f073f718417
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp311-abi3-musllinux_1_2_armv7l.whl

Download URL rp2040py-0.2.5-cp311-abi3-musllinux_1_2_armv7l.whl
Size 2.1 MB
Tags CPython 3.11 Linux musl 1.2+ ARMv7l abi3
SHA-256 checksum
How to use checksums
dacce8a2e23d117da7b82f9616e5d791c9f639a5b6b01424a9faa36a6f8d689b
BLAKE2b-256 checksum
How to use checksums
a00d1d0bc13e82b6b3542f15fb48bcd5335556dea9a1b4ea2748c1cfa48e530f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp311-abi3-musllinux_1_2_aarch64.whl

Download URL rp2040py-0.2.5-cp311-abi3-musllinux_1_2_aarch64.whl
Size 2.2 MB
Tags CPython 3.11 Linux musl 1.2+ ARM64 abi3
SHA-256 checksum
How to use checksums
531dc73dc75b34e0976a0512918cb574f051ad1660e21d670f08fb8712636309
BLAKE2b-256 checksum
How to use checksums
1a0e52c8c79f3ffc7a32c53237dfa25128c21d807304717fe9c093f42a9518d8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL rp2040py-0.2.5-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 2.2 MB
Tags CPython 3.11 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 abi3
SHA-256 checksum
How to use checksums
5c2a6a27c01763104b49217ce9485e9998173dbea8d71630361a8ccad9c0f52d
BLAKE2b-256 checksum
How to use checksums
a200df3d93dd37c0988128209827cf12e243a84d52a96c8c6d576cdefe50e49f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp311-abi3-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl

Download URL rp2040py-0.2.5-cp311-abi3-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl
Size 2.1 MB
Tags CPython 3.11 Linux glibc 2.17+ ARMv7l Linux glibc 2.31+ ARMv7l abi3
SHA-256 checksum
How to use checksums
5016e7974fb329d31b02fb4b3009ff372aae46dbe680efc823abee18f988be0e
BLAKE2b-256 checksum
How to use checksums
55fd0da4c0b385918e27b34539c001e1dc790f98560c2dfd93b1a176576cc585
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL rp2040py-0.2.5-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 2.2 MB
Tags CPython 3.11 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64 abi3
SHA-256 checksum
How to use checksums
4c12bae80f9bec8527abeeb7b3840b36e498ec4232b936b17708af7ad4ac0b19
BLAKE2b-256 checksum
How to use checksums
fa3955c5ef6d7e55e1efab9584d9789a95de1628df9786f3a265db94d86f1451
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp311-abi3-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl

Download URL rp2040py-0.2.5-cp311-abi3-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl
Size 2.2 MB
Tags CPython 3.11 Linux glibc 2.28+ x86-32 Linux glibc 2.5+ x86-32 abi3
SHA-256 checksum
How to use checksums
19322f11afc21c6fdae48e50dcc7db995220a3902a06b6255feb5f31610e309c
BLAKE2b-256 checksum
How to use checksums
9419f016753cb1cab0126592c1945fe945db5676d7ecd19eb6c760bd2d242cac
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp311-abi3-macosx_11_0_arm64.whl

Download URL rp2040py-0.2.5-cp311-abi3-macosx_11_0_arm64.whl
Size 2.1 MB
Tags CPython 3.11 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
42221024c2d24080e1893cc5d931d2b64431ca145ba2010d88ba1affd79d9880
BLAKE2b-256 checksum
How to use checksums
3a92ff2874e878cd82871487eddc5d204e994512348e6d1204f26cd3578171d0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp311-abi3-macosx_10_9_x86_64.whl

Download URL rp2040py-0.2.5-cp311-abi3-macosx_10_9_x86_64.whl
Size 2.1 MB
Tags CPython 3.11 abi3 macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
a37367b3d5028cb17e73b97d1b3eb2630c1731e2d460c4ed557546a07ee5c2d7
BLAKE2b-256 checksum
How to use checksums
94a48a98aac12f9ea9ca61d7d38bde88b5b97366497a9a9ae7235ac8ae8c966c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp311-abi3-macosx_10_9_universal2.whl

Download URL rp2040py-0.2.5-cp311-abi3-macosx_10_9_universal2.whl
Size 2.6 MB
Tags CPython 3.11 abi3 macOS 10.9+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
7517c47e5d21941a8822e0ed5e134d9d1dc8db9e53808be5f86266fcc70dda21
BLAKE2b-256 checksum
How to use checksums
c91f92e43ce5822ed2b4353ea0f050772526ebc1fec52fbe4a15cb24c714fd2d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp310-cp310-win_arm64.whl

Download URL rp2040py-0.2.5-cp310-cp310-win_arm64.whl
Size 2.0 MB
Tags CPython 3.10 Windows ARM64
SHA-256 checksum
How to use checksums
64ea7aafd547ebc1b2b764cfc1baf4a73aba7f5737abc67ad4b3aaf1ec07ddb5
BLAKE2b-256 checksum
How to use checksums
513843e56cb659315d092a16510bdb264d1a9ac29c82d8d376240c09a3ed1b1e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp310-cp310-win_amd64.whl

Download URL rp2040py-0.2.5-cp310-cp310-win_amd64.whl
Size 2.1 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
5e0e012137a2ee8208ef6a799216e9acefa334fa2c3bb48395000847e7f0be4e
BLAKE2b-256 checksum
How to use checksums
35aae3539b9d215f977e0ebd1749145feb4f11c0e4ce1ab01273a525be64e886
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp310-cp310-win32.whl

Download URL rp2040py-0.2.5-cp310-cp310-win32.whl
Size 2.0 MB
Tags CPython 3.10 Windows x86-32
SHA-256 checksum
How to use checksums
116e6a7fb256a289a3f6cf22e905cda98ae7f5e1bad8cb1ba2da899550dbc163
BLAKE2b-256 checksum
How to use checksums
a93d2cf8caecdddc5e06d09517fc7c1ce36ea66588ff0ca770b35844cb28d570
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp310-cp310-musllinux_1_2_x86_64.whl

Download URL rp2040py-0.2.5-cp310-cp310-musllinux_1_2_x86_64.whl
Size 2.2 MB
Tags CPython 3.10 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
0b49fe38f7ce7cd57261d34dc68a2685c80aacf779d6967d738d6c4b8193005a
BLAKE2b-256 checksum
How to use checksums
f55101f7e2ab11ea20a3389ff146f0fef76e9cbb176fb546521d5bfe5c0c76c6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp310-cp310-musllinux_1_2_i686.whl

Download URL rp2040py-0.2.5-cp310-cp310-musllinux_1_2_i686.whl
Size 2.3 MB
Tags CPython 3.10 Linux musl 1.2+ x86-32
SHA-256 checksum
How to use checksums
0a6905c43c17d7872dd8e160a1bbebead7e3b56cedcdff4d04b348f62a8ae005
BLAKE2b-256 checksum
How to use checksums
1e91b0da378bea69ea25a9b0c7cac42906872898df2a6c93651f78efc9cd680f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp310-cp310-musllinux_1_2_armv7l.whl

Download URL rp2040py-0.2.5-cp310-cp310-musllinux_1_2_armv7l.whl
Size 2.1 MB
Tags CPython 3.10 Linux musl 1.2+ ARMv7l
SHA-256 checksum
How to use checksums
739cb6b7d3ace84d788690a57c8505dc7e248f9b30292423e3d6c9e95106d208
BLAKE2b-256 checksum
How to use checksums
ef1d2fa725d8a5cd16cfaa79af31bc531f0c041487b29016a2cf568f80643df7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp310-cp310-musllinux_1_2_aarch64.whl

Download URL rp2040py-0.2.5-cp310-cp310-musllinux_1_2_aarch64.whl
Size 2.2 MB
Tags CPython 3.10 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
1af6166859050c693427f8f7fa9a0d7f25e57ccf5b3d4e92cc533f2b18c19aa3
BLAKE2b-256 checksum
How to use checksums
fa112db6b6eeff5b17232b560797e735b3159a0e301515cba3e7249b319dbbf2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL rp2040py-0.2.5-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 2.2 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
8815db378130c80cec584101f90179c410a8d736560c4c4eee27d3d4f58d5f08
BLAKE2b-256 checksum
How to use checksums
27dc6a7c97ddf55fc7d386fa7ff9aa98223c2d60d2d2a6df7e9b637f4af87904
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl

Download URL rp2040py-0.2.5-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl
Size 2.1 MB
Tags CPython 3.10 Linux glibc 2.17+ ARMv7l Linux glibc 2.31+ ARMv7l
SHA-256 checksum
How to use checksums
f4a9392dfc87b63aeee39f8aaa1be77c0fdf9a8879f870c638f06d1189f4fe92
BLAKE2b-256 checksum
How to use checksums
cd32ade96f1a0b179f9c112e8ba67f7517b3a8a436b89333d29bc579fd727cee
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL rp2040py-0.2.5-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 2.2 MB
Tags CPython 3.10 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
5d043a8bd03de5f880f55ad7ec078afb14610b29447e34b03d0c1414387ccbdb
BLAKE2b-256 checksum
How to use checksums
daf8bbde98c26fead4110e67e991dd0759f63e8f87e63afe2d4c427ede9e3664
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl

Download URL rp2040py-0.2.5-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl
Size 2.3 MB
Tags CPython 3.10 Linux glibc 2.28+ x86-32 Linux glibc 2.5+ x86-32
SHA-256 checksum
How to use checksums
a811435cc7edf4c1e122c8e850819953fabb8678469acaf34c1a067f69902814
BLAKE2b-256 checksum
How to use checksums
6a332ecbc26fbb5e21ac892f4c1400124fecec1a43edcad881d44e99f357db4f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp310-cp310-macosx_11_0_arm64.whl

Download URL rp2040py-0.2.5-cp310-cp310-macosx_11_0_arm64.whl
Size 2.1 MB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
2697a1ba8c864b415ad211b3526ed35b104d9e4b022f1a7d9402dd672eb54df8
BLAKE2b-256 checksum
How to use checksums
3a418109ff7a4064a548826c624c28f6c4cccd184887446523465b134e409f4f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp310-cp310-macosx_10_9_x86_64.whl

Download URL rp2040py-0.2.5-cp310-cp310-macosx_10_9_x86_64.whl
Size 2.1 MB
Tags CPython 3.10 macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
57e92b9c3059445df1fe66962f9b049d6ed6e5c814232b7cb2999a372027668b
BLAKE2b-256 checksum
How to use checksums
aa68889535ecd07411fc7ffd237d9e037630f19bae5a1ab79850a15bfc83181b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log

Release files / rp2040py-0.2.5-cp310-cp310-macosx_10_9_universal2.whl

Download URL rp2040py-0.2.5-cp310-cp310-macosx_10_9_universal2.whl
Size 2.8 MB
Tags CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
316643ca493a836ed702ed4826bcb6b8bba60401acba26a40fa61ce705d7cc5b
BLAKE2b-256 checksum
How to use checksums
8eefdced61a2cd7baacc80ea5731c0b6f4d68686da2df79050b975d7bc6976f6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 17, 2026.

Transparency log
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