You can write your functions in any language that can compile to WebAssembly (Wasm), such as Rust, Zig, or TinyGo. This guide describes how to generate Wasm that conforms to Shopify Functions standards. ## Requirements Functions that are compiled to Wasm need to meet the following requirements: - Conform with the command module structure referenced in the [unstable WASI application ABI specification](https://github.com/WebAssembly/WASI/blob/60cff3164f66d15092248a5adfa901a4caa7fea8/legacy/application-abi.md#current-unstable-abi). - For each [target](/docs/apps/build/app-extensions/configure-app-extensions#targets) implemented by the extension, the module must export a function of type `(func)`, which takes no arguments, and has no return values. - Function modules are multi-call executables that have exports mapped to Shopify extension targets in the [function extension configuration](/docs/api/functions/configuration#properties). > Note: > For API versions 2023-07 and earlier without configured extension targets, Shopify Functions invokes the WASI `_start` export instead. - Write output as a JSON encoded byte stream to a standard output file descriptor: `STDOUT (fd=1)` - Read input as a JSON encoded byte stream from a standard input file descriptor: `STDIN (fd=0)` - Write debug logs as a newline delimited `utf-8` file to a standard error file descriptor: `STDERR (fd=2)` ## Module example The following sample in [WebAssembly text format (WAT)](https://developer.mozilla.org/en-US/docs/WebAssembly/Understanding_the_text_format) shows the expected signature for module exports, and its associated extension configuration: <p> <div class="react-stacked-code-block ThemeMode-dim" data-preset="stacked"> <p> <div class="react-code-block" data-preset="file"> <div class="react-code-block-preload ThemeMode-dim"> <div class="react-code-block-preload-bar "></div> <div class="react-code-block-preload-placeholder-container"> <div class="react-code-block-preload-code-container"> <div class="react-code-block-preload-codeline-number"></div> <div class="react-code-block-preload-codeline"></div> </div> <div class="react-code-block-preload-code-container"> <div class="react-code-block-preload-codeline-number"></div> <div class="react-code-block-preload-codeline"></div> </div> <div class="react-code-block-preload-code-container"> <div class="react-code-block-preload-codeline-number"></div> <div class="react-code-block-preload-codeline"></div> </div> <div class="react-code-block-preload-code-container"> <div class="react-code-block-preload-codeline-number"></div> <div class="react-code-block-preload-codeline"></div> </div> <div class="react-code-block-preload-code-container"> <div class="react-code-block-preload-codeline-number"></div> <div class="react-code-block-preload-codeline"></div> </div> <div class="react-code-block-preload-code-container"> <div class="react-code-block-preload-codeline-number"></div> <div class="react-code-block-preload-codeline"></div> </div> <div class="react-code-block-preload-code-container"> <div class="react-code-block-preload-codeline-number"></div> <div class="react-code-block-preload-codeline"></div> </div> <div class="react-code-block-preload-code-container"> <div class="react-code-block-preload-codeline-number"></div> <div class="react-code-block-preload-codeline"></div> </div> </div> </div> <script data-option="filename" data-value="function.wat"></script> <script data-option="nocopy" data-value="true"></script> <script type="text/plain" data-language="wat"> (module (func $_start (export "_start") ... ) (func $run (export "run") ... ) ) </script> </div> </p> <p> <div class="react-code-block" data-preset="file"> <div class="react-code-block-preload ThemeMode-dim"> <div class="react-code-block-preload-bar "></div> <div class="react-code-block-preload-placeholder-container"> <div class="react-code-block-preload-code-container"> <div class="react-code-block-preload-codeline-number"></div> <div class="react-code-block-preload-codeline"></div> </div> <div class="react-code-block-preload-code-container"> <div class="react-code-block-preload-codeline-number"></div> <div class="react-code-block-preload-codeline"></div> </div> <div class="react-code-block-preload-code-container"> <div class="react-code-block-preload-codeline-number"></div> <div class="react-code-block-preload-codeline"></div> </div> <div class="react-code-block-preload-code-container"> <div class="react-code-block-preload-codeline-number"></div> <div class="react-code-block-preload-codeline"></div> </div> </div> </div> <script data-option="filename" data-value="shopify.extension.toml"></script> <script data-option="nocopy" data-value="true"></script> <script type="text/plain" data-language="toml"> [[extensions.targeting]] target = "purchase.product-discount.run" input_query = "src/run.graphql" export = "run" # This matches the name of the wasm export. </script> </div> </p> </div> </p>