README.md
November 26, 2025 · View on GitHub
zeroperl is an experimental build of Perl5 in a sandboxed, self-contained WebAssembly module.
Read the full blog here
Build
Requires Docker or Apple Container (macOS).
Docker:
docker build -t zeroperl .
mkdir -p output
docker run --rm -v $(pwd)/output:/output zeroperl cp -r /artifacts/. /output/
Apple Container (macOS):
container build -t zeroperl .
mkdir -p output
container run --rm -v $(pwd)/output:/output zeroperl cp -r /artifacts/. /output/
Output in ./output/:
zeroperl.wasm— reactor with asyncifyzeroperl_reactor.wasm— reactor without asyncifyperl-wasi-prefix/— Perl library prefixexiftool.min.pl— minified ExifTool (if enabled)
Build args
Docker:
docker build --build-arg PERL_VERSION=5.42.0 --build-arg BUILD_EXIFTOOL=false -t zeroperl .
Apple Container:
container build --build-arg PERL_VERSION=5.42.0 --build-arg BUILD_EXIFTOOL=false -t zeroperl .
Available build arguments
| Arg | Default | |
|---|---|---|
PERL_VERSION | 5.42.0 | Perl source version |
EXIFTOOL_VERSION | 13.42 | ExifTool version |
BUILD_EXIFTOOL | true | Include ExifTool |
STACK_SIZE | 8388608 | WASM stack (bytes) |
INITIAL_MEMORY | 33554432 | WASM initial memory (bytes) |
ASYNCIFY | true | Enable asyncify |
TRIM | true | Strip unused modules |
Iterating on stubs/zeroperl.c
Build from final stage to reuse cached wasi-perl:
Docker:
docker build --target final -t zeroperl .
Apple Container:
container build --target final -t zeroperl .
Testing
The easiest way to test a new build of zeroperl.wasm is to clone the TypeScript wrapper and run its test suite:
git clone https://github.com/6over3/zeroperl-ts
See the zeroperl-ts README for details.
Usage
Note: The first argument passed to Perl must be
zeroperl. Depending on your runtime, you may need to map/dev/nullas a preopen.