| title | Azure Functions warmup trigger |
|---|---|
| description | Understand how to use the warmup trigger in Azure Functions. |
| keywords | azure functions, functions, event processing, warmup, cold start, premium, dynamic compute, serverless architecture |
| ms.service | azure-functions |
| ms.topic | reference |
| ms.custom | devx-track-csharp, devx-track-extended-java, devx-track-js, devx-track-python, devx-track-ts |
| ms.date | 02/10/2026 |
| zone_pivot_groups | programming-languages-set-functions |
This article explains how to work with the warmup trigger in Azure Functions. A warmup trigger is invoked when an instance is added to scale a running function app. The warmup trigger lets you define a function that runs when a new instance of your function app is started. You can use a warmup trigger to preload custom dependencies so your functions are ready to start processing requests immediately. Some actions for a warmup trigger might include opening connections, loading dependencies, or running any other custom logic before your app begins receiving traffic.
The following considerations apply when using a warmup trigger:
- There can be only one warmup trigger function per function app, and it can't be invoked after the instance is already running.
- The name of the function that is the warmup trigger for your app should be
warmup(case-insensitive). - The warmup trigger isn't available to apps running on the Consumption plan.
- The warmup trigger isn't supported on version 1.x of the Functions runtime.
- Support for the warmup trigger is provided by default in all development environments. You don't have to manually install the package or register the extension.
- The warmup trigger is only called during scale-out operations, not during restarts or other nonscaling startups. Make sure your logic can load all required dependencies without relying on the warmup trigger. Lazy loading is a good pattern to achieve this goal.
- Dependencies created by warmup trigger should be shared with other functions in your app. To learn more, see Static clients.
- If the built-in authentication (also known as Easy Auth) is used, HTTPS Only should be enabled for the warmup trigger to get invoked.
::: zone pivot="programming-language-csharp"
You must install this NuGet package when your C# class library function app runs in the isolated worker process. When your C# app runs in-process with the host, you don't need to install an extra package.
[!INCLUDE functions-in-process-model-retirement-note]
::: zone-end
::: zone pivot="programming-language-csharp"
[!INCLUDE functions-bindings-csharp-intro-with-csx]
[!INCLUDE functions-in-process-model-retirement-note]
The following example shows a C# function that runs on each new instance when added to your app.
:::code language="csharp" source="~/azure-functions-dotnet-worker/samples/Extensions/Warmup/Warmup.cs" range="4-18":::
The following example shows a C# function that runs on each new instance when added to your app.
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
namespace WarmupSample
{
//Declare shared dependencies here
public static class Warmup
{
[FunctionName("Warmup")]
public static void Run([WarmupTrigger()] WarmupContext context,
ILogger log)
{
//Initialize shared dependencies here
log.LogInformation("Function App instance is warm.");
}
}
}::: zone-end ::: zone pivot="programming-language-java"
The following example shows a warmup trigger that runs when each new instance is added to your app.
@FunctionName("Warmup")
public void warmup( @WarmupTrigger Object warmupContext, ExecutionContext context) {
context.getLogger().info("Function App instance is warm.");
}::: zone-end
::: zone pivot="programming-language-javascript"
The following example shows a JavaScript function with a warmup trigger that runs on each new instance when added to your app:
:::code language="javascript" source="~/azure-functions-nodejs-v4/js/src/functions/warmupTrigger.js" :::
The following example shows a warmup trigger in a function.json file and a JavaScript function that runs on each new instance when added to your app.
Here's the function.json file:
{
"bindings": [
{
"type": "warmupTrigger",
"direction": "in",
"name": "warmupContext"
}
]
}The configuration section explains these properties.
Here's the JavaScript code:
module.exports = async function (warmupContext, context) {
context.log('Function App instance is warm.');
};::: zone-end ::: zone pivot="programming-language-typescript"
The following example shows a TypeScript function with a warmup trigger that runs on each new instance when added to your app:
:::code language="typescript" source="~/azure-functions-nodejs-v4/ts/src/functions/warmupTrigger1.ts" :::
TypeScript samples aren't documented for model v3.
::: zone-end
::: zone pivot="programming-language-powershell"
Here's the function.json file:
{
"bindings": [
{
"type": "warmupTrigger",
"direction": "in",
"name": "warmupContext"
}
]
}PowerShell example code pending.
::: zone-end
::: zone pivot="programming-language-python"
The following example shows a warmup trigger in a function.json file and a Python function that runs on each new instance when it'is added to your app.
Your function must be named warmup (case-insensitive) and there can only be one warmup function per app.
import logging
import azure.functions as func
app = func.FunctionApp()
@app.warm_up_trigger('warmup')
def warmup(warmup) -> None:
logging.info('Function App instance is warm')For more information, see Configuration.
Here's the function.json file:
{
"bindings": [
{
"type": "warmupTrigger",
"direction": "in",
"name": "warmupContext"
}
]
}For more information, see Configuration.
Here's the Python code:
import logging
import azure.functions as func
def main(warmupContext: func.Context) -> None:
logging.info('Function App instance is warm.')::: zone-end
::: zone pivot="programming-language-csharp"
Both in-process and isolated worker process C# libraries use the WarmupTrigger attribute to define the function. C# script instead uses a function.json configuration file.
Use the WarmupTrigger attribute to define the function. This attribute has no parameters.
Use the WarmupTrigger attribute to define the function. This attribute has no parameters.
::: zone-end
::: zone pivot="programming-language-java"
Warmup triggers don't require annotations. Just use a name of warmup (case-insensitive) for the FunctionName annotation.
::: zone-end
::: zone pivot="programming-language-javascript,programming-language-typescript"
- Your function-trigger must be named
warmupTrigger(case-insensitive). - There are no properties that need to be set on the
optionsobject passed to theapp.warmup()method.
The following table explains the binding configuration properties that you set in the function.json file.
| function.json property | Description |
|---|---|
| type | Required - must be set to warmupTrigger. |
| direction | Required - must be set to in. |
| name | Required - the variable name used in function code. A name of warmupContext is recommended for the binding parameter. |
::: zone-end ::: zone pivot="programming-language-powershell,programming-language-python"
The following table explains the binding configuration properties that you set in the function.json file.
| function.json property | Description |
|---|---|
| type | Required - must be set to warmupTrigger. |
| direction | Required - must be set to in. |
| name | Required - the variable name used in function code. A name of warmupContext is recommended for the binding parameter. |
::: zone-end
See the Example section for complete examples.
::: zone pivot="programming-language-csharp"
The following considerations apply to using a warmup function in C#:
- Your function must be named
warmup(case-insensitive) using theFunctionattribute. - A return value attribute isn't required.
- Use the
Microsoft.Azure.Functions.Worker.Extensions.Warmuppackage - You can pass an object instance to the function.
- Your function must be named
warmup(case-insensitive) using theFunctionNameattribute. - A return value attribute isn't required.
- You must be using version
3.0.5of theMicrosoft.Azure.WebJobs.Extensionspackage, or a later version. - You can pass a
WarmupContextinstance to the function.
::: zone-end
::: zone pivot="programming-language-java"
Your function must be named warmup (case-insensitive) using the FunctionName annotation.
::: zone-end
::: zone pivot="programming-language-javascript,programming-language-typescript"
See the list of considerations at the top of the page for general usage advice.
The function type in function.json must be set to warmupTrigger.
::: zone-end
::: zone pivot="programming-language-powershell,programming-language-python"
The function type in function.json must be set to warmupTrigger.
::: zone-end