PxSteamDL
A small C++20 library and CLI that replaces steamcmd +login anonymous +workshop_download_item 294100 <id>.
It logs in to Steam anonymously and downloads RimWorld Workshop items in parallel.
Notice: This project is made for PyXiion/PxModRim.
Disclaimer: PxSteamDL is not affiliated with or endorsed by Valve. It only downloads content that Steam serves to anonymous accounts.
It talks to Steam directly:
- a CM WebSocket session for anonymous logon, the depot key and manifest request codes;
- the public Web API for item details and CDN servers;
- SteamPipe CDN over HTTPS for manifests and chunks.
The protocol follows DepotDownloader / SteamKit2 (-app 294100 -pubfile <id>).
Why not an existing library
| Project | Language | Notes |
|---|---|---|
| DepotDownloader / SteamKit2 | C# | Does this exact job (-pubfile), but needs the .NET runtime |
| ValvePython/steam, node-steam-user | Python / JS | Full clients, wrong runtime |
| steamdepot, steam-vent | Rust | Depot downloaders, not C++ |
| SteamPP | C++ | Unmaintained SteamKit port with chat/logon only; no depot/CDN support, legacy TCP |
None of them is a maintained C++ library, so this project implements the needed subset.
Build
Requirements: CMake ≥ 3.24 and a C++20 compiler (GCC, Clang/Apple Clang or MSVC). Linux, macOS and Windows are supported.
Everything else is fetched by CPM at configure time, pinned and hash-checked,
and linked statically: curl (HTTP/1.1, WebSockets), mbedTLS 3.6, zlib, zstd, liblzma and nlohmann_json. No system
libraries beyond the C/C++ runtime are used. Set CPM_SOURCE_CACHE to reuse the downloads between build directories.
TLS trusts only the Mozilla CA bundle published by curl (cacert-<date>.pem, pinned in CMakeLists.txt),
which is compiled into the library; the operating system's certificate store is not consulted.
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
cmake --build build
To build and run the unit tests, add -DPXSTEAMDL_BUILD_TESTS=ON and run ctest --test-dir build; see
CONTRIBUTING.md, which also describes the code style.
CLI
pxsteamdl [-o DIR] [-j PARALLEL_ITEMS] [-t THREADS_PER_ITEM] [--] ITEM_ID...
pxsteamdl --version prints the version and -h/--help the usage (exit code 0); -- ends the options.
Each item goes into DIR/<ITEM_ID>/, which matches steamcmd's steamapps/workshop/content/294100/<ITEM_ID>.
The exit code is 1 if any item fails.
Ctrl-C stops the batch: requests in flight finish, unfinished items are reported as cancelled, and the exit code is 130.
A second Ctrl-C quits immediately.
Standalone prebuilt binaries for Linux x86_64, macOS arm64, and Windows x64 are attached to GitHub Releases.
Library
#include <pxsteamdl/pxsteamdl.hpp>
pxsteamdl::Client client; // anonymous logon; throws pxsteamdl::Error on failure
std::vector<std::uint64_t> ids{2009463077, 818773962};
pxsteamdl::Options options;
options.on_resolved = [](const pxsteamdl::ItemInfo& i) { /* title known, no bytes yet; called on this thread */ };
options.on_progress = [](const pxsteamdl::Progress& p) { /* called from worker threads */ };
for (const auto& r : client.download(ids, "mods", options))
if (!r.ok()) std::fprintf(stderr, "%llu: %s\n", (unsigned long long)r.item_id, r.error.c_str());
download() returns one Result per entry of ids, in order. A repeated ID is downloaded once (on_resolved is called
once for it) and every occurrence gets the same Result. Result::path is root/<id> for every item, failed ones
included; after a failure it holds the previous copy, if there was one.
Errors. Result::error is a message for people; its wording may change. To decide what to do, use
Result::error_kind (ItemInfo has it too, and Error::kind() for the exception of Client's constructor):
ErrorKind |
Meaning |
|---|---|
kNone |
success |
kCancelled |
stopped through Options::stop (the message is exactly cancelled; cancelled() tests for it) |
kNotFound |
Steam does not have the item |
kRejected |
Steam or a CDN refused: private item, access denied, HTTP 4xx |
kNetwork |
network or service failure that survived the automatic retries; trying again later may work |
kData |
Steam sent data that cannot be used (malformed, checksum mismatch, unsafe path) |
kFilesystem |
a local file or directory could not be written |
kOther |
anything else |
Downloaded and unpacked bytes. Progress and Result count both: downloaded_* is what came over the network
(chunks as the CDN serves them, encrypted and compressed), unpacked_* is what was decrypted, decompressed and written
(the size on disk). Use the first for a transfer rate and the second for a progress bar. They cover only what had to be
fetched in this run: an item that is already up to date reports zeros.
Connection settings. pxsteamdl::Client(ClientOptions{...}) takes a proxy (not set: libcurl's environment
variables; empty: no proxy), a connect_timeout and a stall_timeout. A Client can be moved.
Callbacks that throw. An exception from on_progress (worker threads) fails the item it was called for
(error_kind kOther) and the others go on; one from on_resolved propagates out of download() after the items
under way have been stopped. In Python, exceptions from either are reported through sys.unraisablehook and the
download goes on. download() throws std::invalid_argument if parallel_items or threads_per_item is 0.
To cancel, pass a std::stop_token in Options::stop. Once stop is requested, in-flight chunk requests finish,
the remaining work is skipped and every unfinished item reports Result::error == "cancelled"; items that already
completed stay successful and download() returns normally. As with failures, temporary files are removed and the
existing files of unfinished items are not replaced.
std::stop_source stop;
options.stop = stop.get_token();
// from another thread: stop.request_stop();
pxsteamdl::Version() returns the version of the library, and PXSTEAMDL_VERSION_MAJOR, _MINOR, _PATCH and
_STRING (from <pxsteamdl/version.hpp>, included by the main header) that of the headers; in Python it is
pxsteamdl.__version__.
Link against the PxSteamDL::pxsteamdl CMake target, after add_subdirectory or CPMAddPackage, or against an
installed copy:
cmake --install build --prefix /some/prefix
find_package(PxSteamDL 1.0 CONFIG REQUIRED) # with -DCMAKE_PREFIX_PATH=/some/prefix
target_link_libraries(app PRIVATE PxSteamDL::pxsteamdl)
The installed library is a single static archive that already contains curl, mbedTLS, zlib, liblzma and zstd, so
nothing but the system libraries is needed to link it. (Before 1.0, a new minor version may change the API, so
find_package accepts only a version with the same minor number.) The install also contains the CLI (bin/pxsteamdl).
Single-configuration generators only.
The CLI executable is built as build/pxsteamdl.
Python
Prebuilt wheels (CPython 3.10–3.14 on Linux x86_64 (manylinux_2_28), macOS arm64 (11.0+) and Windows x64) are attached
to the GitHub Releases; install one with
pip install <wheel URL or file>. Alternatively, build from source (needs CMake and a C++20 compiler):
pip install git+https://github.com/PyXiion/PxSteamDL # or, from a checkout: pip install .
import pxsteamdl
client = pxsteamdl.Client() # anonymous logon; raises pxsteamdl.Error (a RuntimeError) on failure
def on_progress(p: pxsteamdl.Progress) -> None: # called from worker threads
print(f"{p.item_id} {p.title}: {p.unpacked_bytes}/{p.unpacked_total}")
def on_resolved(i: pxsteamdl.ItemInfo) -> None: # once per item, before its bytes; same thread as download()
print(f"queued {i.item_id}: {i.title}" if not i.error else f"{i.item_id}: {i.error}")
for r in client.download([2009463077, 818773962], "mods", on_progress=on_progress, on_resolved=on_resolved):
print(r.item_id, r.title, r.path if r.ok else f"{r.error_kind.name}: {r.error}")
The same names exist in Python: Result.error_kind is a pxsteamdl.ErrorKind (NONE, CANCELLED, NOT_FOUND,
REJECTED, NETWORK, DATA, FILESYSTEM, OTHER), Result.cancelled and Result.ok are properties, and
Client(proxy=None, connect_timeout=10, stall_timeout=30) takes the connection settings (proxy="" means no proxy).
pxsteamdl.Error (a RuntimeError with a kind attribute) is what Client() raises when the logon fails.
Result, ItemInfo and Progress can be constructed with keyword arguments, e.g. to test code that takes them.
download releases the GIL, and one Client may be used from several threads.
Overlapping downloads into the same item directory wait for each other; the wait can be cancelled.
An exception raised by on_progress or on_resolved is reported like an exception in a thread (sys.unraisablehook) and does not stop the download.
The package ships type stubs.
download also takes cancel=pxsteamdl.CancelToken(); calling token.cancel() from another thread stops it the same way as Options::stop in C++.
asyncio
AsyncClient runs logon and downloads in worker threads, so the event loop keeps running. AsyncClient.create() takes the
arguments of Client; AsyncClient(client) wraps a Client you already have. Several downloads may run concurrently on one client.
on_progress and on_resolved are called on the event loop thread.
Cancelling the task (including via asyncio.wait_for timeouts) stops the download, waits until in-flight requests finish and temporary files are removed, then raises CancelledError.
import asyncio
import pxsteamdl
async def main() -> None:
client = await pxsteamdl.AsyncClient.create()
harmony, rest = await asyncio.gather(
client.download([2009463077], "mods"),
client.download([818773962], "mods", on_progress=lambda p: print(p.item_id, p.unpacked_bytes)),
)
try:
await asyncio.wait_for(client.download([2016436324], "mods"), timeout=60)
except asyncio.TimeoutError: # TimeoutError on Python 3.11+
print("gave up; run again to resume")
asyncio.run(main())
Examples
Complete programs that use the whole API are in examples/: download.cpp (C++; built with
-DPXSTEAMDL_BUILD_EXAMPLES=ON), download.py (synchronous Python) and download_async.py (asyncio). Each takes a
directory and item IDs.
Behaviour
- Updates are incremental: a file whose size and SHA-1 already match the manifest is not downloaded again. Files and directories that are not in the manifest are deleted, as steamcmd does.
- Files are assembled under a temporary name and renamed into place after the SHA-1 check, so an interrupted run never leaves a truncated file under its real name.
- Each item is built in a temporary sibling directory. All files and symlinks are prepared before the old directory is moved aside and the new one installed; an installation error restores the old directory. Unchanged files are reused by hard link, or copied locally if hard links are unavailable. Changing their executable permissions uses a separate copy so a failed update does not change the previous files.
- Downloads coordinate through
DIR/.<ITEM_ID>.lockcontaining the owner's PID and an exclusive kernel lock (flockon Linux/macOS,LockFileExon Windows). The lock covers planning through installation and cleanup, across clients and processes. An occupied destination is waited for, interruptibly. On Linux/macOS, normal release removes the file while still holding the lock; waiters verify the inode and reopen the path if it changed. Windows keeps the file. Process exit releases the kernel lock automatically; after a crash, a later owner can reuse a leftover file regardless of its recorded PID. Cleanup is best-effort if unlinking fails. Do not delete lock files manually while downloads are running. When upgrading from persistent-lock versions (including 0.3.0), stop all older downloads first: old clients do not revalidate inodes and cannot safely share a destination with new ones. - Cancellation is checked before installation. Once directory replacement starts it finishes or rolls back; there is a brief interval between the two renames when the item directory is absent. Other downloads are locked out, but readers that do not take the lock can observe that interval. This is rollback for ordinary errors, not crash recovery: a killed process or power loss during installation can leave the old copy in the temporary sibling.
- Every chunk is checked (Adler-32 and size) after it is decrypted and decompressed.
- Manifest paths are untrusted: absolute paths and
..components are rejected. On Windows, names Windows cannot represent faithfully (containing:or other reserved characters, device names such asCON, trailing dots or spaces) fail the item. - Symlinks from the manifest are recreated as symlinks. Windows allows creating them only with Developer Mode enabled or with administrator rights; otherwise an item that contains symlinks fails with an error saying so.
- Transient failures (HTTP 429 and 5xx, network errors, Steam answering busy, timed out or rate limited) are retried up to four times with growing pauses (about 0.5 s, 1 s, 2 s); a CDN download also pauses before it tries the next host. Permanent failures (404, a rejected depot key, a corrupt chunk) are not retried, and a stop request ends a pause at once.
- Item details are looked up in batches of 100 while earlier items download: each item is queued as soon as its batch is answered. A failed details request fails only the items of its batch.
- A failed item is reported in
Result::errorand does not stop the other items in the batch. Steam's result codes are spelled out, e.g.Steam rejected the item: not found (EResult 9).
License
PxSteamDL is licensed under the GNU Lesser General Public License v3.0 or later (LGPL-3.0-or-later).
See COPYING.LESSER and COPYING.
Metadata
Release files for pxsteamdl 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| pxsteamdl-0.4.0.tar.gz | 123.0 kB | With provenance | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| pxsteamdl-0.4.0-cp312-abi3-win_amd64.whl | CPython 3.12 | abi3 | Windows x86-64 | Details |
| pxsteamdl-0.4.0-cp312-abi3-manylinux_2_28_x86_64.whl | CPython 3.12 | abi3 | Linux glibc 2.28+ x86-64 | Details |
| pxsteamdl-0.4.0-cp312-abi3-macosx_11_0_arm64.whl | CPython 3.12 | abi3 | macOS 11.0+ ARM64 | Details |
| pxsteamdl-0.4.0-cp311-cp311-win_amd64.whl | CPython 3.11 | CPython 3.11 | Windows x86-64 | Details |
| pxsteamdl-0.4.0-cp311-cp311-manylinux_2_28_x86_64.whl | CPython 3.11 | CPython 3.11 | Linux glibc 2.28+ x86-64 | Details |
| pxsteamdl-0.4.0-cp311-cp311-macosx_11_0_arm64.whl | CPython 3.11 | CPython 3.11 | macOS 11.0+ ARM64 | Details |
| pxsteamdl-0.4.0-cp310-cp310-win_amd64.whl | CPython 3.10 | CPython 3.10 | Windows x86-64 | Details |
| pxsteamdl-0.4.0-cp310-cp310-manylinux_2_28_x86_64.whl | CPython 3.10 | CPython 3.10 | Linux glibc 2.28+ x86-64 | Details |
| pxsteamdl-0.4.0-cp310-cp310-macosx_11_0_arm64.whl | CPython 3.10 | CPython 3.10 | macOS 11.0+ ARM64 | Details |
Total release size: 10.6 MB
Release files / pxsteamdl-0.4.0.tar.gz
| Download URL | pxsteamdl-0.4.0.tar.gz |
|---|---|
| Size | 123.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0fa0430ccc0479d517a5157d4372f50ccc458ef6212b1b8d3e5bcadfe7583180
|
|
BLAKE2b-256 checksum How to use checksums |
a8c96ccab10843266c16d5647dc6a3314f80efedd6dc22f993816920d84e77b9
|
| 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 18, 2026.
Transparency logRelease files / pxsteamdl-0.4.0-cp312-abi3-win_amd64.whl
| Download URL | pxsteamdl-0.4.0-cp312-abi3-win_amd64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.12 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
36cf90523fe446fb1202a21f9f3ca19d77d1f6633936915eebbc723801dbbc72
|
|
BLAKE2b-256 checksum How to use checksums |
e716c131bdf64e142f42df2490f092abee11f58f4f07f4bdcc632459ac0b7be7
|
| 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 18, 2026.
Transparency logRelease files / pxsteamdl-0.4.0-cp312-abi3-manylinux_2_28_x86_64.whl
| Download URL | pxsteamdl-0.4.0-cp312-abi3-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.12 Linux glibc 2.28+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
631336f3ea2d7177e479c9141da05da96f328dd9e2e2c1e2ec1bd6c4d01b8b27
|
|
BLAKE2b-256 checksum How to use checksums |
73dfab4bb76b62add12c1030fb41ec23895d1f552a8b22100f8dd9a0a8ad7aa5
|
| 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 18, 2026.
Transparency logRelease files / pxsteamdl-0.4.0-cp312-abi3-macosx_11_0_arm64.whl
| Download URL | pxsteamdl-0.4.0-cp312-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 985.7 kB |
| Tags | CPython 3.12 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
b2c45ad4a5755dcf90127f4a9ad855d08fd06fb6481ed56d88ebfb6658bd254b
|
|
BLAKE2b-256 checksum How to use checksums |
447d9dc2ef725240d2368047cc0b77c8eb10a5f378a0c00657bde23623dac2c2
|
| 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 18, 2026.
Transparency logRelease files / pxsteamdl-0.4.0-cp311-cp311-win_amd64.whl
| Download URL | pxsteamdl-0.4.0-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
1828ca246def658a5a6af489d95e81167e6d0c887ba9f65f04cb4410fa548532
|
|
BLAKE2b-256 checksum How to use checksums |
9846d4dc2031be92363b81b76391200c536d7c2cdace20c74bd6d3df2591db0c
|
| 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 18, 2026.
Transparency logRelease files / pxsteamdl-0.4.0-cp311-cp311-manylinux_2_28_x86_64.whl
| Download URL | pxsteamdl-0.4.0-cp311-cp311-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.11 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
5b2004a591aee2b7ba040ef0a688edcc855444d52913573ae76b68e64c0d4898
|
|
BLAKE2b-256 checksum How to use checksums |
ea83418a3379010b1dba6290b8495900c5c720f2b61a6e8afad127645693d91f
|
| 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 18, 2026.
Transparency logRelease files / pxsteamdl-0.4.0-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | pxsteamdl-0.4.0-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 986.7 kB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
f2618523ff5135a6d3bf324888e7a5af209287c2616cb61ed53782ce8644371d
|
|
BLAKE2b-256 checksum How to use checksums |
35713075a803bb578730cec11e88afd1483098f506beb47f5978bef8b46e49fc
|
| 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 18, 2026.
Transparency logRelease files / pxsteamdl-0.4.0-cp310-cp310-win_amd64.whl
| Download URL | pxsteamdl-0.4.0-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
3d939810956346099e3e77e4e1817c86dbe0f9debddf9e33d0e0a44749087fae
|
|
BLAKE2b-256 checksum How to use checksums |
5ebf443eeabb897e8b5f39a57db1c66b1f76444d9bbb0b532d71a84bd251a8a9
|
| 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 18, 2026.
Transparency logRelease files / pxsteamdl-0.4.0-cp310-cp310-manylinux_2_28_x86_64.whl
| Download URL | pxsteamdl-0.4.0-cp310-cp310-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.10 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
01c76c11d5ca55f14028e68fa2311ee012f9ddd5a23ae1e4790eddfa072d79db
|
|
BLAKE2b-256 checksum How to use checksums |
942ce9cafeeaf5dfa1c10cf687a398f9d45c29d722ed78c3a1931f1ec91452f5
|
| 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 18, 2026.
Transparency logRelease files / pxsteamdl-0.4.0-cp310-cp310-macosx_11_0_arm64.whl
| Download URL | pxsteamdl-0.4.0-cp310-cp310-macosx_11_0_arm64.whl |
|---|---|
| Size | 986.7 kB |
| Tags | CPython 3.10 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
b1cc8ec126394933f95c8b0713ed1243837e9ad1ce3c91b8dc91bbcc3e0f1885
|
|
BLAKE2b-256 checksum How to use checksums |
c820b7473e5f19fe81d75ddbdb746c8c7b319cbeda733fb41a97b5b9c900787c
|
| 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 18, 2026.
Transparency logSecurity for pxsteamdl 0.4.0
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.
Full provenance
All 10 files in this release have been uploaded with provenance metadata.
Attestation for pxsteamdl-0.4.0.tar.gz
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 18, 2026.
Transparency logA 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.