Skip to main content
Pre-release

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.

Nightly CI

🌙 Every push runs the quick tests, one boot of each area included, on Linux on both harts and on an Apple silicon Mac; 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.

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.1rc1

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

Source distribution (sdist)

Source distribution for socpuppet 0.0.1rc1
File Size Uploaded Provenance Actions
socpuppet-0.0.1rc1.tar.gz 1.3 MB Without provenance Details for socpuppet-0.0.1rc1.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for socpuppet 0.0.1rc1
File Actions
socpuppet-0.0.1rc1-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.15 CPython 3.15 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details for socpuppet-0.0.1rc1-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
socpuppet-0.0.1rc1-cp315-cp315-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.15 CPython 3.15 Linux glibc 2.26+ ARM64, Linux glibc 2.28+ ARM64 Details for socpuppet-0.0.1rc1-cp315-cp315-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
socpuppet-0.0.1rc1-cp315-cp315-macosx_13_0_x86_64.whl CPython 3.15 CPython 3.15 macOS 13.0+ x86-64 Details for socpuppet-0.0.1rc1-cp315-cp315-macosx_13_0_x86_64.whl
socpuppet-0.0.1rc1-cp315-cp315-macosx_13_0_arm64.whl CPython 3.15 CPython 3.15 macOS 13.0+ ARM64 Details for socpuppet-0.0.1rc1-cp315-cp315-macosx_13_0_arm64.whl
socpuppet-0.0.1rc1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details for socpuppet-0.0.1rc1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
socpuppet-0.0.1rc1-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ ARM64, Linux glibc 2.26+ ARM64 Details for socpuppet-0.0.1rc1-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
socpuppet-0.0.1rc1-cp314-cp314-macosx_13_0_x86_64.whl CPython 3.14 CPython 3.14 macOS 13.0+ x86-64 Details for socpuppet-0.0.1rc1-cp314-cp314-macosx_13_0_x86_64.whl
socpuppet-0.0.1rc1-cp314-cp314-macosx_13_0_arm64.whl CPython 3.14 CPython 3.14 macOS 13.0+ ARM64 Details for socpuppet-0.0.1rc1-cp314-cp314-macosx_13_0_arm64.whl
socpuppet-0.0.1rc1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details for socpuppet-0.0.1rc1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
socpuppet-0.0.1rc1-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.26+ ARM64, Linux glibc 2.28+ ARM64 Details for socpuppet-0.0.1rc1-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
socpuppet-0.0.1rc1-cp313-cp313-macosx_13_0_x86_64.whl CPython 3.13 CPython 3.13 macOS 13.0+ x86-64 Details for socpuppet-0.0.1rc1-cp313-cp313-macosx_13_0_x86_64.whl
socpuppet-0.0.1rc1-cp313-cp313-macosx_13_0_arm64.whl CPython 3.13 CPython 3.13 macOS 13.0+ ARM64 Details for socpuppet-0.0.1rc1-cp313-cp313-macosx_13_0_arm64.whl
socpuppet-0.0.1rc1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details for socpuppet-0.0.1rc1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
socpuppet-0.0.1rc1-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ ARM64, Linux glibc 2.26+ ARM64 Details for socpuppet-0.0.1rc1-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
socpuppet-0.0.1rc1-cp312-cp312-macosx_13_0_x86_64.whl CPython 3.12 CPython 3.12 macOS 13.0+ x86-64 Details for socpuppet-0.0.1rc1-cp312-cp312-macosx_13_0_x86_64.whl
socpuppet-0.0.1rc1-cp312-cp312-macosx_13_0_arm64.whl CPython 3.12 CPython 3.12 macOS 13.0+ ARM64 Details for socpuppet-0.0.1rc1-cp312-cp312-macosx_13_0_arm64.whl

Total release size: 53.6 MB

Release files / socpuppet-0.0.1rc1.tar.gz

Download URL socpuppet-0.0.1rc1.tar.gz
Size 1.3 MB
Tags Source
SHA-256 checksum
How to use checksums
272d9842215d71e9eef3b855dc78456b49328f265cce41d61cc2b7b00262b822
BLAKE2b-256 checksum
How to use checksums
311995513f1b7f9dee5046122bd48cfa131e67ef60943b4554a3956806fd9061
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.1rc1-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL socpuppet-0.0.1rc1-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
48662135af88b51408805193890ee2b61ce6985d34093598a3ea4add9115d2ac
BLAKE2b-256 checksum
How to use checksums
3a04705d27d200530fe0ad458e028f25d942b984e3d34846e95bc23281bc07ea
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.1rc1-cp315-cp315-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL socpuppet-0.0.1rc1-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
4447e409eceeb3096fa40ea05de773025d379153ffd6025997d9ba83199cd0c8
BLAKE2b-256 checksum
How to use checksums
beedee328cc84d1b88f8210ac563eab86d940d596534a18e288c4330697f29e7
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.1rc1-cp315-cp315-macosx_13_0_x86_64.whl

