This release is a pre-release and may not be stable for production use.
socpuppet 🧦
SoC Puppet (say "sock puppet") is an open-source virtual platform: a whole system-on-chip simulated on your laptop, with Python pulling the strings.
🌙 Every push runs the quick tests, one boot of each area included, on Linux on both harts; every night runs every test on every machine, Ubuntu and macOS, Intel and Arm. Click a badge for its runs, and a run for each machine's jobs.
🚧 Early days, but the show has grown: a chiplet host and an NVMe SSD boot three Zephyr firmwares in one simulation, from a ROM and a flash if you like, with a debugger on each CPU; OpenSBI and UEFI, the firmware a RISC-V server really runs, boot on the host too, and 🐧 Linux boots on them to a shell that you, or Python, can type at, with its root filesystem on the SSD and the SSD's own firmware behind it (booting Linux). And it is out:
pip install socpuppet(Try it). Next on stage, the container (the roadmap).
What's the show?
A chiplet host and an NVMe SSD, each booting its own Zephyr firmware, inside one SystemC simulation that you compose and drive from Python.
- 🧵 Python holds the strings. Compose a platform, load firmware, then run, step, peek, poke and inject faults from a script or a test.
- 🎭 Every block has a stand-in. Any CPU, link or device can be swapped for a simpler one that holds its place, so you can study one piece with everything around it simplified.
- 🎓 Built to teach. Each model explains the real hardware it represents and what it simplifies.
- 🔧 Built to use. Open tools only (SystemC, Zephyr, RISC-V) and tests behind every model, following the way commercial virtual platforms are built.
A first show
The host boots Zephyr. It is a 64-bit RISC-V CPU with RAM, a timer and an interrupt controller on one die, and a UART on another.
import socpuppet as sp
from socpuppet import images
from socpuppet.boards.host import host
board = host() # 🧵 describe the platform
board.platform.build() # create the simulation
board.platform.load_elf( # Zephyr's hello world, built for this board
images.find("hello_world_socpuppet_host.elf")
)
board.platform.run_until(
lambda: "Hello World!" in board.uart.output, timeout=sp.ms(50)
)
board.platform.run(sp.ms(1)) # let the line finish
print(board.uart.output)
*** Booting Zephyr OS build v4.4.2 ***
Hello World! socpuppet_host/socpuppet_rv64
The image is fetched the first time it is asked for, so there is nothing to build; uv run firmware/build.py zephyr builds it, and every other image the tests boot, into build/firmware if you would rather. Save the show as my_show.py and run it with python my_show.py, once socpuppet is installed (Try it); in a checkout, examples/host_hello.py is the same show with a tidier ending. The board Zephyr was built for is generated from the same Python description that builds the simulation, so the two cannot disagree about where the UART is. Boot your firmware here has the steps for an application of your own.
A smaller show
A platform does not need a CPU. Here a script plays the CPU's part: a 🎭 stand-in that carries out bus operations one at a time.
import socpuppet as sp
RAM = 0x8000_0000
def script(): # 🧵 each yield is one bus operation
yield sp.write32(RAM, 0xC0FFEE)
value = yield sp.read32(RAM) # a read sends its value back in
yield sp.expect32(RAM, value)
platform = sp.Platform()
compute, io = platform.group("compute"), platform.group("io") # two dies
cpu = compute.add("cpu", sp.ScriptedBusMaster(script)) # 🎭 stands in for the CPU
d2d = platform.link("d2d", sp.PassThroughLink(), compute, io) # 🎭 stands in for the die-to-die link
bus = io.add("bus", sp.Router())
ram = io.add("ram", sp.Memory(size=64 * 1024))
platform.connect(cpu.socket, d2d.a.target, trace=True)
platform.connect(d2d.b.initiator, bus.target)
bus.map(ram.socket, base=RAM)
platform.build()
platform.run()
print(sp.render_trace(platform.trace))
0 ns write 0x80000000 ee ff c0 00 ✅ compute.cpu.socket → compute.d2d.target
0 ns read 0x80000000 ee ff c0 00 ✅ compute.cpu.socket → compute.d2d.target
0 ns read 0x80000000 ee ff c0 00 ✅ compute.cpu.socket → compute.d2d.target
And now for something completely different: the same description also gives the devicetree that firmware is built against, with nothing simulated.
socpuppet devicetree examples/passthrough_hello.py
And its address map, which is what answers at which address and through which window:
socpuppet address-map examples/passthrough_hello.py
A show with a drive in it
A script can also play the host's driver. Here it finds an NVMe drive over PCIe and uses it. 🎭 The drive is a stand-in that answers for itself, but the PCIe in between is real enough to matter: nothing can be read until the script has found the drive, given its registers a place in memory and said where its interrupts go.
def script():
pci = sp.PcieHost(ecam=ECAM_BASE)
msi = sp.MsiHost(receiver=MSI_BASE)
(drive,) = yield from pci.scan() # find it
yield from pci.place(drive, WINDOW_BASE) # place its registers
yield from pci.route_interrupts(drive, to=msi) # route its interrupts
nvme = sp.NvmeHost(registers=WINDOW_BASE, memory=RAM_BASE, interrupt=msi.wait)
yield from nvme.enable()
yield from nvme.write_blocks(first=7, data=block)
read_back = yield from nvme.read_blocks(first=7, count=1)
The platform around it, split over two dies, is in examples/nvme_hello.py.
The rest of the cast arrives one example at a time. Each swaps one 🎭 stand-in for the real thing, and the scripts around it do not change by a line.
| Example | What it shows |
|---|---|
examples/ssd_hello.py |
The drive is built like an SSD: hardware for the queues and the data, a NAND chip, and 🎭 a short Python script for its firmware, which is the place to read what an SSD does with a write |
examples/ssd_firmware_hello.py |
The script gives way to the SSD's own CPU and its real firmware, a Zephyr application in firmware/ssd |
examples/host_and_ssd_hello.py |
The host is a 64-bit CPU running Zephyr and its SSD a 32-bit CPU running Zephyr, sharing one simulation and one clock; both consoles printed as one story |
examples/chiplet_host_hello.py |
The host starts up the way a chiplet does: the IO die's manager trains the link between the dies, packet by packet, and lets the host's CPU out of reset |
examples/full_bootchain.py |
No script left: three CPUs run three Zephyr images, and the three consoles tell the boot as one story, each line with who said it and when |
examples/shell_from_python.py |
The puppet answers back: Python types at Zephyr's shell and reads what it says, with the console's interrupt crossing the dies as a message |
examples/boot_from_flash.py |
Booting the way silicon does: the CPU starts in a boot ROM, finds the firmware in a flash on the other die, checks it and jumps, and the watchdog resets it twice |
Try it
On Linux or a Mac, with Python 3.12 or newer:
pip install socpuppet
uv add socpuppet adds it to a project of yours, and pipx install socpuppet installs the socpuppet command alone. 🍺 On a Mac with Homebrew, brew install cphurley82/socpuppet/socpuppet installs it into Homebrew's Python, so that python3 there can import it. Then save a show above as my_show.py and run python my_show.py. 🚧 Windows, under WSL, is not tested yet (the roadmap).
🐧 To boot Linux and type at its shell yourself (its images are fetched the first time):
socpuppet linux
🔧 To change socpuppet, or to run its examples and its tests, build it from a checkout. You need a C++20 compiler and uv; uv brings Python, CMake and Ninja.
git clone https://github.com/cphurley82/socpuppet && cd socpuppet
uv sync
uv run cmake --preset dev && uv run cmake --build --preset dev
PYTHONPATH=python uv run python examples/passthrough_hello.py
PYTHONPATH=python uv run python examples/nvme_hello.py
PYTHONPATH=python uv run python examples/ssd_hello.py
⚠️ The first build compiles SystemC and its companions from source and takes several minutes.
🧦 Or on the second hart, QEMU's CPU by way of QBox, which is GPL and so built here from source, in one command (setup.md lists the packages it needs):
uv run tools/qbox.py
🐧 Or the other way round: with pciem, a Linux kernel module, socpuppet drive puts the puppet's SSD on this machine's own PCIe bus, and this machine's Linux formats and mounts it (setup.md).
🧪 The labs are sessions to run at the keyboard, and the first, Linux end to end, is this boot with everything you can do to it: ssh in, swap the CPU for QEMU's, swap the 🎭 stand-ins for the real models, and watch what changes.
- 🌱 Your first show: a chip that answers when you type at it, and the line to change, for someone who has never seen a chip from the inside.
- 🧭 Why socpuppet exists: who it is for, the aims, and how choices get made.
- 🚀 Boot your firmware here: your own Zephyr application on the host, with a debugger on it.
- 💡 How it is put together, with the vocabulary explained and a page for every model.
- 🛠️ Setting up a machine for development, from a bare install to every test passing.
- 📚 All the docs, by the reader they are written for.
Who's it for?
Anyone curious about how a chip boots before the chip exists. In the spirit of Raspberry Pi, socpuppet aims to be friendly enough to learn on and solid enough to do real work with. It is written for a ladder of readers, bottom rung first:
- 🌱 Someone who knows a little Python and has never seen a chip from the inside: start at Your first show, a chip that answers when you type at it.
- 🎓 The learner building a first virtual platform.
- 🧵 The firmware developer who installs a board with pip and boots their image on it.
- The engineer who builds virtual platforms for a living and wants methodology to take home.
Why socpuppet exists has the aims, and the rules that decide what gets built next.
Metadata
Release files for socpuppet 0.0.1rc2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| socpuppet-0.0.1rc2.tar.gz | 1.3 MB | Without provenance | Details for socpuppet-0.0.1rc2.tar.gz |
Built distributions (wheels)
Total release size: 53.7 MB
Release files / socpuppet-0.0.1rc2.tar.gz
| Download URL | socpuppet-0.0.1rc2.tar.gz |
|---|---|
| Size | 1.3 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
380ad8bda3f8c35ef8acf8fa7fa7d544aded12c133f79d77be66d90d794a475c
|
|
BLAKE2b-256 checksum How to use checksums |
8d8c4b89816a919621207c918827bd7e50a2ff194cd60d8b0c6cb59870915b21
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.7 {"installer":{"name":"uv","version":"0.13.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / socpuppet-0.0.1rc2-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | socpuppet-0.0.1rc2-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 4.0 MB |
| Tags | CPython 3.15 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
82dba90a2c651c8b373d6bb76ee989c6b11fc7a5245c82d45aad184481c6f311
|
|
BLAKE2b-256 checksum How to use checksums |
4843c0ffe834d7e6ec4837959844608d312ced63f126ae92179f7dc67d80e030
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.7 {"installer":{"name":"uv","version":"0.13.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / socpuppet-0.0.1rc2-cp315-cp315-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
| Download URL | socpuppet-0.0.1rc2-cp315-cp315-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 3.7 MB |
| Tags | CPython 3.15 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
d9202a40c187380446064d4d0fa30dc012b1fa729a4eb6ab7e5f5bed51b68576
|
|
BLAKE2b-256 checksum How to use checksums |
844a079845138b664e817f107a8797ef423ccfa8f094c43ccd36642d9717556e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.7 {"installer":{"name":"uv","version":"0.13.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / socpuppet-0.0.1rc2-cp315-cp315-macosx_13_0_x86_64.whl
| Download URL | socpuppet-0.0.1rc2-cp315-cp315-macosx_13_0_x86_64.whl |
|---|---|
| Size | 2.9 MB |
| Tags | CPython 3.15 macOS 13.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
14bf4884dea4cdc79ba9d5e60a60c877ad16b8ee80e8a7f6db6caa827375ccef
|
|
BLAKE2b-256 checksum How to use checksums |
f87464ac7df71517f6d6c98007d2c6a8e86590e0308db97cda26b10a5568aee3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.7 {"installer":{"name":"uv","version":"0.13.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / socpuppet-0.0.1rc2-cp315-cp315-macosx_13_0_arm64.whl
| Download URL | socpuppet-0.0.1rc2-cp315-cp315-macosx_13_0_arm64.whl |
|---|---|
| Size | 2.5 MB |
| Tags | CPython 3.15 macOS 13.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
67231c6113b473ec69e3e3d94cef266eeadb8ee38fb1ae9c83af9a2e7cae7398
|
|
BLAKE2b-256 checksum How to use checksums |
bbd4d534bbc028a547942f18a79492fa108e738548c23ac2d457ecffb46776a6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.7 {"installer":{"name":"uv","version":"0.13.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / socpuppet-0.0.1rc2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | socpuppet-0.0.1rc2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 4.0 MB |
| Tags | CPython 3.14 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
364f3a6d76719c938741d1e8c931f7bfb9b4099135e41994c2bdf5962802269e
|
|
BLAKE2b-256 checksum How to use checksums |
956a22c1f33e4657995185612aa897104bac5056ae6d2f2808205e320ba93cd9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.7 {"installer":{"name":"uv","version":"0.13.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / socpuppet-0.0.1rc2-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
| Download URL | socpuppet-0.0.1rc2-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 3.7 MB |
| Tags | CPython 3.14 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
7f7cf6816960d1dc3934c29c0700a0c1d9439758200fed1a5ed97f505bfe7cd5
|
|
BLAKE2b-256 checksum How to use checksums |
61845465cfc2af5941d07b09f3861b24fe96505dabef618d0dfc8e0e8919454e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.7 {"installer":{"name":"uv","version":"0.13.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / socpuppet-0.0.1rc2-cp314-cp314-macosx_13_0_x86_64.whl
| Download URL | socpuppet-0.0.1rc2-cp314-cp314-macosx_13_0_x86_64.whl |
|---|---|
| Size | 2.9 MB |
| Tags | CPython 3.14 macOS 13.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
763b8a0fe446fd543a6249ccb26214af4c3879f12e544c7cc9ea938e737ef629
|
|
BLAKE2b-256 checksum How to use checksums |
8a52fd65f6af7b0733417c39a9ac79b18e6ec656779d8d394c272ddf84547e2a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.7 {"installer":{"name":"uv","version":"0.13.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / socpuppet-0.0.1rc2-cp314-cp314-macosx_13_0_arm64.whl
| Download URL | socpuppet-0.0.1rc2-cp314-cp314-macosx_13_0_arm64.whl |
|---|---|
| Size | 2.5 MB |
| Tags | CPython 3.14 macOS 13.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
3b5aaac518758d37fdc8ce0b99a86a468e7e3051ad6e3fbab7c46678c7f5e04c
|
|
BLAKE2b-256 checksum How to use checksums |
56f1d48cdaac9343c4330ef01b41fc8e455bb46e7e78366e949a079f8f34ae10
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.7 {"installer":{"name":"uv","version":"0.13.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / socpuppet-0.0.1rc2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | socpuppet-0.0.1rc2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 4.0 MB |
| Tags | CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
81b5973288b573a7ee8053cedbf66a81235745c5d5ea88b4e9a81f5d993348bd
|
|
BLAKE2b-256 checksum How to use checksums |
22e9ce3e560713e6c9738122ae052ff72ecf1d810822bd8912c1e40435cf4019
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.7 {"installer":{"name":"uv","version":"0.13.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / socpuppet-0.0.1rc2-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
| Download URL | socpuppet-0.0.1rc2-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 3.7 MB |
| Tags | CPython 3.13 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
4fd2b4d0b7cbd4de89800a71530b344b02a4ae5a57a7c9f63d6c07a060954df9
|
|
BLAKE2b-256 checksum How to use checksums |
97bea92abaaf012a2579d0e9c01c77ca4ee89083a5fd4a089af542ca71ee607b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.7 {"installer":{"name":"uv","version":"0.13.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / socpuppet-0.0.1rc2-cp313-cp313-macosx_13_0_x86_64.whl
| Download URL | socpuppet-0.0.1rc2-cp313-cp313-macosx_13_0_x86_64.whl |
|---|---|
| Size | 2.9 MB |
| Tags | CPython 3.13 macOS 13.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
0cfb19ff9b771d824cb0d9c154bbc8ccb3a3504e7f0bf384aa7c4ee82a59228f
|
|
BLAKE2b-256 checksum How to use checksums |
b009c87bd0795a824e8b5d2b5ac1492f1100408c317b184eb85d5425b78e56fa
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.7 {"installer":{"name":"uv","version":"0.13.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / socpuppet-0.0.1rc2-cp313-cp313-macosx_13_0_arm64.whl
| Download URL | socpuppet-0.0.1rc2-cp313-cp313-macosx_13_0_arm64.whl |
|---|---|
| Size | 2.5 MB |
| Tags | CPython 3.13 macOS 13.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
9645f8393f2e350d47670dceb63ac64c56b895981fec945f6dd223fd79c1eba5
|
|
BLAKE2b-256 checksum How to use checksums |
c1d0b695c275d86884f16a28e3595bfcfd01709d34f95f03db89b49de024a963
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.7 {"installer":{"name":"uv","version":"0.13.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / socpuppet-0.0.1rc2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | socpuppet-0.0.1rc2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 4.0 MB |
| Tags | CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
3dc8b9130d9e7880d13dfc92e15bca976545cd7c2253d5f3b526a81fd42a31ee
|
|
BLAKE2b-256 checksum How to use checksums |
f335ac67c24d02d657e1518a34b24b1bd2f9ef308fb7ba648c13b27a57d4be06
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.7 {"installer":{"name":"uv","version":"0.13.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / socpuppet-0.0.1rc2-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
| Download URL | socpuppet-0.0.1rc2-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 3.7 MB |
| Tags | CPython 3.12 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
04538f2702cbe6f13854debfae96efd3fc5e353d075ba3eae3f85e857e15de7e
|
|
BLAKE2b-256 checksum How to use checksums |
a8d7238989e3001b259da95197368f6cb36de01ee6b15fc2391bb2ba1ac77a32
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.7 {"installer":{"name":"uv","version":"0.13.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / socpuppet-0.0.1rc2-cp312-cp312-macosx_13_0_x86_64.whl
| Download URL | socpuppet-0.0.1rc2-cp312-cp312-macosx_13_0_x86_64.whl |
|---|---|
| Size | 2.9 MB |
| Tags | CPython 3.12 macOS 13.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
566e44d9e727bea798728a6c35a339b1da69b2f055bec44288f4e891774ee5c6
|
|
BLAKE2b-256 checksum How to use checksums |
2e3a45accd2ffff5fc856e974f77669e7a4b7edf7670c1dfdb4caa15f0443bc1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.7 {"installer":{"name":"uv","version":"0.13.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / socpuppet-0.0.1rc2-cp312-cp312-macosx_13_0_arm64.whl
| Download URL | socpuppet-0.0.1rc2-cp312-cp312-macosx_13_0_arm64.whl |
|---|---|
| Size | 2.5 MB |
| Tags | CPython 3.12 macOS 13.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
a7fcd8f345b8bd4ff17908fd31c42319ba968b93a7c2c78805ab4d9932c8dd22
|
|
BLAKE2b-256 checksum How to use checksums |
6e9e72c61f7a2793fda083939b92a55040b9f84209d291f062d3ab409331c446
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.7 {"installer":{"name":"uv","version":"0.13.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for socpuppet 0.0.1rc2
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.