This release is a pre-release and may not be stable for production use.
CrowdyPy
The official Python SDK for Crowded Kingdoms: typed clients for the platform's one GraphQL API (identity, studio administration, world data, ck-exec) and a native UDP replication core.
CrowdyPy follows the CrowdyJS API surface
(the same domains, the same two-token model, the same error codes) the way
CrowdyCPP does, with Python names
(mintAppToken is mint_app_token). Its realtime path is CrowdyCPP's native replication
client, bound with nanobind and shipped inside the
wheel. Python never touches a datagram.
v0.6.0: distance-limited channel messages and the terms gate (CrowdyJS 18.5.0, CrowdyCPP 0.58.0).
client.udp.send_ranged_channel_message(..., chunk=, max_distance=)publishes to a channel but reaches only the members whose own actor is withinmax_distancechunks ofchunk, by straight-line distance. Members receive the ordinarychannel_message.client.auth.record_player_consents()andplayer_legal_acceptance(),register'saccept_legalandattest_age_of_majority, andis_legal_acceptance_required_error: a gameplay token now waits for the player's agreement to the legal documents and age attestation.- 0.5.1 made
ChunkStore.hydrate()keep every recorded voxel edit (voxelStates) andensure_around()keep a chunk it already loaded. - 0.5.0 brought the ck-exec gateway check (
client.exec.connect()sends the connect token only to a gateway on the game API's estate, and reports a refusal asDenied) and open grids (game_apps.open_permissions()andset_open_permissions()). - 0.4 brought the headless Crowdy Studio (
crowdypy.studio), player-host observation (crowdypy.player_host), the roots CrowdyCPP covers beyond CrowdyJS, and the strict parity gate (docs/parity-matrix.mdhas no gaps); 0.3.0 the World Stores, the Game Kit, ck-exec and subscriptions; 0.2.0 native UDP replication (client.udp); 0.1.0 the GraphQL client.
See MIGRATION.md.
Install
pip install crowdypy
Wheels: CPython 3.12+ (one abi3 wheel per platform) and free-threaded CPython 3.14, on
Linux x86_64 / aarch64, macOS arm64 / x86_64 and Windows x64. OpenSSL is linked statically;
nothing else native is needed. docs/compatibility.md has the
details, including the tier versions below.
Each tier of the platform has its own release line, and a build defaults to its own tier's
API origin (crowdypy.CROWDY_DEFAULT_TIER says which):
| Tier | PyPI version | Pin |
|---|---|---|
| dev | X.Y.Z.devN |
crowdypy==0.4.0.dev1 |
| test | X.Y.ZrcN |
crowdypy==0.4.0rc1 |
| prod | X.Y.Z |
crowdypy==0.4.0 |
pip skips pre-releases unless a requirement names one, so a prod range never picks up a dev
or test build. The same wheels and the sdist are attached to each
GitHub release, and pip installs one
from its URL (pip install https://github.com/CrowdedKingdoms/CrowdyPy/releases/download/<tag>/<wheel>).
Quick start
import asyncio
import crowdypy
API = "https://ck.dev.crowdedkingdoms.com"
async def main() -> None:
# The identity client: sign-in, account and studio calls, minting.
async with crowdypy.AsyncCrowdyClient(http_url=API) as identity:
await identity.auth.login("player@example.com", "correct-horse-battery")
minted = await identity.portal.mint_app_token("42")
# The game client: one per app, at the app's own datacenter.
async with crowdypy.AsyncCrowdyClient(
http_url=minted.game_api_url or API, discovery_url=minted.discovery_url
) as game:
game.set_app_token(minted)
print(await game.server_status.server_with_least_clients())
asyncio.run(main())
Without an event loop, crowdypy.sync.CrowdyClient has the same methods, without await:
from crowdypy.sync import CrowdyClient
with CrowdyClient(http_url=API) as identity:
identity.auth.login("player@example.com", "correct-horse-battery")
print(identity.users.me())
Two tokens, two clients
There is one API origin but two tokens, as in every Crowded Kingdoms SDK:
- Sign-in (
auth.login, a magic link, or social/OIDC) yields an identity session token: account, studio administration and minting. It is not accepted for gameplay. - Gameplay needs a short-lived app-scoped token per app
(
portal.mint_app_token(app_id)), which is also the HMAC key for native UDP. Refresh it withclient.refresh_gameplay_token()(concurrent callers share one refresh). It is refused withLEGAL_ACCEPTANCE_REQUIREDuntil the player's agreement to the legal documents and age attestation are stored: show both checkboxes, then callauth.record_player_consents(accept_legal=True, attest_age_of_majority=True). - Build one identity client and one client per game. The game client points at the app's
datacenter (
game_api_url) withdiscovery_urlset, so it can find the app again if that instance stops answering.
Persist them the same way: FileTokenStore.session_path(directory, api_origin) names the
session file (one per origin, shared by every game) and FileTokenStore.app_path(directory, app_id) the gameplay one (one per app):
from crowdypy import FileTokenStore
identity = crowdypy.AsyncCrowdyClient(
http_url=API, token_store=FileTokenStore(FileTokenStore.session_path(state_dir, API))
)
CrowdyPy sends no Origin header, so direct sign-in is served to it; hosted browser
sign-in (portal.signIn in CrowdyJS) is a browser flow and is not part of this SDK.
Errors
Every error is a crowdypy.CrowdyError. A GraphQL refusal is a CrowdyGraphQLError with the
server's stable code (error.code == "FORBIDDEN") and extensions; HTTP, network and
timeout failures have their own classes. CrowdyAppUnavailableError (the app's datacenter
is not serving) and CrowdyUserCodeFaultError (a player module faulted;
player_fault_of(error) reads the fault) mirror CrowdyJS. A WRONG_DATACENTER refusal
moves the client to the app's datacenter and retries once, by itself.
Replication
minted = await identity.portal.mint_app_token("42")
async with crowdypy.AsyncCrowdyClient(
http_url=minted.game_api_url or API, discovery_url=minted.discovery_url
) as game:
await game.udp.connect(minted) # assign a server, open the socket
game.udp.subscribe({"actor_update": lambda n: print(n.uuid, n.chunk, n.payload)})
await game.udp.send_actor_update((0, 0, 0), my_uuid, pose_bytes)
echo = await game.udp.send_actor_update_and_wait((0, 0, 0), my_uuid, pose_bytes)
For a game loop, use the connection underneath: send a frame's entities in one call, and read whole batches.
conn = game.udp.connection
conn.send_actor_updates(chunks, uuids, poses, stride=88) # numpy (n, 3) int64, n x 32 octets
async for batch in conn.batches():
actors = batch.types == crowdypy.wire.MessageType.ACTOR_UPDATE_NOTIFICATION
positions = batch.chunks[actors] # a view, not a copy
crowdypy.replication.ReplicationConnection is the same for code without an event loop:
wait() and then poll() from your own loop.
World Stores
from crowdypy.codecs import f32, struct_codec, u16
from crowdypy.stores import create_world_session
pose = struct_codec({"x": f32(), "y": f32(), "z": f32(), "yaw": u16()})
session = create_world_session(game, app_id, actor_codec=pose, host=True, save=True)
session.self.join((0, 0, 0), {"x": 0.0, "y": 64.0, "z": 0.0, "yaw": 0})
session.actors.on_join(lambda actor: print("joined", actor.uuid, actor.value))
asyncio.create_task(session.run()) # tick 60 times a second
snapshot = session.actors.snapshot() # once a frame: every actor at once
states = pose.decode_many(snapshot.state_offsets, snapshot.state_data) # numpy, no loop
Crowdy Studio
from crowdypy.studio import CrowdyStudioController
studio = CrowdyStudioController.for_client(game, app_id=app_id, grid_id=grid_id)
await studio.initialize() # opens the first project
studio.update_file("SERVER", "src/lib.rs", source) # autosaves
result = await studio.test_draft() # build, deploy and switch on the mod
print(result.status, studio.get_state().build_output)
A CLIENT target runs in a host you pass as broker_factory; the browser Studio runs it in a
Web Worker.
Performance
Python does no work per datagram. Receive, HMAC verification and decoding happen on
CrowdyCPP's network thread, which never takes the GIL; Python sees one batch object per
poll. Sends release the GIL, and a batch releases it once for the whole batch. An asyncio
loop is woken through a socket, not by polling. Measured against CrowdyCPP on the same
machine (benchmarks/README.md): a 200-entity batch costs 1.06x
CrowdyCPP's own send path per entity, Python takes in two million verified notifications a
second, a notification reaches an asyncio handler 47 µs after it hits the wire (p50), and a
60 Hz loop stays within 0.2 ms of its schedule while receiving 60,000 a second.
Development
uv sync # builds the extension (CMake, a C++20 compiler) and installs dev tools
uv run pytest tests/unit
uv run ruff check . && uv run ruff format --check . && uv run mypy
The live suites in tests/e2e/ run against a deployment when the CROWDY_E2E_* variables
are set; docs/e2e-coverage.md lists them, how to configure them
and the last live runs.
The gates CI runs, all from a clean checkout:
| Gate | Command |
|---|---|
| Vendored CrowdyCPP is the pinned commit's tree | python scripts/vendor_crowdycpp.py --check |
| schema.gql and operations are CrowdyJS's at the pin | python scripts/schema_sync.py --check |
| Generated code is current | python scripts/codegen.py --check |
| The blocking client is generated from the async one | python scripts/unasync.py --check |
| Parity with CrowdyJS | python tools/parity/parity.py --crowdyjs ../CrowdyJS --check docs/parity-matrix.md |
| No internal names in the tree or the artifacts | python scripts/ci/check_content_policy.py |
AGENTS.md covers maintenance: re-pinning CrowdyJS and CrowdyCPP, the tier branches and the release path.
License
MIT. Wheels also contain CrowdyCPP (MIT), yyjson (MIT) and OpenSSL (Apache-2.0).
Metadata
Release files for crowdypy 0.6.0.dev1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| crowdypy-0.6.0.dev1.tar.gz | 1.1 MB | Details |
Built distributions (wheels)
Total release size: 39.6 MB
Release files / crowdypy-0.6.0.dev1.tar.gz
| Download URL | crowdypy-0.6.0.dev1.tar.gz |
|---|---|
| Size | 1.1 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
642d14d5522458ea7d95d0ac5a375bb2d81d6737937e1af97609e07418901c2d
|
|
BLAKE2b-256 checksum How to use checksums |
b126d69efd0b8fe7901c06a32242837ced71078d8a5c97372afafacb1cab4f26
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.
Transparency logRelease files / crowdypy-0.6.0.dev1-cp314-cp314t-win_amd64.whl
| Download URL | crowdypy-0.6.0.dev1-cp314-cp314t-win_amd64.whl |
|---|---|
| Size | 2.5 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Windows x86-64 |
|
SHA-256 checksum How to use checksums |
96cba7eb9b587108ae3045ae6c70cca7a809439a36ba77ac37607240a272a132
|
|
BLAKE2b-256 checksum How to use checksums |
cec8a9274639e31b196176a9d08067b9b5bf5556b36fd73137bfee007b365f57
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.
Transparency logRelease files / crowdypy-0.6.0.dev1-cp314-cp314t-musllinux_1_2_x86_64.whl
| Download URL | crowdypy-0.6.0.dev1-cp314-cp314t-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 2.8 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
5e8f936476184b2ad1d1c148849f2677904ea4358b1279869d77e08de7c6d315
|
|
BLAKE2b-256 checksum How to use checksums |
6e547f155b83a97f30e5d58abb3d48938f07602cceabd0742dc1b5299b160777
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.
Transparency logRelease files / crowdypy-0.6.0.dev1-cp314-cp314t-musllinux_1_2_aarch64.whl
| Download URL | crowdypy-0.6.0.dev1-cp314-cp314t-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 3.1 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ ARM64 |
|
SHA-256 checksum How to use checksums |
9d8a3534754840f559312255e9f077e7fcd9e41e78a555995fc449057e0cdd9b
|
|
BLAKE2b-256 checksum How to use checksums |
563b6611f6cd346164053b63f0f87ccd4fec1c98e7e4b311b8c581110541dd71
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.
Transparency logRelease files / crowdypy-0.6.0.dev1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | crowdypy-0.6.0.dev1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 2.7 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
ae4bc209ba67b6e51a8eefa8b6344c0781fc07a89f9fa30ae1b10b9ebf08c681
|
|
BLAKE2b-256 checksum How to use checksums |
3e62785f106546413aa28883876e9d1a176ebda38cb2f0d6f512ff44666a441a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.
Transparency logRelease files / crowdypy-0.6.0.dev1-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
| Download URL | crowdypy-0.6.0.dev1-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 3.0 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
c5dc543ced6a34751f5f02ce43836e35e981930eb5a51182012f9d35a7b68390
|
|
BLAKE2b-256 checksum How to use checksums |
c3059dda9681591a38737278906e0f30eb721af28b73a2879a72db488de48d84
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.
Transparency logRelease files / crowdypy-0.6.0.dev1-cp314-cp314t-macosx_11_0_x86_64.whl
| Download URL | crowdypy-0.6.0.dev1-cp314-cp314t-macosx_11_0_x86_64.whl |
|---|---|
| Size | 2.4 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading macOS 11.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
86515ae23ddeb7b38f4c6c6ab2fda60ca1e700643a2580dcd24d27164be48458
|
|
BLAKE2b-256 checksum How to use checksums |
dba5f8c39dcb908bb9afdbe578bad10fde033e963603754507db195eeb46b601
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.
Transparency logRelease files / crowdypy-0.6.0.dev1-cp314-cp314t-macosx_11_0_arm64.whl
| Download URL | crowdypy-0.6.0.dev1-cp314-cp314t-macosx_11_0_arm64.whl |
|---|---|
| Size | 2.7 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
84d691d32e1b75b77f88791865a0b881bbbc88a6cd9cb92591a48254fc1cef71
|
|
BLAKE2b-256 checksum How to use checksums |
23af232ef855eca5dda8432b8a6df46dba93f0c00752520beae3ba9f80510be2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.
Transparency logRelease files / crowdypy-0.6.0.dev1-cp312-abi3-win_amd64.whl
| Download URL | crowdypy-0.6.0.dev1-cp312-abi3-win_amd64.whl |
|---|---|
| Size | 2.4 MB |
| Tags | CPython 3.12 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
950423c55aed91f96dc52cdc71b48095a9bca9e00ff0fa806973e486994d6cd5
|
|
BLAKE2b-256 checksum How to use checksums |
7c6cb29307f726aee0cd91b64377056091b020801d7c56817a72a14237a17efd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.
Transparency logRelease files / crowdypy-0.6.0.dev1-cp312-abi3-musllinux_1_2_x86_64.whl
| Download URL | crowdypy-0.6.0.dev1-cp312-abi3-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 2.8 MB |
| Tags | CPython 3.12 Linux musl 1.2+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
363a3f3cdb565fda0afa7e445a45827c47bc332f703fd7ae0d6cd827237abc0a
|
|
BLAKE2b-256 checksum How to use checksums |
66cf1a4ccfe42191930a0e90a8c09695fc8d410fe2638d9b6368b8b64d66097f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.
Transparency logRelease files / crowdypy-0.6.0.dev1-cp312-abi3-musllinux_1_2_aarch64.whl
| Download URL | crowdypy-0.6.0.dev1-cp312-abi3-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 3.1 MB |
| Tags | CPython 3.12 Linux musl 1.2+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
3ab897d44b67eb3d63e74d8c34979c7fe4bfa51497746b37aeb22cda6c0c9641
|
|
BLAKE2b-256 checksum How to use checksums |
07482e607328a7c700e182d3eb2b221e8545e3d1624197d36ee66dfb78bd50cd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.
Transparency logRelease files / crowdypy-0.6.0.dev1-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | crowdypy-0.6.0.dev1-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 2.7 MB |
| Tags | CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
60877772f900c78ed033fc81d732ecbfb08682d26d29eea5908010cd632ebbae
|
|
BLAKE2b-256 checksum How to use checksums |
cb84e38e060a254ad5655814ef3bdf8e739025097216698f75a5ad4e897a20dc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.
Transparency logRelease files / crowdypy-0.6.0.dev1-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
| Download URL | crowdypy-0.6.0.dev1-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 3.0 MB |
| Tags | CPython 3.12 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
6a118f7f92b9ce42304eb9dcf3027c56ca762149995bc033028cb063faf46987
|
|
BLAKE2b-256 checksum How to use checksums |
7292ad3326376535c73b27e2330d6307f4d795e56f9695351ce7e571736427d7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.
Transparency logRelease files / crowdypy-0.6.0.dev1-cp312-abi3-macosx_11_0_x86_64.whl
| Download URL | crowdypy-0.6.0.dev1-cp312-abi3-macosx_11_0_x86_64.whl |
|---|---|
| Size | 2.4 MB |
| Tags | CPython 3.12 abi3 macOS 11.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
0908f84a88cf810835c8108e24ed70d47c8b97e73b3207b8a3090121eee37c03
|
|
BLAKE2b-256 checksum How to use checksums |
81e2f9de4a2a63fd8deedd6db57e8c7411ae5be0ce07219f1acf837621d90cd6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.
Transparency logRelease files / crowdypy-0.6.0.dev1-cp312-abi3-macosx_11_0_arm64.whl
| Download URL | crowdypy-0.6.0.dev1-cp312-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 2.7 MB |
| Tags | CPython 3.12 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
cd0442626a8cb4b3d8c9847395730c9828a150a7ab793482a264f2500266be90
|
|
BLAKE2b-256 checksum How to use checksums |
edd82fd7c664ec164506946f35fc5cf0cbf1bc83579e4c0fc3a52442b1c7231a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.
Transparency log