Download URL socpuppet-0.0.1rc1-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
f1699bc91b01b09bfb194c9422532097b7dc031517dfd002becd35b6b96f1733
BLAKE2b-256 checksum
How to use checksums
7ed83ce7297ce45491b3460745f1f2495bb29629b193ef56de6b8f88e3caa90a
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.1rc1-cp315-cp315-macosx_13_0_arm64.whl

Download URL socpuppet-0.0.1rc1-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
01f3831127323b4c6dca726b0b392e7c92e60a14aaec588106dce7a501aab537
BLAKE2b-256 checksum
How to use checksums
4e098128b59cd4e04c82282c44066343244da6ba33592425d8daaf89d8ce6d28
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.1rc1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL socpuppet-0.0.1rc1-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
2c9f9b209630a214131ec53196c45c2dc4888bd6bf19109ad0b444771e056771
BLAKE2b-256 checksum
How to use checksums
6d203f564019a0713f2455232f5caa9fca2e5a52647cb8e9fb79f6eb174b37af
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.1rc1-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL socpuppet-0.0.1rc1-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
28660bd3ec877a50bd7d6e5bf79c356126054c48120c45463236a3418aca3f3f
BLAKE2b-256 checksum
How to use checksums
6d38859b580f30c95f1ad26f9b9ad81ba59b99b8b9a779c27b3dd07160502388
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.1rc1-cp314-cp314-macosx_13_0_x86_64.whl

Download URL socpuppet-0.0.1rc1-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
7ca7305b58aecb7b65aa862bf6f8a38c076896cfb49fd5e8c9947f60454b577d
BLAKE2b-256 checksum
How to use checksums
56fde843575ebdd92a096de75d587fb8de1630f3e7b3a4503c269609465306d5
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.1rc1-cp314-cp314-macosx_13_0_arm64.whl

Download URL socpuppet-0.0.1rc1-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
5f441fa808163c139e35b82685c4161bd860bdfb99a0522a386309311ec8a5ce
BLAKE2b-256 checksum
How to use checksums
430e04d63223332ef31bc57eb9763a5c1bd995acd0b8e1e4334d866af5e82bac
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.1rc1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL socpuppet-0.0.1rc1-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
83cd25342292ce38e9f5538347884e66c1d432ed88c28411838c47a47ad2f433
BLAKE2b-256 checksum
How to use checksums
a21bbd9958d3a5e8b84ccdaaeb955a09a9c4f63b20f14aee50a233521cb93ae4
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.1rc1-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL socpuppet-0.0.1rc1-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
4f35c4eac0ebf70c2f329139fb55911dad7a576661d9f9596efed744cb25991a
BLAKE2b-256 checksum
How to use checksums
468e5732582cabf506d2c5ff632ac120e0084457ffa5ddaf6eb05f8b1cbbbc08
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.1rc1-cp313-cp313-macosx_13_0_x86_64.whl

Download URL socpuppet-0.0.1rc1-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
debb6aa43c6c499cf0603293da24e41ac8d801bb7253c8319c3b8a821ceb1f08
BLAKE2b-256 checksum
How to use checksums
1a5d2e60e3db1da804a9ebc00e10ff311cf0c11cc0a13ff8aba1e159624d7aea
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.1rc1-cp313-cp313-macosx_13_0_arm64.whl

Download URL socpuppet-0.0.1rc1-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
6523b08cdbb2215b0b12feac6b0355447e05c28d2cb77393abdc7ea5b9968bc8
BLAKE2b-256 checksum
How to use checksums
6ba8b78f36fd51bfff0bcdbcb439512a4902b698f394d69e0d3d49d1ca063bc8
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.1rc1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL socpuppet-0.0.1rc1-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
7c8520c25fe30ec5b04ec9c6fbd83cb89be569be9cf15b4e2c328d7f64dfbadf
BLAKE2b-256 checksum
How to use checksums
e719c380773688ce619526a9a30ad4f2c4c07f10188eda47552263f7fca10f35
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.1rc1-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL socpuppet-0.0.1rc1-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
aaf6507fbb0951b56aa5dc45b22677f16b7659666900bc4667e76a8b80260f7d
BLAKE2b-256 checksum
How to use checksums
4b3abf08e27acc69d9932d93d8c08a0b4166065746db7654f547787deef6210f
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.1rc1-cp312-cp312-macosx_13_0_x86_64.whl

Download URL socpuppet-0.0.1rc1-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
4a5fd73180f95ee7f2c66c8a393bf95b0e8ab71e388ed94ab48090c5109758cd
BLAKE2b-256 checksum
How to use checksums
1e799ed0f3d24d17d89cca29c4dd58e0f21dfaf84073c3fe8c5a90723df4fea4
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.1rc1-cp312-cp312-macosx_13_0_arm64.whl

Download URL socpuppet-0.0.1rc1-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
c5a033cd47c7251c2ae54670e27f5cc92092b5f8e974cf642f834d296a55fec4
BLAKE2b-256 checksum
How to use checksums
ffe76c62cdcb3253e553c5da3f73e2e89aa0d32477b1649306295bc02b7613f2
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.1rc1

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.

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