Skip to content

Language support

Asavari Tayal edited this page Mar 13, 2019 · 11 revisions

Please see https://docs.microsoft.com/en-us/azure/azure-functions/supported-languages for the official documentation on this topic.

This article explains the level of language support in the two versions of the Functions Runtime.

Functions Runtime v1 (GA)

v1 is the official runtime that should be used for all production applications.

The fully supported languages are C#, JavaScript and F#.

There are also a number of languages that are experimental. The following applies for all of those:

  • Their purpose is only to get a taste of what using them with Azure Functions might be like in the future.
  • There is no official support, so support cases should not be opened when they are used.
  • Please do not use them for anything that you rely on! They are only there for experimenting.

Here is more detail about some of them:

PHP

The experimental PHP support works by launching an instance of the process on every function invocation. This works fine when there is a low volume of calls, but it does not scale at all under load.

It also has very poor support for Functions bindings, and does not allow accessing the http request object.

PowerShell

The experimental support uses PowerShell 5.1 (it was 4.0 until 12/2017). This could change in the future, and may come with some breaking changes.

For production use, you should consider Azure Automation instead, which has full support for running PowerShell scripts in Azure.

Functions Runtime v2 (GA)

The v2 runtime Preview was announced here, and adds cross platform support. This is where most of the investments are happening going forward. It currently supports Python, C#, JavaScript and Java.

What about the experimental languages that are in v1?

We have chosen not to bring those forward to v2 in the form that they're currently in. The main reason for this is that we want to take the time to support them correctly.

As for PHP and PowerShell, we don't yet have clear plans for supporting them in v2, but this could happen at a later time.

Generally, we will not release any language support in v2 if it doesn't have an architecture that allows it to scale and to support advanced triggers. But do note that v1 will continue to be supported going forward, so if you want the experimental support that it has, feel free to continue using v1 (but be aware of all the caveats mentioned above).