Upgrade custom functions to Node.js 24

Upgrade the custom functions of existing mobile extensions to Node.js 24 so that you can deploy them again.

Overview

From October 2026, you can only deploy mobile extensions with custom functions that were built with Node.js 24 or later. If you deploy an extension whose custom function uses an earlier Node.js version, the deployment fails.

Extensions that are already deployed keep working. You only need to upgrade a custom function before you deploy its extension again. Extensions without custom functions are not affected.

Check which Node.js version a custom function uses

Open custom_functions/package.json in the form folder and find the engines field:

"engines": {
  "node": "24"
}
  • If node is 24, the custom function is already upgraded.
  • If node is an earlier version, or the engines field is missing, follow the steps in this guide. A custom function without an engines field is built with Node.js 18.

Before you begin

Make sure you have the following:

  • The Skedulo CLI, installed as described in Install the Skedulo CLI, and logged in to your Skedulo team.

  • The mobile extensions CLI plugin:

    sked plugins install @skedulo/plugin-mex
    
  • Python 3.10 or later on your PATH. The template command uses Copier, which the CLI installs for you. To check your version, run python3 --version, or py --version on Windows. If the version is earlier than 3.10, install a newer one:

    • macOS: run brew install python. The Python that comes with the Xcode command-line tools is version 3.9, which is too old.
    • Windows: install Python from python.org and select Add python.exe to PATH, or run winget install Python.Python.3.12.
    • Linux: install Python 3.10 or later with your distribution’s package manager. Some older releases, such as Ubuntu 20.04, provide an earlier version by default. On these releases, install a newer version from python.org or your distribution’s additional package sources.
  • Node.js 24.

  • Yarn.

Upgrade a custom function

Complete the following steps for each form that has a custom function.

1. Back up your project

Commit your project to source control, or make a copy of the form folder. You use this copy to review the changes and to restore any of your code that is overwritten.

2. Switch to Node.js 24

Check your local Node.js version:

node -v

If the output is not v24.x, install and switch to Node.js 24. For example, with nvm:

nvm install 24
nvm use 24

3. Sync the project with the Node.js 24 template

In the root folder of the form, which contains upload_config.json, run:

sked mex template sync-custom-function

When you are prompted for a project name, press Enter to accept the default.

The command makes the following changes in the custom_functions folder:

  • Sets engines.node to 24.
  • Replaces the build configuration with the Node.js 24 version.
  • Merges package.json rather than replacing it. Template dependencies are upgraded, and dependencies that you added are kept.

If the command asks whether to overwrite a file, answer Yes for build and configuration files, and No for files that contain your own function logic, such as the files in src/functions.

4. Review the changes

Compare the project with your backup, for example with git diff. Restore any of your code that was overwritten, and check that custom_functions/package.json contains:

"engines": {
  "node": "24"
}

5. Install dependencies and build

Go to the custom_functions folder, install the packages, and build the function:

cd custom_functions
yarn
yarn bundle

The project requires Node.js 24, so Yarn reports an error if you use a different version.

If the build fails, the cause is usually code or a dependency that doesn’t support Node.js 24. Upgrade any npm packages that you added to versions that support Node.js 24, and fix any code errors that the build reports.

6. Test the function locally

Start the local development server with your Skedulo API URL and an API token:

SKED_BASE_URL="https://api.skedulo.com" SKED_API_TOKEN="<your-api-token>" yarn dev

Use the API URL for your region. The server uses these values to generate GraphQL types from your team’s schema, and it listens on port 3000 by default. To use a different port, set PORT.

When the server starts, it shows:

App is running

Test your fetch and save functions against the local server before you deploy.

7. Deploy the extension

Deploy the extension as described in Use the Skedulo CLI to upload and manage your Skedulo Plus extension. The custom function is now built with Node.js 24.

Create a new custom function

New custom function projects use Node.js 24 by default. To create one, run the following command in the root folder of the form:

sked mex template sync-custom-function

Enter a project name when prompted. The project is created in a custom_functions folder. Continue from step 5.