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; 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.1rc2

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.1rc2
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)

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

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.

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