Python - Wasmtime

## Keyboard shortcuts

Press `←` or `→` to navigate between chapters

Press `S` or `/` to search in the book

Press `?` to show this help

Press `Esc` to hide this help

# Using WebAssembly from Python

Wasmtime is available on PyPI and can be used programmatically or as a python module loader, which allows almost any WebAssembly module to be used as a python module. This guide will go over adding Wasmtime to your project, and some provided examples of what can be done with WebAssembly modules.

Make sure you've got Python 3.5 or newer installed locally, and we can get started!

## Getting started and simple example

First, copy this example WebAssembly text module into your project with the filename `gcd.wat`. It exports a function for calculating the greatest common denominator of two numbers.

    (module
      (func $gcd (param i32 i32) (result i32)
        (local i32)
        block  ;; label = @1
          block  ;; label = @2
            local.get 0
            br_if 0 (;@2;)
            local.get 1
            local.set 2
            br 1 (;@1;)
          end
          loop  ;; label = @2
            local.get 1
            local.get 0
            local.tee 2
            i32.rem_u
            local.set 0
            local.get 2
            local.set 1
            local.get 0
            br_if 0 (;@2;)
          end
        end
        local.get 2
      )
      (export "gcd" (func $gcd))
    )

Next, install the Wasmtime package from PyPi. It can be installed as a dependency through Pip or related tools such as Pipenv.

    pip install wasmtime

Or

    pipenv install wasmtime

After you have Wasmtime installed and you've imported `wasmtime`, you can import WebAssembly modules in your project like any other python module.

    import wasmtime.loader
    import gcd

    print("gcd(27, 6) =", gcd.gcd(27, 6))

This script should output

    gcd(27, 6) = 3

If this is the output you see, congrats! You've successfully ran your first WebAssembly code in python!

You can also alternatively use the `wasmtime` package's API:

    from wasmtime import Store, Module, Instance

    store = Store()
    module = Module.from_file(store.engine, 'gcd.wat')
    instance = Instance(store, module, [])
    gcd = instance.exports(store)['gcd']
    print("gcd(27, 6) = %d" % gcd(store, 27, 6))

## More examples and contributing

The `wasmtime` Python package currently lives in its own repository outside of `wasmtime` and has a number of other more advanced examples as well. Feel free to browse those, but if you find anything missing don't hesitate to open an issue and let us know if you have any questions!