Skip to main content

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

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

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.1
File Size Uploaded Provenance Actions
socpuppet-0.0.1.tar.gz 1.3 MB Without provenance Details for socpuppet-0.0.1.tar.gz

Built distributions (wheels)

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

Total release size: 53.7 MB

Release files / socpuppet-0.0.1.tar.gz

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

Download URL socpuppet-0.0.1-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
29d3b5dfe92f4fe910eb6a3be47c0a670030e9472396f3db94c5d7d719b118be
BLAKE2b-256 checksum
How to use checksums
0854bce59b4d41b40c4d802754a6b6eaa6a1ae08c7c32d8a793928712554508c
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.1-cp315-cp315-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL socpuppet-0.0.1-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
0e711ff2d73858e82e392ecaffcc18a84781ff5f821052366b1e5c840facd2c3
BLAKE2b-256 checksum
How to use checksums
7312074f2bdb16368574d4d830901e800e83da2f9bcf82adaef7b3362cd15ab8
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.1-cp315-cp315-macosx_13_0_x86_64.whl

Download URL socpuppet-0.0.1-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
63686e6f4db74caa99e5a2371ad26e3ff70743e2693c112eff56b3cb444c70c1
BLAKE2b-256 checksum
How to use checksums
41e0170dc313e5b58642f097800675cfe304f8ef39ed5e7feef10361b25fc7f9
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.1-cp315-cp315-macosx_13_0_arm64.whl

Download URL socpuppet-0.0.1-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
b5db181059bf44f6c379843ac8b4225fc0db3bdee3735174f328c901441acdd0
BLAKE2b-256 checksum
How to use checksums
223015df58b34d4831e1d1434c0dc0982c4302c117a02f1dd533bb08aa5dbed0
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.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL socpuppet-0.0.1-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
f3999e19f1f1b6f230228e0375721cf2ae9757a2af7d5b1fff6ef031f6a025f7
BLAKE2b-256 checksum
How to use checksums
7943dd8d735b3c62e18a641bb0e8009c566f5fddf37bba46807b5f4597c9c713
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.1-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL socpuppet-0.0.1-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
672aa2513189aa95e14b5808105cf08c1cfca1e510524d170ff105e63704305f
BLAKE2b-256 checksum
How to use checksums
188d36e5382e21e074b97d37360da49faf427444d3d243b6adb6c7d17dbd7cda
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.1-cp314-cp314-macosx_13_0_x86_64.whl

Download URL socpuppet-0.0.1-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
8731b2980879f6998b9efa0ea44e5e1eab8d8f7697d15bd6b127fe32da9d63bd
BLAKE2b-256 checksum
How to use checksums
10fac6ae691c94ffa097f12b946fa59ff7a664044d5b68cd7326e3021db5be08
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.1-cp314-cp314-macosx_13_0_arm64.whl

Download URL socpuppet-0.0.1-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
a80b7ff763d0167bd6b2cfdb0e83d53d0fd696b9114757848fc9395ecaf054ff
BLAKE2b-256 checksum
How to use checksums
33c0279d7ed4cb51b6b77fdaac0016cd080d23afe2576f8aa2b1cea2719d72bd
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.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL socpuppet-0.0.1-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
0db8090ac741af1d42ca70515ed825bd8bf7abe964549d84dd1cdab1acacab21
BLAKE2b-256 checksum
How to use checksums
d65940a77c3f1e3ef929d7b189686cc1b449d05331fb7684db5a0ba44e415a6d
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.1-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL socpuppet-0.0.1-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
11fca8a14097223a2c2f8ec2d13c2f6f4c261396ef5f1399241c623f06bd5662
BLAKE2b-256 checksum
How to use checksums
34fc76020c5f9020cb5805a501f8426cbf0465aa225db0cd64146cb3631de0c4
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.1-cp313-cp313-macosx_13_0_x86_64.whl

Download URL socpuppet-0.0.1-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
66b9e143d847276229a7d849d6965621517d8aa5fb9159067b267b8b046b65b3
BLAKE2b-256 checksum
How to use checksums
5a40153bb73a6748fd6de7df4f1b7cdcedf09839473ae4e184983f5096b60108
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.1-cp313-cp313-macosx_13_0_arm64.whl

Download URL socpuppet-0.0.1-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
9a8214e2756085648542c6e7f1efe07b803444da744bc7a55a89aa27d2c9775e
BLAKE2b-256 checksum
How to use checksums
d0d0cdf35a96842f90c3a75a93ec918b333fd5534703a68f273d7bded9625682
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.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

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

Download URL socpuppet-0.0.1-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
630916409798ced6911c264177e6cb7a1d616fb35974a25935a0ffafb88937b2
BLAKE2b-256 checksum
How to use checksums
bc3689f2eac3ec3b04d8dc527726248f9c01867decc382bebd533ad0b76839e5
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.1-cp312-cp312-macosx_13_0_x86_64.whl

Download URL socpuppet-0.0.1-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
3e087fad77d268aad281c46a2a4cbb5bd7d8f8f8d9aa134f57679c0356ce2bbc
BLAKE2b-256 checksum
How to use checksums
f7129961396b780631eb7bd1c2bf87dda4e8322a9c79864a832b805bd19a827d
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.1-cp312-cp312-macosx_13_0_arm64.whl

Download URL socpuppet-0.0.1-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
68b56acd849d795f54f7b1e28020aad4e81d01b17ae8c43de3c6fcf8ebf9d1bd
BLAKE2b-256 checksum
How to use checksums
bf3843a3cde0c8d5ba36308051695bbacf4796c089eda31a2d4e0156ca044a09
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.1

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