Shopify Functions support any language that compiles to WebAssembly (Wasm), such as Rust, AssemblyScript, or TinyGo. Functions that are compiled to Wasm need to meet our [WebAssembly API specifications (including WASI)](/docs/apps/build/functions/programming-languages/webassembly-for-functions), and our [platform binary and performance limitations](/docs/apps/build/functions#limitations-and-considerations).

This guide introduces the language support and tooling that's available in Shopify Functions.

## Functions environment

Shopify Functions operates in critical buyer flows such as Checkout. For a given Checkout request there may be multiple functions executed, each one adding to the overall latency of the checkout request. For this reason, Shopify places a number of [platform limits](/docs/apps/build/functions#limitations-and-considerations), many of which can be measured locally using [Shopify CLI](/docs/apps/build/functions/test-debug-functions#execute-the-function-locally-using-shopify-cli).

## Choosing a language

Languages that compile directly to WebAssembly, such as Rust, perform better than dynamic languages, such as JavaScript. If your function targets a public app, expects to operate on a large number of line items, or is computationally complex, then choose Rust to stay within the Shopify Functions [instruction count requirements](/docs/apps/build/functions#limitations-and-considerations).

For prototyping ideas, JavaScript is a good starting point if you're familiar with the language. However, expect to run into instruction limits sooner than if you wrote the equivalent function logic in a language that compiles to WebAssembly directly, such as Rust.

## Available language support

<div class="resource-card-grid">
  <div>
  <a class="resource-card" href="/docs/apps/build/functions/programming-languages/rust-for-functions" data-theme-mode="">
    <div class="resource-card__indicator-container"><img
     src="/assets/resource-cards/rust"
     data-alt-src="/assets/resource-cards/rust-dark"
     aria-hidden="true"
     class="resource-card__icon themed-image"></div>
    <h3 class="resource-card__title">
      Rust
    </h3>
    <p class="resource-card__description">Learn about the support for Rust in Shopify Functions.</p>
  </a>
</div></p>

<p><div>
  <a class="resource-card" href="/docs/apps/build/functions/programming-languages/javascript-for-functions" data-theme-mode="">
    <div class="resource-card__indicator-container"><img
     src="/assets/resource-cards/javascript"
     data-alt-src="/assets/resource-cards/javascript-dark"
     aria-hidden="true"
     class="resource-card__icon themed-image"></div>
    <h3 class="resource-card__title">
      JavaScript
    </h3>
    <p class="resource-card__description">Learn about the support for JavaScript and TypeScript in Shopify Functions.</p>
  </a>
</div></p>

<p><div>
  <a class="resource-card" href="/docs/apps/build/functions/programming-languages/webassembly-for-functions" data-theme-mode="">
    <div class="resource-card__indicator-container"><img
     src="/assets/resource-cards/webassembly"
     data-alt-src="/assets/resource-cards/webassembly-dark"
     aria-hidden="true"
     class="resource-card__icon themed-image"></div>
    <h3 class="resource-card__title">
      WebAssembly
    </h3>
    <p class="resource-card__description">Learn about the using other languages that support WebAssembly in Shopify Functions.</p>
  </a>
</div>
</div>


## Next steps

- Learn about how data is [input to and output from Shopify Functions](/docs/apps/build/functions/input-output).
- Explore [the references for each Function API](/docs/api/functions).
- Get familiar with [testing and debugging practices](/docs/apps/build/functions/test-debug-functions) that pertain to Shopify Functions.