---
title: Language considerations
description: Learn about the language support available in Shopify Functions.
source_url:
  html: 'https://shopify.dev/docs/apps/build/functions/programming-languages'
  md: 'https://shopify.dev/docs/apps/build/functions/programming-languages.md'
api_type: functions
---

# Language considerations

Shopify Functions support any language that compiles to WebAssembly (Wasm), such as Rust, Zig, or TinyGo. Functions that are compiled to Wasm need to meet our [WebAssembly API specifications](https://shopify.dev/docs/apps/build/functions/programming-languages/webassembly-for-functions), and our [platform binary and performance limitations](https://shopify.dev/docs/api/functions/latest#other-limitations).

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](https://shopify.dev/docs/api/functions/latest#other-limitations), many of which can be measured locally using [Shopify CLI](https://shopify.dev/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](https://shopify.dev/docs/api/functions/latest#other-limitations).

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.

To measure and reduce instruction counts, refer to [Optimize instruction counts](https://shopify.dev/docs/apps/build/functions/optimize-instruction-counts).

***

## Available language support

[Rust\
\
](https://shopify.dev/docs/apps/build/functions/programming-languages/rust-for-functions)

[Learn about the support for Rust in Shopify Functions.](https://shopify.dev/docs/apps/build/functions/programming-languages/rust-for-functions)

[JavaScript\
\
](https://shopify.dev/docs/apps/build/functions/programming-languages/javascript-for-functions)

[Learn about the support for JavaScript and TypeScript in Shopify Functions.](https://shopify.dev/docs/apps/build/functions/programming-languages/javascript-for-functions)

[WebAssembly\
\
](https://shopify.dev/docs/apps/build/functions/programming-languages/webassembly-for-functions)

[Learn about the using other languages that support WebAssembly in Shopify Functions.](https://shopify.dev/docs/apps/build/functions/programming-languages/webassembly-for-functions)

***

## Next steps

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

***
