Interact with WebAssembly registries.
Project description
wasm-action
Wasm-action facilitates the creation, distribution and generic utilization of non-browser based WebAssembly workloads through a local-first approach with a focus on privacy and security. Written primarily in Python, it also explores the Python ecosystem's maturity for WebAssembly and beyond.
Features
- Versatile use as GitHub action, CLI or Python library.
- Supported registries: wa.dev
- Supported artifact types: wasm
- Supported actions: push, pull
- Supports Python 3.10+ on Linux, MacOS and Windows
- Python sandbox for running untrusted code
Planned
- OCI registry support (a.k.a. Docker registry)
Usage
Pull from registry
- uses: xelato/wasm-action@main
with:
action: pull
registry: wa.dev
package: component-book:adder
To pull a private package, define your token:
env:
WARG_TOKEN: ${{ secrets.WARG_TOKEN }}
Inputs
| Name | Description | Required | Example |
|---|---|---|---|
| action | Pull from registry | yes | pull |
| registry | Registry domain name | yes | wa.dev |
| package | Package specification | yes | namespace:name@version namespace:name namespace/name namespace/name@version |
| path | Target path to save the download | no | file.wasm |
Outputs
| Name | Description | Example |
|---|---|---|
| registry | Registry domain name | wa.dev |
| registry-type | Detected registry type | warg |
| package | Package | foo:bar@1.2.3 |
| package-namespace | Package namespace | foo |
| package-name | Package name | bar |
| package-version | Package version | 1.2.3 |
| filename | Download location | foo-bar_1.2.3.wasm |
| digest | File hash | sha256:2afffac0... |
Push to registry
- uses: xelato/wasm-action@main
with:
action: push
registry: wa.dev
package: foo:bar@1.2.3
path: files/foo_bar_1.2.3.wasm
env:
WARG_TOKEN: ${{ secrets.WARG_TOKEN }}
WARG_PRIVATE_KEY: ${{ secrets.WARG_PRIVATE_KEY }}
CLI
The tool can be run without installing, using uv/uvx.
$ uvx wasm-action --help
Usage: wasm-action [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
eval Expression evaluator
key Generate private key or read one from stdin
pull Pull from registry
push Push to registry
python Python in a sandbox
version Print version
x Run a WebAssembly file
Pull from registry
$ uvx wasm-action pull --registry wa.dev --package wasi:io
registry=wa.dev
registry-type=warg
warg-url=https://warg.wa.dev
package=wasi:io@0.2.0
package-namespace=wasi
package-name=io
package-version=0.2.0
digest=sha256:c33b1dbf050f64229ff4decbf9a3d3420e0643a86f5f0cea29f81054820020a6
filename=wasi:io@0.2.0.wasm
$ file wasi:io@0.2.0.wasm
wasi:io@0.2.0.wasm: WebAssembly (wasm) binary module version 0x1000d
Push to registry
$ export WARG_TOKEN="..."
$ export WARG_PRIVATE_KEY="..."
$ uvx wasm-action push -r wa.dev -p foo:bar@1.2.3 --path foo_bar_1.2.3.wasm
Key generation
New token registration and push to wa.dev require generation and configuration of a private/public key pair which can be facilitated with:
$ uvx wasm-action key
{
"private": "ecdsa-p256:9y5nigLvFp3KZZQtuvN9DchpGIMUB4bwGAtkIoOCla4=",
"public": "ecdsa-p256:AvspSQWBK65ItTou/uVCi5qC4P+HBCi4R34OIPb3ILRl",
"id": "sha256:c836bd8a3082f2e8d70bdfa48296e580ab847fcdeadb351f448d03f152d44093"
}
# use private key to configure in github or save it elsewhere in a secure manner
$ uvx wasm-action key | jq .private | pbcopy
# use corresponding public key for new token registration at wa.dev
$ pbpaste | uvx wasm-action key | jq .public
Use as Library
The package is published to the Python Package Index and can be installed/depended-on under the name wasm-action on all supported Python versions.
$ pip install wasm-action
>>> import wasm_action as wa
>>> wa.pull('wa.dev', 'wasi:io')
PackageDownload(namespace='wasi', name='io', version='0.2.0', content='...', digest='sha256:c33b1dbf050f64229ff4decbf9a3d3420e0643a86f5f0cea29f81054820020a6')
However, the library interface is not yet standardised and may (and will!) change.
Python Sandbox
Experimental support for running a WASI build of python/cpython@3.14.
$ uvx --python 3.14 wasm-action python --version
Python 3.14.2+
The characters -- can be used to separate host from guest options in cases where there's ambiguity:
# get guest interpreter help
$ uvx --python 3.14 wasm-action python -- --help
Host Python
The Python interpreter used to run wasm-action. It orchestrates and mediates the guest Python execution under a supported WebAssembly Runtime (wasmtime).
Guest Python
The Python interpreter that was compiled to WebAssembly. Guest Python runs in a restricted "sandbox" environment. In addition to the .wasm module file, it also requires the Python standard library folder, currently being reused from the host Python installation.
Interpreter
Currently there is a choice between --interpreter cpython (default) and --interpreter monty.
Layout
Guest code has access to the following paths:
- / - host's current working directory (read/write)
- /usr/local/lib/python3.14 - host Python's stdlib (read only)
- /tmp (read/write)
Environment variables
Code running in the guest environment only has access to the environment variables explicitly defined:
>>> import os
>>> os.environ
environ({'PYTHONPATH': '/usr/local/lib/python3.14:/build'})
Additional variables can be defined with the -e/--env option.
Packages
Limitations
Application
Running untrusted code, such as one generated by an LLM.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file wasm_action-0.0.13.tar.gz.
File metadata
- Download URL: wasm_action-0.0.13.tar.gz
- Upload date:
- Size: 50.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
888923e2af5a22267253bcdd73a59e857c0301bea2ff8b575e646f52bfe2aa53
|
|
| MD5 |
1b46be82d2057b76ff6261c09fafd639
|
|
| BLAKE2b-256 |
b783a4d6ac4ac9e238a007c3fb877a76b76f9ad9b98e62cdf8cb8c6e03c9f469
|
Provenance
The following attestation bundles were made for wasm_action-0.0.13.tar.gz:
Publisher:
release.yml on xelato/wasm-action
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
wasm_action-0.0.13.tar.gz -
Subject digest:
888923e2af5a22267253bcdd73a59e857c0301bea2ff8b575e646f52bfe2aa53 - Sigstore transparency entry: 1328125838
- Sigstore integration time:
-
Permalink:
xelato/wasm-action@4ea026a04698f62965b426104fb32ff4adfeeb75 -
Branch / Tag:
refs/tags/v0.0.13 - Owner: https://github.com/xelato
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4ea026a04698f62965b426104fb32ff4adfeeb75 -
Trigger Event:
release
-
Statement type:
File details
Details for the file wasm_action-0.0.13-py3-none-any.whl.
File metadata
- Download URL: wasm_action-0.0.13-py3-none-any.whl
- Upload date:
- Size: 114.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
72320f8cbf8b64f3d9b1077a6361bca1a9eaa16c119f2c26315cabfb1a4d0a64
|
|
| MD5 |
cbc988ed84db666e10aaa6750f68e405
|
|
| BLAKE2b-256 |
16cdf40b8386fc1fdfec9a17438a50786869edc519997553dcc3faaa581ffe9a
|
Provenance
The following attestation bundles were made for wasm_action-0.0.13-py3-none-any.whl:
Publisher:
release.yml on xelato/wasm-action
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
wasm_action-0.0.13-py3-none-any.whl -
Subject digest:
72320f8cbf8b64f3d9b1077a6361bca1a9eaa16c119f2c26315cabfb1a4d0a64 - Sigstore transparency entry: 1328125844
- Sigstore integration time:
-
Permalink:
xelato/wasm-action@4ea026a04698f62965b426104fb32ff4adfeeb75 -
Branch / Tag:
refs/tags/v0.0.13 - Owner: https://github.com/xelato
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4ea026a04698f62965b426104fb32ff4adfeeb75 -
Trigger Event:
release
-
Statement type: