# Tools ## Catalyst Maven Tools -------------------------------------------------------------------------------- title: "Introduction" description: "Catalyst Maven Tools are a set of features that include Catalyst Maven archetypes to create Basic I/O and Advanced I/O serverless functions, Catalyst Java SDK as a Maven dependency, and a Catalyst Maven plugin to execute various commands on your function directly from your IDE." last_updated: "2026-03-18T07:41:08.665Z" source: "https://docs.catalyst.zoho.com/en/tools/maven-tools/introduction/" service: "Serverless" -------------------------------------------------------------------------------- # Catalyst Maven Tools ### Introduction Catalyst offers Java application developers the flexibility and convenience of working in their preferred IDE throughout the entire lifecycle of application development. This includes the stages right from the initialization of a Java Serverless function to building its code, testing, and deploying it to the Catalyst remote project. This support is provided in the form of several features for the {{%link href="https://maven.apache.org/"%}}Apache Maven{{%/link%}} build automation tool, widely used for Java projects. Maven follows a Project Object Model (POM) and can handle project management including build and dependency management, project maintenance, test-driven deployment, and provides a host of plugins that assist in Java programming. <br> Catalyst offers the following Maven tools for Java application development: * {{%bold%}}Catalyst Maven Archetypes:{{%/bold%}} Catalyst provides two Maven archetypes to create serverless {{%link href="/en/serverless/help/functions/basic-io/"%}}Basic I/O{{%/link%}} and {{%link href="/en/serverless/help/functions/advanced-io/"%}}Advanced I/O{{%/link%}} functions respectively within a Java IDE directly, without having to {{%link href="/en/cli/v1/initialize-resources/introduction/"%}}initialize{{%/link%}} them in the CLI. * {{%bold%}}Catalyst Java SDK as a Maven Dependency:{{%/bold%}} The {{%link href="/en/sdk/java/v1/overview/"%}}Java SDK{{%/link%}} package provided by Catalyst can be included as a dependency in a Maven configuration file, and need not be downloaded or installed manually. * {{%bold%}}Catalyst Maven Plugins:{{%/bold%}} Catalyst also offers a plugin in the Maven framework that allow you to package, {{%link href="/en/cli/v1/serve-resources/introduction/"%}}serve{{%/link%}}, and {{%link href="/en/cli/v1/deploy-resources/introduction/"%}}deploy{{%/link%}} a Java function with the archetypes from your IDE, instead of the CLI. <br> You can avail the Catalyst Maven tools in any of Java IDEs that you work with, such as Eclipse, IntelliJ IDEA, NetBeans, or Visual Studio Code. You can find the details of the Java development environments that include Maven integration from their {{%link href="https://maven.apache.org/ide.html"%}}official documentation{{%/link%}}. Catalyst's Maven support facilitates easy Java application development with reduced workload and enhanced functionality. You can save efforts from manually handling Java dependencies or the versioning of the SDK package. This support ensures you perform all your operations including setting up your application's environment, code, test, deploy, and manage within a single interface without having to switch to the CLI for basic actions. {{%note%}}{{%bold%}}Note:{{%/bold%}} The Maven archetypes, dependency, and plugin that Catalyst provides do not include all Catalyst operations that you can execute from a local environment. You can utilize {{%link href="/en/cli/v1/cli-command-reference/"%}}Catalyst CLI{{%/link%}} for the other operations in parallel with the Maven tools.{{%/note%}} <br> ### Prerequisites To work with the Catalyst Maven tools, you will need to ensure that Maven is installed in your Java IDE. * {{%bold%}}Eclipse{{%/bold%}}: {{%link href="https://www.eclipse.org/m2e/"%}}Eclipse{{%/link%}} runs an embedded version of Maven and provides built-in support for Maven. M2Eclipse provides a tight integration with Maven with a host of built-in features. You can install it as a new software or search for Maven in the Eclipse Marketplace. * {{%bold%}}IntelliJ IDEA{{%/bold%}}: {{%link href="https://www.jetbrains.com/help/idea/maven-support.html"%}}IntelliJ IDEA{{%/link%}} offers a fully-functional integration with Maven that allows you to create a Maven project directly or add Maven support to an existing project. * {{%bold%}}NetBeans{{%/bold%}}: {{%link href="https://bits.netbeans.org/mavenutilities/nbm-maven-plugin/"%}}Apache NetBean{{%/link%}}s has a built-in support for Maven, and provides several utilities to build and populate NetBeans artefacts using Maven. * {{%bold%}}Visual Studio Code{{%/bold%}}: {{%link href="https://code.visualstudio.com/docs/java/java-build"%}}VS Code{{%/link%}} provides a fully-integrated Maven extension that allows you to perform Maven operations after you install it. <br> {{%note%}}{{%bold%}}Note:{{%/bold%}} If you are using VS Code, you will need to configure the executable path for Maven if you are installing it for the first time. This can be configured in VS Code settings as shown below.{{%/note%}} <br> <br /> -------------------------------------------------------------------------------- title: "Catalyst Maven Archetypes" description: "Catalyst provides pre-defined Maven archetypes to create Serverless functions of the types Basic I/O and Advanced I/O in your IDE directly, listed from the Maven Central Repository." last_updated: "2026-03-18T07:41:08.665Z" source: "https://docs.catalyst.zoho.com/en/tools/maven-tools/maven-archetypes/" service: "Serverless" -------------------------------------------------------------------------------- # Maven Archetypes ### Introduction A {{%link href="https://maven.apache.org/guides/introduction/introduction-to-archetypes.html"%}}Maven archetype{{%/link%}} is a toolkit that defines a Maven project's template. Maven archetypes provide Java developers the means to generate parameterized versions of the project's template in a standardized manner. Catalyst provides pre-defined Maven archetypes to create {{%link href="/en/serverless/"%}}Serverless{{%/link%}} functions of the types {{%link href="/en/serverless/help/functions/basic-io/"%}}Basic I/O{{%/link%}} and {{%link href="/en/serverless/help/functions/advanced-io/"%}}Advanced I/O{{%/link%}}. These archetypes will be listed from the {{%link href="https://mvnrepository.com/repos/central"%}}Maven Central Repository{{%/link%}}. With these archetypes, you can simply provide input values containing the function details, and they will create and initialize the function in the {{%link href="/en/cli/v1/project-directory-structure/introduction/"%}}standard structure{{%/link%}} and include the required dependencies in the Maven project's directory. You can add multiple functions this way in individual POM directories. You must remember the following points about creating functions with the Maven archetypes: * When you {{%link href="/en/cli/v1/initialize-resources/introduction/"%}}initialize a function{{%/link%}} from the CLI, you will be required to initialize the project first or {{%link href="/en/cli/v1/working-with-functions/add-functions/"%}}add the function{{%/link%}} in an existing Catalyst project directory. In the case of Maven, you will not be able to initialize a project separately. You can directly create the function. * The function you create with an archetype will be created in the destination folder you select, as explained in the next section. * You can associate a function you create with the archetype with an existing project from your remote account by configuring its {{%link href="/en/getting-started/set-up-a-catalyst-project/general-settings/"%}}Project ID{{%/link%}} in the {{%link href="/en/tools/maven-tools/pom-xml/"%}}{{%badge%}}pom.xml{{%/badge%}}{{%/link%}} Maven configuration file which is discussed in a later section. You will also need to add the {{%link href="/en/getting-started/catalyst-organizations/"%}}Org ID{{%/link%}} of your Catalyst organization in this file. * You will not be able to create functions of any other type besides Basic I/O and Advanced I/O, or of any other stack, or the client component through the Maven tools. You will need to utilize the CLI to initialize these resources in your local environment. <br> ### Create a Basic I/O or an Advanced I/O Function with the Archetypes In this help document, we cover the steps of working with the Catalyst Maven tools using the example of VS Code IDE. Some details may vary based on the IDE you use. You can create a Basic I/O or an Advanced I/O function in the following way: 1. Create a new Maven project in your IDE. Depending on the IDE you use, the steps might vary. You can also convert an existing project to Maven, based on your IDE. For VS Code, click the **+** icon under Maven to create a new Maven project. <br /> 2. Type in "com.zoho.catalyst" in the archetype search bar. Select one of the following based on the type of function you want to create: * {{%badge%}}catalyst-archetype-basicio{{%/badge%}}: To create a Basic I/O function * {{%badge%}}catalyst-archetype-advancedio{{%/badge%}}: To create an Advanced I/O function with Catalyst SDK * {{%badge%}}catalyst-archetype-advancedio-basic{{%/badge%}}: To create an Advanced I/O function without Catalyst SDK <br /> {{%note%}}{{%bold%}}Note:{{%/bold%}} If the Catalyst archetypes are not listed in the results or if you want to fetch the latest archetype definitions, you might need to update the Maven archetype catalog in your IDE to access the latest published archetypes. Depending on your IDE you can look up the steps to update the catalog and perform the required actions. In VS Code, open the command palette and select {{%italics%}}Maven: Update Maven Archetype Catalog{{%/italics%}}.{{%/note%}} 3. Select the version of the archetype you choose. It is recommended to select the latest version. <br /> 4. Enter a {{%link href="https://maven.apache.org/guides/mini/guide-naming-conventions.html"%}}group ID{{%/link%}} for the project. This ID uniquely identifies your Maven project. You can press **Enter** to fill it with the default value. <br /> 5. Enter an {{%link href="https://maven.apache.org/guides/mini/guide-naming-conventions.html"%}}artifact ID{{%/link%}} for the project. This is the name of the JAR without version. You can press **Enter** to fill it with the default value. <br /> 6. Select a destination folder to save your Maven project. 7. You will be prompted for some inputs in the terminal. Press **Enter** after each input. You can also directly press **Enter** without an input to submit the default value. * Version of the output JAR file's {{%link href="https://maven.apache.org/guides/getting-started/index.html#what-is-a-snapshot-version"%}}{{%badge%}}SNAPSHOT{{%/badge%}}{{%/link%}} * Maven Package name * The {{%badge%}}appName{{%/badge%}} or the Catalyst reference name of the Java function * Main class name of the function * The {{%link href="/en/getting-started/set-up-a-catalyst-project/general-settings/"%}}project ID{{%/link%}} of the project this function will be associated with * The {{%link href="/en/getting-started/catalyst-organizations/"%}}org ID{{%/link%}} of your Catalyst organization that the project belongs to <br /> {{%note%}}{{%bold%}}Note:{{%/bold%}} The project ID and org ID values will be stored in the {{%link href="/en/tools/maven-tools/pom-xml/"%}}{{%badge%}}pom.xml{{%/badge%}}{{%/link%}} configuration file. You can choose to configure these directly in {{%badge%}}pom.xml{{%/badge%}} later, and press Enter to skip entering these values now.{{%/note%}} 8. Confirm the properties configuration of your Maven project by entering "**Y**" and pressing **Enter**. <br /> The function will be created in your Maven project with the directory structure as shown below. <br /> When you intialize a Java function from the CLI, the function gets created with the {{%link href="/en/cli/v1/project-directory-structure/catalyst-json/"%}}{{%badge%}}catalyst.json{{%/badge%}}{{%/link%}} project configuration file in the project's root, the {{%link href="/en/sdk/java/v1/overview/"%}}Catalyst Java SDK{{%/link%}} JAR files in the function's root, as well as with other project dependencies. Creating a function using a Catalyst Maven archetype will not include the Java SDK files or any of the project dependencies in these directories. The function's directory will instead contain the source and target directories separately, and in addition, will also include {{%badge%}}pom.xml{{%/badge%}} specific to the Maven environment. The main Java function file will also be created with the default code based on the function type, and the {{%link href="/en/cli/v1/project-directory-structure/functions-directory/#catalyst-config-json-file"%}}{{%badge%}}catalyst-config.json{{%/badge%}}{{%/link%}} file will be created and auto-configured. -------------------------------------------------------------------------------- title: "Java SDK Dependency" description: "The Catalyst Java SDK is automatically handled as a Maven dependency when you create a Basic I/O and Advanced I/O with the Catalyst Maven archetype in your IDE." last_updated: "2026-03-18T07:41:08.665Z" source: "https://docs.catalyst.zoho.com/en/tools/maven-tools/java-sdk-dependency/" service: "Serverless" -------------------------------------------------------------------------------- # Catalyst Java SDK Dependency The {{%link href="/en/sdk/java/v1/overview/"%}}{{%badge%}}catalyst-java-sdk{{%/badge%}}{{%/link%}} package is usually downloaded upon the {{%link href="/en/cli/v1/initialize-resources/initialize-functions/#initialize-a-java-function-of-any-type"%}}initialization of a Java function{{%/link%}} from the CLI and saved in the function's directory. You can also access the SDK package from the {{%link href="/en/getting-started/set-up-a-catalyst-project/developer-tools/"%}}Developer Tools{{%/link%}} section of settings in the Catalyst console any time, and include it inside your Java function's folder. With the option to add the Catalyst Java SDK as a Maven dependency, Catalyst ensures the following: * The Java SDK package is automatically incorporated for every Java function you create through the Catalyst archetypes. * The SDK is added as a Maven dependency in the pom.xml configuration file inside the function bundle. * The versioning of the Java SDK package is automatically handled. Catalyst makes sure the latest version of the SDK package is applied when a Java function is served or deployed. * The function is automatically bundled with the SDK package when you package, serve, or deploy it. The Java SDK Maven dependency therefore prevents you from being responsible for managing the SDK toolkit, and ensures that you need not download the SDK for each function you create. You will find the Java SDK package listed under Maven dependencies in your IDE. <br /> -------------------------------------------------------------------------------- title: "pom.xml" description: "The definitions of the Catalyst Java SDK dependencies and the Catalyst Maven plugin can be found in pom.xml, which is a Maven configuration file in a Maven project." last_updated: "2026-03-18T07:41:08.666Z" source: "https://docs.catalyst.zoho.com/en/tools/maven-tools/pom-xml/" service: "Serverless" -------------------------------------------------------------------------------- # The pom.xml Configuration File {{%badge%}}{{%link href="https://maven.apache.org/guides/introduction/introduction-to-the-pom.html"%}}pom.xml{{%/link%}}{{%/badge%}} is a Maven configuration file in your Maven project's directory that contains information about the project and configuration details used by Maven to build the project. For example, it specifies the group ID and artifact ID of the Maven project, the project's properties, dependencies and plugins used, their execution information, etc. {{%note%}}{{%bold%}}Note:{{%/bold%}} {{%badge%}}pom.xml{{%/badge%}} gets created automatically when you create the Maven project or convert an existing project to Maven. Depending on your IDE, you might need to generate this file if it is not added in the project.{{%/note%}} You can find the Catalyst Java SDK automatically added as a dependency in {{%badge%}}pom.xml{{%/badge%}} after a Java function is created. {{%code class="language-json"%}}&lt;dependencies&gt; &lt;dependency&gt; &lt;groupId&gt;com.zoho.catalyst&lt;/groupId&gt; &lt;artifactId&gt;java-sdk&lt;/artifactId&gt; &lt;version&gt;1.15.0&lt;/version&gt; &lt;/dependency&gt; &lt;/dependencies&gt; {{%/code%}} You can find the Java dependencies fetched from the Zoho repository published in the Maven Central Repository. {{%code class="language-json"%}}&lt;repositories&gt; &lt;repository&gt; &lt;id&gt;java-sdk&lt;/id&gt; &lt;url&gt;https://maven.zohodl.com&lt;/url&gt; &lt;/repository&gt; &lt;/repositories&gt; {{%/code%}} The build definitions in {{%badge%}}pom.xml{{%/badge%}} include information about the {{%link href="/en/tools/maven-tools/maven-plugin/"%}}Catalyst Maven plugin{{%/link%}} artifact and the individual commands available in the plugin. {{%code class="language-json"%}}&lt;build&gt; &lt;plugins&gt; &lt;plugin&gt; &lt;groupId&gt;com.zoho.catalyst&lt;/groupId&gt; &lt;artifactId&gt;catalyst-maven-plugin&lt;/artifactId&gt; &lt;version&gt;0.0.2&lt;/version&gt; &lt;executions&gt; &lt;execution&gt; &lt;id&gt;catalyst-package&lt;/id&gt; &lt;phase&gt;package&lt;/phase&gt; &lt;goals&gt; &lt;goal&gt;package&lt;/goal&gt; &lt;/goals&gt; &lt;/execution&gt; &lt;execution&gt; &lt;id&gt;catalyst-deploy&lt;/id&gt; &lt;phase&gt;deploy&lt;/phase&gt; &lt;goals&gt; &lt;goal&gt;deploy&lt;/goal&gt; &lt;/goals&gt; &lt;/execution&gt; &lt;/executions&gt; &lt;configuration&gt; &lt;org&gt;901738101&lt;/org&gt; &lt;project&gt;3376000001796044&lt;/project&gt; &lt;/configuration&gt; &lt;/plugin&gt; &lt;/plugins&gt; &lt;/build&gt; {{%/code%}} As mentioned earlier, you can configure the {{%link href="/en/getting-started/set-up-a-catalyst-project/general-settings/"%}}project ID{{%/link%}} of your Catalyst project and the {{%link href="/en/getting-started/catalyst-organizations/"%}}org ID{{%/link%}} of the organization the project belongs to in the _&lt;configuration&gt;&lt;/configuration&gt;_ section under the build definitions, if you had not configured it during function creation. -------------------------------------------------------------------------------- title: "Catalyst Maven Plugin" description: "Catalyst provides a Maven plugin that allows you to easily package, serve, and deploy the functions you create with the Catalyst Maven archetypes." last_updated: "2026-03-18T07:41:08.666Z" source: "https://docs.catalyst.zoho.com/en/tools/maven-tools/maven-plugin/" service: "Serverless" -------------------------------------------------------------------------------- # The Catalyst Maven Plugin ### Introduction The {{%badge%}}catalyst{{%/badge%}} plugin will be available under Maven plugins after you initialize a Basic I/O or an Advanced I/O function from the archetype. You can find the individual commands shown below under this plugin that will enable you to perform various operations on your Catalyst functions and Maven artifacts. <br /> The {{%badge%}}serve{{%/badge%}} and {{%badge%}}deploy{{%/badge%}} command executions are performed after your request is authenticated. Catalyst currently provides proprietary authentication for the Maven plugin that is independent of the {{%link href="/en/cli/v1/login/login-from-cli/"%}}Catalyst CLI authentication{{%/link%}}. Your IDE will prompt you for the authentication token generation when you execute these commands, and the tokens that are created will be saved in your local system. The package and help commands do not require to be authenticated. <br> ### Package The Catalyst {{%badge%}}package{{%/badge%}} command is exclusive to the Maven plugin and is not available in the CLI. This allows you to pack your Java function directory as an executable bundle. {{%note%}}{{%bold%}}Note:{{%/bold%}} You can pack a function manually before you serve or deploy it. However, if you directly serve or deploy a function without executing the {{%badge%}}package{{%/badge%}} command first, Catalyst will automatically pack the function before serving or deploying it.{{%/note%}} #### Pack a Function with the Catalyst Maven Plugin You can pack a Java Basic I/O or Advanced I/O function as described below. We have executed this command through the VS Code IDE in this example. Click the **{{%badge%}}package{{%/badge%}}** command under **Plugins > catalyst** in the Maven tools. <br /> You can track the progress of the execution in your IDE's terminal. The function will be compiled to the JAR file format as a Maven {{%link href="https://maven.apache.org/guides/getting-started/index.html#what-is-a-snapshot-version"%}}{{%badge%}}SNAPSHOT{{%/badge%}}{{%/link%}}. You can find the entire deployable bundle {{%badge%}}catalyst-archive.zip{{%/badge%}} added in the {{%badge%}}target{{%/badge%}} folder of your Maven's project directory. <br /> The {{%badge%}}target{{%/badge%}} directory will contain all the compiled files, libraries, and other Maven dependencies, along with the build archive and the {{%badge%}}SNAPSHOT{{%/badge%}} JAR of the main function. <br /> {{%badge%}}catalyst-archive{{%/badge%}} contains the deployable library files including the Java SDK, the compiled source files, {{%badge%}}{{%link href="/en/cli/v1/project-directory-structure/functions-directory/#catalyst-config-json-file"%}}catalyst-config.json{{%/link%}}{{%/badge%}}, and {{%badge%}}{{%link href="/en/tools/maven-tools/pom-xml/"%}}pom.xml{{%/link%}}{{%/badge%}}. <br /> The function can now be served locally, or deployed to the remote project. <br> ### Serve The {{%badge%}}serve{{%/badge%}} command under the Catalyst Maven plugin is similar to the CLI command, {{%badge%}}{{%link href="/en/cli/v1/serve-resources/introduction/"%}}catalyst serve{{%/link%}}{{%/badge%}}. It enables you to serve and test your function through a localhost in your system, before you deploy it to the remote project. You can serve both Basic I/O and Advanced I/O functions and obtain their local endpoints to test. Additionally, you can leverage your IDE's debugger and attach it to the live serve session for an enhanced testing experience. Catalyst also enables you to perform a hot reload of the function you serve. This enables you to make changes in your function's code and see the updates reflected live, without having to re-compile or re-serve the code. {{%note%}}{{%bold%}}Note:{{%/bold%}} * The project ID and org ID associated with the function needs to be configured in {{%badge%}}{{%link href="/en/tools/maven-tools/pom-xml/"%}}pom.xml{{%/link%}}{{%/badge%}} before you serve the function. * Your function will need to be bundled before it is served. You can [package](#package) it from the plugin, or serve it directly, which will automatically execute the {{%badge%}}package{{%/badge%}} command. * The Maven project's directory must be in the standard structure with all required Maven and Catalyst dependency files for a successful serve.{{%/note%}} <br> #### Serve a Function with the Catalyst Maven Plugin You can serve a Java Basic I/O or Advanced I/O function as described below. We have executed this command through the VS Code IDE in this example. 1. Click the {{%badge%}}**serve**{{%/badge%}} command under **Plugins > {{%badge%}}catalyst{{%/badge%}}** in the Maven tools. <br /> The terminal of your IDE will display the progress of the serve session. <br /> 2. Catalyst will prompt you to authenticate your serve request if no valid authentication token is detected. Open the URL displayed in the terminal in a browser window. <br /> 3. Click **Accept** in your browser window. This will authenticate your Catalyst account and provide the requested permissions to Catalyst CLI. <br /> You can now close the window and navigate to your IDE. 4. Catalyst will start a local server in the default port 3010. Access the local URL of the served function from the terminal. <br /> {{%note%}}{{%bold%}}Note:{{%/bold%}} Depending on your IDE, a debug console might automatically spawn for you to test your hosted resources. You can also attach a debugger by yourself with the serve session, if this does not happen automatically.{{%/note%}} The terminal will display a live log of the actions performed. Depending on your IDE, you can quit the serve session by killing the command execution. <br> ### Deploy The {{%badge%}}deploy{{%/badge%}} command under the Catalyst Maven plugin is similar to the CLI command, {{%badge%}}{{%link href="/en/cli/v1/deploy-resources/introduction/"%}}catalyst deploy{{%/link%}}{{%/badge%}}. It enables you to deploy your function to the remote project after you finish testing it. You can deploy both Basic I/O and Advanced I/O functions and obtain their deployed URL endpoint. {{%note%}}{{%bold%}}Note:{{%/bold%}} * The project ID and org ID associated with the function needs to be configured in {{%badge%}}{{%link href="/en/tools/maven-tools/pom-xml/"%}}pom.xml{{%/link%}}{{%/badge%}} before you deploy the function. * Your function will need to be bundled before it is deployed. You can [package](#package) it from the plugin, or deploy it directly, which will automatically execute the {{%badge%}}package{{%/badge%}} command. * The Maven project's directory must be in the standard structure with all required Maven and Catalyst dependency files for a successful deployment.{{%/note%}} <br> #### Deploy a Function with the Catalyst Maven Plugin You can deploy a Java Basic I/O or Advanced I/O function as described below. We have executed this command through the VS Code IDE in this example. 1. Click the **{{%badge%}}deploy{{%/badge%}}** command under **Plugins > {{%badge%}}catalyst{{%/badge%}}** in the Maven tools. <br /> The terminal of your IDE will display the progress command execution. <br /> 2. Catalyst will prompt you to authenticate your deploy request if no valid authentication token is detected. Open the URL displayed in the terminal in a browser window. <br /> 3. Click **Accept** in your browser window. This will authenticate your Catalyst account and provide the requested permissions to Catalyst CLI. <br /> You can now close the window and navigate to your IDE. 4. The terminal will display the deployed URL of your function that you can access. <br /> {{%note%}}{{%bold%}}Note:{{%/bold%}} The {{%badge%}}/server/{{%/badge%}} part in the URL of a Catalyst application indicates a function. A Basic I/O function's URL contains an {{%badge%}}/execute{{%/badge%}} after the function's name, whereas an Advanced I/O function's URL does not contain that keyword. {{%/note%}} You will now be able to access the function in your project in the remote console. <br> ### Help The Maven plugin provides a help command that displays help information of all the commands in the plugin when you execute it. <br /> You can see the details in your IDE's terminal. <br /> ## Catalyst Tunneling -------------------------------------------------------------------------------- title: "Introduction" description: "Catalyst Tunneling allows you to debug Non-HTTPS and Integration functions by routing function calls to your local system using a rever-proxy provider's tunneling URL." last_updated: "2026-03-18T07:41:08.667Z" source: "https://docs.catalyst.zoho.com/en/tools/tunneling/introduction/" service: "All Services" -------------------------------------------------------------------------------- # Catalyst Tunneling ## Introduction Catalyst Tunneling enables you to locally debug non-HTTPS {{%link href="/en/serverless/help/functions/introduction/" %}}**Catalyst Serverless functions**{{%/link%}} ({{%link href="/en/serverless/help/functions/event-functions/" %}}Event functions{{%/link%}} and {{%link href="/en/serverless/help/functions/cron-functions/" %}}Cron functions{{%/link%}}), as well as the {{%link href="/en/serverless/help/functions/integration-functions/" %}}Integration functions{{%/link%}}. Local debugging is a crucial part of application engineering. While there are clear means and no restrictions on debugging {{%link href="/en/serverless/help/functions/basic-io/" %}}Basic I/O{{%/link%}} and {{%link href="/en/serverless/help/functions/advanced-io/" %}}Advanced I/O{{%/link%}} functions in Catalyst, debugging non-HTTPS backendfunctions like Event functions Cron functions, or the HTTPS backend functions like the Integration functions, can prove to be difficult or restrictive. Cron, Event, and Integration functions are only executed upon automatic, backend invocation. They are not directly triggered by an endpoint URL like Advanced and Basic I/O functions. Instead, these functions are executed due to a run-time event, or at a particular schedhule or a time interval as a backend process. Debugging these functions in the development environment without an exact trigger is inconclusive. Tunneling is a Catalyst feature that solves this issue. Without Catalyst Tunneling to debug Integration and non-HTTPS functions in the development environment, you would {{%link href="/en/cli/v1/working-with-functions/functions-shell/" %}}launch a functions shell{{%/link%}} in the Catalyst CLI and test the functions by providing sample inputs. For Event functions alone, you could additionally {{%link href="/en/cli/v1/event-generate/introduction/" %}}generate a sample payload{{%/link%}} as input and check the output. However, these methods do not allow you to examine the code logic or provide you with enough debugging assistance to test the function. Tunneling works on the principle of reverse-proxying Catalyst functions from getting executed in the cloud to executing on a local web server. This enables you to debug the functions in your local IDE. You can use a {{%link href="/en/tools/tunneling/key-concepts/" %}}reverse proxy-provider{{%/link%}} of your choice, and provide a {{%link href="/en/tools/tunneling/key-concepts/" %}}Tunneling URL{{%/link%}} for these functions to be debugged. You then trigger the URL and, using Catalyst Tunneling, you can route calls made to these functions to your local system, thereby debugging them easily. {{%note%}}{{%bold%}}Note:{{%/bold%}} Tunneling is available for debugging Catalyst functions of all supported runtimes- Java, Node.js, and Python.{{%/note%}} <br /> With Catalyst Tunneling in combination with a third-party reverse proxy service of your choice, you can effectively debug functions by using the {{%link href="https://console.catalyst.zoho.com/baas/index" %}}Catalyst console{{%/link%}}, {{%link href="/en/cli/v1/cli-command-reference/" %}}Catalyst CLI{{%/link%}} and any IDE of your choice. {{%note%}}{{%bold%}}Note:{{%/bold%}} Tunneling is only available in the {{%link href="/en/deployment-and-billing/environments/development-environment/" %}}Development Environment{{%/link%}} of Catalyst.{{%/note%}} -------------------------------------------------------------------------------- title: "Benefits" description: "Catalyst Tunneling allows you to debug Non-HTTPS and Integration functions by routing function calls to your local system using a rever-proxy provider's tunneling URL." last_updated: "2026-03-18T07:41:08.667Z" source: "https://docs.catalyst.zoho.com/en/tools/tunneling/benefits/" service: "All Services" -------------------------------------------------------------------------------- # Benefits * **Efficient debugging experience**: Without Catalyst Tunneling, debugging non-HTTPS functions like {{%link href="/en/serverless/help/functions/cron-functions/" %}}Cron{{%/link%}} and {{%link href="/en/serverless/help/functions/event-functions/" %}}Event{{%/link%}} or {{%link href="/en/serverless/help/functions/integration-functions/" %}}Integration{{%/link%}} functions in the development environment was an inconclusive task. You didn't have the freedom to set your preferred break points in your code file and debug them as you would {{%link href="/en/serverless/help/functions/basic-io/" %}}Basic I/O{{%/link%}} and {{%link href="/en/serverless/help/functions/advanced-io/" %}}Advanced I/O{{%/link%}} functions. Now, using Tunneling, you can trigger Cron, Event, and Integrations functions at will and examine every code line with absolute ease. * **No limitation on reverse-proxy providers**: Catalyst Tunneling can be used with any reverse-proxy providers of your choice. While there is no limitation to which reverse-proxy provider you can use, we recommend that you use the services of trusted reverse-proxy providers. You can find detailed steps on how to configure {{%link href="/en/tools/tunneling/key-concepts/" %}}Tunneling URL{{%/link%}} using some of the more popular reverse-proxy providers in this {{%link href="/en/tools/tunneling/implementation/generate-tunneling-url/" %}}section{{%/link%}}. * **No IDE restrictions**: If your IDE allows you to configure a debugger, with Catalyst Tunneling, you can directly use it to debug your non-HTTPS and Integration functions. This help documentation also contains specific steps on {{%link href="/en/tools/tunneling/implementation/ide-config/java/" %}}configuring the debuggers{{%/link%}} of some of the commonly used IDEs. * **Manage Tunneling from the console**: You can enable, disable, and select multiple functions for tunneling directly in the console. The Catalyst console will also automatically disable tunneling after 24 hrs if you do not disable the tunneling process. You also have the option of updating your selection of non-HTTPS and Integration functions that you need to tunnel. <br /> -------------------------------------------------------------------------------- title: "Key Concepts" description: "Catalyst Tunneling allows you to debug Non-HTTPS and Integration functions by routing function calls to your local system using a rever-proxy provider's tunneling URL." last_updated: "2026-03-18T07:41:08.667Z" source: "https://docs.catalyst.zoho.com/en/tools/tunneling/key-concepts/" service: "All Services" -------------------------------------------------------------------------------- # Key Concepts Before you implement Tunneling to your functions, there are a few key concepts you need to familiarize yourself with: * **Third-party Reverse Proxy Service**: Reverse-proxy providers will generate publicly accessible URLs upon your request that will proxy all requests to your local webserver, and will allow you to connect your localhost with the internet. You can choose any reverse-proxy provider of your choice. In this {{%link href="/en/tools/tunneling/implementation/generate-tunneling-url/" %}}section{{%/link%}} of the help documentation, we will be going over detailed steps on generating Tunneling URL for your functions with the following reverse-proxy providers: - {{%link href="/en/tools/tunneling/implementation/generate-tunneling-url/#ngrok" %}}Ngrok{{%/link%}} - {{%link href="/en/tools/tunneling/implementation/generate-tunneling-url/#localtunnel" %}}Localtunnel{{%/link%}} - {{%link href="/en/tools/tunneling/implementation/generate-tunneling-url/#serveo" %}}Serveo{{%/link%}} - {{%link href="/en/tools/tunneling/implementation/generate-tunneling-url/#localhostrun" %}}Localhost.run{{%/link%}} - {{%link href="/en/tools/tunneling/implementation/generate-tunneling-url/#pagekite" %}}Pagekite{{%/link%}} {{%note%}}{{%bold%}}Note:{{%/bold%}} In this help documentation, we will only be going over steps on using the reverse-proxy providers to generate a {{%bold%}}Tunneling URL{{%/bold%}}. You can find out more about these reverse-proxy providers and the services they provide by visiting their respective help documentations.{{%/note%}} * **Tunneling URL**: This is a URL generated by a reverse-proxy provider. This URL routes all the calls made to your non-HTTPS functions and Integration function to your local system. The local websever handles the application's hosting which can be accessed with this URL. Essentially, this URL allows your local system to act as the server on which your {{%link href="/en/serverless/help/functions/cron-functions/" %}}Cron{{%/link%}}, {{%link href="/en/serverless/help/functions/event-functions/" %}}Event{{%/link%}} and {{%link href="/en/serverless/help/functions/integration-functions/" %}}Integration{{%/link%}} functions can be executed. If your reverse-proxy provider does not generate the Tunneling URL properly, the *Execution History* of the function will be listed in the "**URL Not Found**" status when it is tunneled, and you will encounter an error. * **Tunneled Functions**: These are non-HTTPS and Integration functions that you have selected to tunnel. Cron, Event and Integration functions are triggered only during runtime as a backend process and they typically are executed in the Catalyst cloud. However, when these functions are tunneled, their executions are routed to your local system. As a result, the live logs of these function executions will only be available in the {{%link href="/en/cli/v1/cli-command-reference/" %}}CLI{{%/link%}} and not in the {{%link href="/en/devops/help/logs/introduction/" %}}Catalyst Logs{{%/link%}} component, or anywhere in the console. The only other set of logs that will contain any information about Tunneling is the {{%link href="/en/getting-started/set-up-a-catalyst-project/audit-logs/" %}}Audit Logs{{%/link%}}, where information such as when and by whom the tunneling was enabled will be displayed. * **Catalyst Function Shell**: Catalyst allows you to {{%link href="/en/cli/v1/working-with-functions/functions-shell/" %}}launch a function shell{{%/link%}} in the Catalyst CLI, where you can debug functions. It functions much like a Node shell, but it is powered by the functionalities of Catalyst CLI. We will be using this shell to execute the Tunneling commands. You can find a list of the Catalyst shell commands for Tunneling in this {{%link href="/en/tools/tunneling/implementation/launch-tunneling/" %}}section{{%/link%}}. * **Conditions to enable Tunneling:** Tunneling is only possible in the {{%link href="/en/deployment-and-billing/environments/development-environment/" %}}development environment{{%/link%}} of Catalyst. To tunnel your functions, you must first make them available in the Catalyst console by either creating and coding them in the console from the {{%link href="/en/serverless/" %}}Catalyst Serverless{{%/link%}} section, or by {{%link href="/en/cli/v1/deploy-resources/introduction/" %}}deploying{{%/link%}} them to the console after coding them in your local environment. * **Application Performance Monitoring will not be available for functions while they are being tunneled**: When a function is being tunneled, calls made to the function are routed to your local system. This prevents the {{%link href="/en/devops/help/apm/introduction/" %}}Application Performance Monitoring (APM){{%/link%}} component from monitoring the performance of your function. However, if you terminate tunneling, then you can use APM to monitor the performance of the function. -------------------------------------------------------------------------------- title: "Architecture" description: "Catalyst Tunneling allows you to debug Non-HTTPS and Integration functions by routing function calls to your local system using a rever-proxy provider's tunneling URL." last_updated: "2026-03-18T07:41:08.667Z" source: "https://docs.catalyst.zoho.com/en/tools/tunneling/architecture/" service: "All Services" -------------------------------------------------------------------------------- # Architecture The following diagram illustrates the backend operations involved in debugging the Catalyst non-HTTPS and Integration functions using **Catalyst Tunneling**: <br /> {{%note%}}{{%bold%}}Note:{{%/bold%}} Catalyst Tunneling is only available in the {{%link href="/en/deployment-and-billing/environments/development-environment/" %}}Development environment{{%/link%}}.{{%/note%}} The steps below describe the workflow involved in debugging your non-HTTPS and Integration functions using Catalyst Tunneling: 1. In the Catalyst console, we will select the non-HTTPS or Integration functions for tunneling, and provide the Tunneling URL we generated using a third-party reverse proxy service and enable Tunneling. 2. We will then proceed to launch a function shell and start performing debugging operations using Catalyst Tunneling. 3. Now, every time you trigger the function using the Tunneling URL, the calls made will be routed to your local system and the logs will be present in the Catalyst CLI. Essentially, your local system acts as the server in which the tunneling-enabled functions are being executed.<br /><br />This allows you to set break points in your code file, and debug your function with ease. {{%note%}}{{%bold%}}Note:{{%/bold%}} * After a function is tunneled, the logs of their execution will only be available in the Catalyst CLI, and fundamental information such as when and by whom the tunneling was enabled will be available in the {{%link href="/en/getting-started/set-up-a-catalyst-project/audit-logs/" %}}Audit Logs{{%/link%}} section present in the console. * While you can select multiple functions to tunnel, only when the debugging of the first function is completed will you be able to start debugging the next function. As of the current update, only this type of synchronous debugging of functions is possible. * Steps to configure the debugger of some of the more popular IDEs, such as Visual Studio Code, IntelliJ, and so on, to debug functions can be found in this {{%link href="/en/tools/tunneling/implementation/ide-config/java/" %}}section{{%/link%}}.{{%/note%}} -------------------------------------------------------------------------------- title: "Manage Tunneling in the Console" description: "Catalyst Tunneling allows you to debug Non-HTTPS and Integration functions by routing function calls to your local system using a rever-proxy provider's tunneling URL." last_updated: "2026-03-18T07:41:08.667Z" source: "https://docs.catalyst.zoho.com/en/tools/tunneling/manage-tunneling/" service: "All Services" -------------------------------------------------------------------------------- # Manage Tunneling in the Console In this help section, we are going to learn about how to manage Tunneling operations in the console. ### Edit Tunneling You can update the functions to be tunneled by adding or removing them, or the Tunneling URL that you configured. To edit the tunnel: 1. Click the **Edit Tunnel** option <br /> 2. Make the required changes and click **Update**. <br /> The tunnel has been edited. <br /> ### Disable Tunneling To disable tunneling for your functions: 1. Click the **Disable** button. <br /> 2. Click **Yes, Proceed** to disable tunneling. <br /> Tunneling will be disabled. <br /> If you do not manually disable tunneling your functions, it will be automatically disabled by Catalyst in **24 hrs** and you will receive an email notification informing you of the same. <br /> You can enable tunneling again by clicking **Enable**. {{%note%}}{{%bold%}}Note:{{%/bold%}} You can also use the following Catalyst CLI command to enable Tunneling: {{%cli%}}catalyst functions: shell --tunnel tunnel-port-number --enable-tunnel tunneling-URL{{%/cli%}} <br> You can learn more about the CLI commands invovled in Tunneling from this {{%link href="" %}}help section{{%/link%}}. {{%/note%}} This optional command will only allow you to enable tunneling. You will not be able to edit or perform any other operation that is otherwise available in the console. To disable tunneling, simply exit the terminal. <br> If you wish to tunnel your functions with a new Tunneling URL, replace &lt;tunneling-URL&gt; with your newly generated URL. ### Implementation > Catalyst Tunneling allows you to debug Non-HTTPS and Integration functions by routing function calls to your local system using a rever-proxy provider's tunneling URL. -------------------------------------------------------------------------------- title: "Prerequisites" description: "Catalyst Tunneling allows you to debug Non-HTTPS and Integration functions by routing function calls to your local system using a rever-proxy provider's tunneling URL." last_updated: "2026-03-18T07:41:08.668Z" source: "https://docs.catalyst.zoho.com/en/tools/tunneling/implementation/prerequisites/" service: "All Services" -------------------------------------------------------------------------------- # Prerequisites The following conditions need to be satisfied, for you to debug your non-HTTPS and Integration functions: 1. If your reverse-proxy provider requires certain specific steps like the installation of their CLI, complete them before starting with the implementation. For example, if your reverse-proxy provider is {{%link href="https://ngrok.com/" %}}Ngrok{{%/link%}}, then you need to install their CLI. <br /> {{%note%}}{{%bold%}}Note:{{%/bold%}} You can find detailed steps to generate Tunneling URL for the some of the more common reverse-proxy providers like: * {{%link href="/en/tools/tunneling/implementation/generate-tunneling-url/#ngrok" %}}Ngrok{{%/link%}} * {{%link href="/en/tools/tunneling/implementation/generate-tunneling-url/#localtunnel" %}}Localtunnel{{%/link%}} * {{%link href="/en/tools/tunneling/implementation/generate-tunneling-url/#serveo" %}}Serveo{{%/link%}} * {{%link href="/en/tools/tunneling/implementation/generate-tunneling-url/#localhostrun" %}}Localhost.run{{%/link%}} * {{%link href="/en/tools/tunneling/implementation/generate-tunneling-url/#pagekite" %}}Pagekite{{%/link%}}{{%/note%}}<br /> 2. {{%link href="/en/cli/v1/deploy-resources/deploy-functions/" %}}Deploy the functions{{%/link%}} you wish to tunnel to the {{%link href="https://console.catalyst.zoho.com/baas" %}}Catalyst console{{%/link%}} in the {{%link href="/en/deployment-and-billing/environments/development-environment/" %}}development environment{{%/link%}} from your local project environment with the CLI. <br /> To debug your non-HTTPS and Integration functions using Catalyst Tunneling you need to implement the following steps: 1. {{%link href="/en/tools/tunneling/implementation/generate-tunneling-url/" %}}Generate Tunneling URL{{%/link%}} 2. {{%link href="/en/tools/tunneling/implementation/config-tunneling-console/" %}}Configure Tunneling in the Console{{%/link%}} 3. {{%link href="/en/tools/tunneling/implementation/launch-tunneling/" %}}Launch Catalyst functions shell and begin Tunneling{{%/link%}} 4. {{%link href="/en/tools/tunneling/implementation/ide-config/java/" %}}Configure IDE's debugger to start debugging your functions{{%/link%}} 5. {{%link href="/en/tools/tunneling/implementation/debug-tunneled-func/java/" %}}Debug the Tunneled functions{{%/link%}} The upcoming help sections contain detailed instructions on completing the above-mentioned steps. -------------------------------------------------------------------------------- title: "Generating Tunneling URL" description: "Catalyst Tunneling allows you to debug Non-HTTPS and Integration functions by routing function calls to your local system using a rever-proxy provider's tunneling URL." last_updated: "2026-03-18T07:41:08.668Z" source: "https://docs.catalyst.zoho.com/en/tools/tunneling/implementation/generate-tunneling-url/" service: "All Services" -------------------------------------------------------------------------------- # Generating Tunneling URL {{%link href="/en/tools/tunneling/key-concepts/" %}}Tunneling URL{{%/link%}} is required, because you need it to associate with your tunneling-enabled functions when you enable Tunneling. When your tunneled functions are triggered, the calls made to this URL will be routed to your local system. Depending on the reverse proxy provider you have chosen, the steps to generate the Tunneling URL varies. For the purposes of this help documentation we will be covering the steps to generate Tunneling URL with some of the most popular and commonly used reverse proxy providers. ### Ngrok * Log in to **Ngrok** through their CLI and configure two-factor authentication (2FA) for Ngrok in your system. {{%note%}}{{%bold%}}Note:{{%/bold%}} Steps on establishing 2FA for Ngrok is provided in their {{%link href="https://ngrok.com/docs/getting-started/" %}}official help documentation{{%/link%}}.{{%/note%}} * To generate a *Tunneling URL*, use the following CLI command: {{%cli%}}ngrok http tunnel-port-number{{%/cli%}} * Copy the Tunneling URL generated by Ngrok, and proceed to the Catalyst console to tunnel the functions using Catalyst. {{%note%}}{{%bold%}}Note:{{%/bold%}} * The {{%badge%}}tunnel-port-number{{%/badge%}} you use here will need to be the same you use to launch your function shell. * You can find more information on Ngrok in their {{%link href="https://ngrok.com/docs/getting-started/" %}}official help documentation{{%/link%}}.{{%/note%}} ### Localtunnel * Install **Localtunnel** in your local system by executing the following terminal command: {{%cli%}}npm install -g localtunnel{{%/cli%}} <br /> * Execute the command below in the Localtunnel CLI to generate a tunneling URL {{%cli%}}lt --port tunnel-port-number{{%/cli%}} * Copy the Tunneling URL generated by Localtunnel, and proceed to the Catalyst console to tunnel the functions using Catalyst. {{%note%}}{{%bold%}}Note:{{%/bold%}} * The {{%badge%}}tunnel-port-number{{%/badge%}} you use here will need to be the same you use to launch your function shell. * You can find more information on Localtunnel in their {{%link href="https://localtunnel.github.io/www/" %}}official help documentation{{%/link%}}.{{%/note%}} ### Serveo * Execute the following command in a new terminal window to generate a tunneling URL using **Serveo**. {{%cli%}}ssh -R 80:localhost:tunnel-port_number serveo.net{{%/cli%}} * Copy the Tunneling URL generated by Serveo, and proceed to the Catalyst console to tunnel the functions using Catalyst. {{%note%}}{{%bold%}}Note:{{%/bold%}} * The {{%badge%}}tunnel-port-number{{%/badge%}} you use here will need to be the same you use to launch your function shell. * You do not require any additional CLI commands to generate Tunneling URL using Serveo. You can find more information on Serveo in their {{%link href="https://serveo.net/" %}}official help documentation{{%/link%}}.{{%/note%}} ### Localhost.run * Execute the following command in a new terminal window to generate a tunneling URL using **Localhost.run** {{%cli%}}ssh -R 80:localhost:tunnel-port-number nokey@localhost.run{{%/cli%}} * Copy the Tunneling URL generated by Localhost.run and proceed to tunnel the functions using Catalyst. {{%note%}}{{%bold%}}Note:{{%/bold%}} * The {{%badge%}}tunnel-port-number{{%/badge%}} you use here will need to be the same you use to launch your function shell. * You do not require any additional CLI commands to generate Tunneling URL using Localhost.run. You can find more information on Localhost.run in their {{%link href="https://localhost.run/" %}}official help documentation{{%/link%}}.{{%/note%}} ### Pagekite * Execute the following commands in a new terminal window to generate a tunneling URL using **Pagekite**. {{%cli%}}ssh -R 80:localhost:tunnel-port-number nokey@localhost.run{{%/cli%}} This command will send a curl request to the Pagekite website and will ask you to download the {{%badge%}}pagekite.py{{%/badge%}} file in your local system. {{%note%}}{{%bold%}}Note:{{%/bold%}} You can use Pagekite to reverse proxy functions of any programming stack. However, to use Pagekite services, you need to ensure you have {{%bold%}}Python 3{{%/bold%}} installed in your system.{{%/note%}} * Now execute the following command in your Pagekite terminal to generate the Tunneling URL {{%cli%}}python3 pagekite.py tunnel-port-number yourname.pagekite.me{{%/cli%}} Ensure that you provide a unique name for your Tunneling URL when you are prompted to do so. {{%note%}}{{%bold%}}Note:{{%/bold%}} * The {{%badge%}}tunnel-port-number{{%/badge%}} you use here will need to be the same you use to launch your function shell. * You can find more information on Pagekite in there {{%link href="https://pagekite.net/" %}}official help documentation{{%/link%}}.{{%/note%}} -------------------------------------------------------------------------------- title: "Configure Tunneling in the Catalyst Console" description: "Catalyst Tunneling allows you to debug Non-HTTPS and Integration functions by routing function calls to your local system using a rever-proxy provider's tunneling URL." last_updated: "2026-03-18T07:41:08.668Z" source: "https://docs.catalyst.zoho.com/en/tools/tunneling/implementation/config-tunneling-console/" service: "All Services" -------------------------------------------------------------------------------- # Configure Tunneling in the Catalyst Console To access Tunneling in the Catalyst console: 1. Open your Catalyst project in the console and click the **settings** icon. <br /> 2. Navigate to *Project Settings* and click **Tunneling**. <br /> 3. Click **Create Tunnel Route**. <br /> 4. Select the non-HTTPS and Integration functions you wish to tunnel from the drop-down. <br /> 5. Paste the *Tunneling URL* generated in the previous step in the **Tunneling URL** input field. <br /> {{%note%}}{{%bold%}}Note:{{%/bold%}} * The functions you select and the Tunneling URL you use will be displayed in the tunneling flow diagram. * To make the functions available in the console, you need to have deployed the functions to the Catalyst console in your project's {{%link href="/en/deployment-and-billing/environments/development-environment/" %}}development environment{{%/link%}} from your local system. * You can only perform synchronous debugging of functions as of now. The next function will only be tunneled when one function's tunneling is complete.{{%/note%}} 6. Click **Enable**. <br /> You will now be able to view the list of functions you have enabled tunneling for, as well as other general details, such as when and by whom the tunneling was enabled. {{%note%}}{{%bold%}}Note:{{%/bold%}} * The execution timeout for {{%bold%}}Integration{{%/bold%}} function is {{%bold%}}30 seconds{{%/bold%}} and for {{%bold%}}Cron{{%/bold%}} and {{%bold%}}Event{{%/bold%}} function is {{%bold%}}15 minutes{{%/bold%}}. * Some of the reverse-proxy providers you choose to tunnel your functions with could issue a timeout message at a shorter duration than the one set by Catalyst. In these cases as well, the timeout message will appear in the Catalyst functions' execution history. * Some of the reverse-proxy providers you choose to tunnel your functions with could issue a timeout message at a shorter duration than the one set by Catalyst. In these cases as well, the timeout message will appear in the Catalyst functions' execution history.{{%/note%}} If you wish to debug your tunneled functions, you will need to set up additional configurations and use a different CLI command. Detailed steps on how to debug your tunneled functions from your IDE can be found in this {{%link href="/en/tools/tunneling/implementation/ide-config/java/" %}}section{{%/link%}}. -------------------------------------------------------------------------------- title: "Launch Catalyst Functions Shell and Start Tunneling" description: "Catalyst Tunneling allows you to debug Non-HTTPS and Integration functions by routing function calls to your local system using a rever-proxy provider's tunneling URL." last_updated: "2026-03-18T07:41:08.669Z" source: "https://docs.catalyst.zoho.com/en/tools/tunneling/implementation/launch-tunneling/" service: "All Services" -------------------------------------------------------------------------------- # Launch Catalyst Functions Shell and Start Tunneling Launch Catalyst function shell using the following CLI command with the {{%badge%}}--tunnel{{%/badge%}} option and specify the port number in which you generated the Tunneling URL. {{%cli%}}catalyst functions:shell --tunnel tunnel-port-number{{%/cli%}} This command will start tunneling your functions. <br /> If you trigger the function, all the calls made will be routed locally, and you will be able to view their execution logs in the Catalyst CLI. <br /> If you attempt to view the *Execution History* of the tunneled function present in the component's section, it will be clearly indicated that the function has been tunneled. <br /> If you further click the **view-logs** icon, you will be able to view details such as when and by whom the tunneling was enabled, and disabled. <br /> {{%note%}}{{%bold%}}Note:{{%/bold%}} The logs will only be visible in the Catalyst CLI because the non-HTTPS or Integration function is being executed in the local machine, and not on the Catalyst cloud.{{%/note%}} The same information can be found in the {{%link href="/en/getting-started/set-up-a-catalyst-project/audit-logs/" %}}Audit Logs{{%/link%}}. <br /> Now, execute the following CLI command to tunnel and debug your functions: {{%cli%}}catalyst functions:shell --tunnel tunnel-port-number --debug port-number{{%/cli%}} <br /> {{%note%}}{{%bold%}}Note:{{%/bold%}} Ensure you provide different port numbers for tunneling and debugging.{{%/note%}} If you tunnel your function and choose to debug, you have to implement additional IDE configurations. You can find the steps to configure your IDE's debugger for debugging tunneled functions from this {{%link href="/en/tools/tunneling/implementation/ide-config/java/" %}}section{{%/link%}}. #### Function Stack > Catalyst Tunneling allows you to debug Non-HTTPS and Integration functions by routing function calls to your local system using a rever-proxy provider's tunneling URL. -------------------------------------------------------------------------------- title: "Java" description: "Catalyst Tunneling allows you to debug Non-HTTPS and Integration functions by routing function calls to your local system using a rever-proxy provider's tunneling URL." last_updated: "2026-03-18T07:41:08.669Z" source: "https://docs.catalyst.zoho.com/en/tools/tunneling/implementation/ide-config/java/" service: "All Services" -------------------------------------------------------------------------------- # Configure IDE to Debug Java Functions For the purposes of this help documentation we are going to illustrate how to configure debugging preferences of Java non-HTTPS and Integration functions in Visual Studio Code, IntelliJ IDEA, and Eclipse IDEs. {{%note%}}{{%bold%}}Note:{{%/bold%}} This step is only applicable if you wish to {{%bold%}}debug your tunneled functions{{%/bold%}} and if you have used the following CLI command: {{%cli%}}catalyst functions:shell --tunnel tunnel-port-number --debug port-number{{%/cli%}}<br /> If you wish only to tunnel your functions and you have used the following CLI command then no IDE configurations is required. {{%cli%}}catalyst functions:shell --tunnel tunnel-port-number{{%/cli%}}<br /> This command will {{%bold%}}only tunnel your functions{{%/bold%}} and publish the logs of the functions in the Catalyst CLI. {{%/note%}} {{%tabs%}} {{%tab "Visual Studio Code"%}} ### Configure Visual Studio Code IDE's Debugger 1. Ensure you have all the functions you need to debug in the local machine, and open the concerned project in VS Code. <br /> 2. Click the **Run/Debug** button present in the menu-bar and create a {{%badge%}}launch.json{{%/badge%}} file, by clicking the "**create a launch.json file**" option. <br /> This is how the launch.json file appears before you begin configurations. <br /> 3. Copy the JSON snippet below and paste it as value in the "**configurations**" JSON key. {{% panel_without_adjustment header="launch.json" class="language-json line-numbers"%}}"configurations": [{ "type": "java", "name": "java_cron", // name can be any name but having the same function name will be helpful while debugging "request": "attach", "hostName": "localhost", "port": 9001,// The debug port number which you specified in the catalyst functions:shell --tunnel 8001 --debug 9001. The port number can be any number which is not being used by any other processes "projectName": "java_cron"// The function name }], {{% /panel_without_adjustment %}} 4. Save this file and apply the breakpoints in your required lines of code and proceed to the {{%link href="/en/tools/tunneling/implementation/debug-tunneled-func/java/" %}}next step{{%/link%}}. <br /> {{%/tab%}} {{%tab "IntelliJ IDEA"%}} ### Configure IntelliJ IDEA IDE's Debugger 1. Import your project directory in IntelliJ IDE, and configure the run time JDK to match your Java version. <br /> {{%note%}}{{%bold%}}Note:{{%/bold%}} You can find out how to configure your JDK in IntelliJ IDEA by visiting their {{%link href="https://www.jetbrains.com/help/idea/sdk.html" %}}official help documentation{{%/link%}}.{{%/note%}} 2. Click **Run>Edit Configurations**. <br /> 3. Click the **+ icon**, select **Remote JVM Debug** option from the pop-up, and click **OK**. <br /> 4. Ensure you set the following values in the pop-up: - Name: Set it as your project name or any other name of your preference. - In the *Configurations* tab: - Debugger mode: **Attach to remote JVM** - Host: **localhost** - Port: Set the same port value you set for debugging in the Catalyst CLI. - Use module classpath: Select the path of your project directory. - Click **OK**. <br /> 5. Set the required debugging points in your code, and proceed to the {{%link href="/en/tools/tunneling/implementation/debug-tunneled-func/java/" %}}next step{{%/link%}}. <br /> {{%/tab%}} {{%tab "Eclipse"%}} ### Configure Eclipse IDE's Debugger 1. Import your project directory in *Eclipse IDE*. <br /> 2. Ensure your Java stack and JDK are in the same version by right-clicking your project list and selecting **Build Path > Configure Build Path**. <br /> 3. Select **Project Natures**. Search for "**Java**", select "**java**" from the list and click **OK**. <br /> 4. Ensure **Java Compiler** is selected, and click **Apply and Close** to add the Java compiler for your project. <br /> 5. Next, right-click your project directory and click **Debug As > Debug Configuration**. <br /> 6. Search for *Remote Java Applications*, right-click on the search result and select **New Configurations**. <br /> You will be directed to a **Debug Configurations** pop-up. 7. Ensure you have configured the debugger with the following values: - *Connect* tab: - Select your project directory - Set Connection Type as "**Standard (Socket Attach)**" - Set *Connection Properties* as: - Host: **localhost** - Port: Enter the port number you set for debugging in the Catalyst CLI <br /> - *Source* tab: - Click the **Add** button and select the function directory <br /> Once you have applied the required configurations, click **Debug**. 8. Open your function file and set your required debug points in your code, and proceed to the {{%link href="/en/tools/tunneling/implementation/debug-tunneled-func/java/" %}}next step{{%/link%}}. <br /> {{%/tab%}} {{%/tabs%}} -------------------------------------------------------------------------------- title: "Node.js" description: "Catalyst Tunneling allows you to debug Non-HTTPS and Integration functions by routing function calls to your local system using a rever-proxy provider's tunneling URL." last_updated: "2026-03-18T07:41:08.670Z" source: "https://docs.catalyst.zoho.com/en/tools/tunneling/implementation/ide-config/nodejs/" service: "All Services" -------------------------------------------------------------------------------- # Configure IDE to Debug Node.js Functions For the purposes of this help documentation we are going to illustrate how to configure debugging preferences of Node.js non-HTTPS and Integration functions in Visual Studio Code. {{%note%}}{{%bold%}}Note:{{%/bold%}} This step is only applicable if you wish to {{%bold%}}debug your tunneled functions{{%/bold%}} and if you have used the following CLI command: {{%cli%}}catalyst functions:shell --tunnel tunnel-port-number --debug port-number{{%/cli%}}<br /> If you wish only to tunnel your functions and you have used the following CLI command then no IDE configurations is required. {{%cli%}}catalyst functions:shell --tunnel tunnel-port-number{{%/cli%}}<br /> This command will {{%bold%}}only tunnel your functions{{%/bold%}} and publish the logs of the functions in the Catalyst CLI. {{%/note%}} Configure your VS Code IDE's debugger in the following manner: 1. Ensure you have all the functions you need to debug in the local machine, and open the concerned project in VS Code. <br /> 2. Click the **Run/Debug** button present in the menu-bar and create a {{%badge%}}launch.json{{%/badge%}} file, by clicking the "**create a launch.json file**" option. <br /> This is how the launch.json file appears before you begin configurations. <br /> 3. Copy the JSON snippet below and paste it as value in the "**configurations**" JSON key. {{% panel_without_adjustment header="launch.json" class="language-json line-numbers"%}}"configurations": [{ "name": "cron_fun", // name can be any name but having the same function name will be helpful while debugging "type": "node", "request": "attach", "address": "localhost", "port": 9001, // The debug port number you specified in the catalyst functions:shell --tunnel 8001 --debug 9001. The port number can be any number which is not being used by any other processes "localRoot": "/Users/jack/tun_cli/functions/cron_fun" //Exact path where the function folder is present }], {{% /panel_without_adjustment %}} 4. Save this file and apply the breakpoints in your required lines of code and proceed to the {{%link href="/en/tools/tunneling/implementation/debug-tunneled-func/nodejs/" %}}next step{{%/link%}}. <br /> -------------------------------------------------------------------------------- title: "Python" description: "Catalyst Tunneling allows you to debug Non-HTTPS and Integration functions by routing function calls to your local system using a rever-proxy provider's tunneling URL." last_updated: "2026-03-18T07:41:08.670Z" source: "https://docs.catalyst.zoho.com/en/tools/tunneling/implementation/ide-config/python/" service: "All Services" -------------------------------------------------------------------------------- # Configure IDE to Debug Python Functions For the purposes of this help documentation we are going to illustrate how to configure debugging preferences of Python non-HTTPS and Integration functions in Visual Studio Code. {{%note%}}{{%bold%}}Note:{{%/bold%}} This step is only applicable if you wish to {{%bold%}}debug your tunneled functions{{%/bold%}} and if you have used the following CLI command: {{%cli%}}catalyst functions:shell --tunnel tunnel-port-number --debug port-number{{%/cli%}}<br /> If you wish only to tunnel your functions and you have used the following CLI command then no IDE configurations is required. {{%cli%}}catalyst functions:shell --tunnel tunnel-port-number{{%/cli%}}<br /> This command will {{%bold%}}only tunnel your functions{{%/bold%}} and publish the logs of the functions in the Catalyst CLI. {{%/note%}} Configure your VS Code IDE's debugger in the following manner: 1. Ensure you have all the functions you need to debug in the local machine, and open the concerned project in VS Code. <br /> 2. Click the **Run/Debug** button present in the menu-bar and create a {{%badge%}}launch.json{{%/badge%}} file, by clicking the "**create a launch.json file**" option. <br /> This is how the launch.json file appears before you begin configurations. <br /> 3. Copy the JSON snippet below and paste it as value in the "**configurations**" JSON key. {{% panel_without_adjustment header="launch.json" class="language-json line-numbers"%}}"configurations":[{ "name": "Python: Current File", "type": "debugpy", "request": "attach", "connect": { "host": "127.0.0.1", "port": 9001 //the debug port number which you have specified in the catalyst functions:shell --tunnel 8001 --debug 9001. }, "justMyCode": true }], {{% /panel_without_adjustment %}} 4. Install the **Python Debugger** VS Code extension to be able to debug python fuctions in Visual Studio Code IDE. <br /> 5. Install {{%link href="https://pypi.org/project/debugpy/" %}}debugpy{{%/link%}} in the Python function's source directory using the following command: {{%cli%}}python3.9 -m pip install debugpy -t ./{{%/cli%}} <br /> 6. Copy the following code lines and paste them in the very beginning of your function code: {{% panel_without_adjustment header="code_file.py" class="language-python line-numbers"%}}import debugpy debugpy.listen(9001) #specify the port for debugging print("Waiting for debugger to attach") debugpy.wait_for_client() print("debugger attached") {{% /panel_without_adjustment %}} 7. Use the {{%badge%}}debugpy.breakpoint(){{%/badge%}} function anywhere in the main python code file to introduce a breakpoint. <br /> #### Function Stack > Catalyst Tunneling allows you to debug Non-HTTPS and Integration functions by routing function calls to your local system using a rever-proxy provider's tunneling URL. -------------------------------------------------------------------------------- title: "Java" description: "Catalyst Tunneling allows you to debug Non-HTTPS and Integration functions by routing function calls to your local system using a rever-proxy provider's tunneling URL." last_updated: "2026-03-18T07:41:08.671Z" source: "https://docs.catalyst.zoho.com/en/tools/tunneling/implementation/debug-tunneled-func/java/" service: "All Services" -------------------------------------------------------------------------------- # Debug Tunneled Java Functions Trigger the tunneled functions in Catalyst web, and confirm that the debugger has been attached by viewing the Catalyst CLI, for a message resembling the one shown in the image below: <br /> Depending on the IDE you are using the following steps might vary. {{%tabs%}} {{%tab "Visual Studio Code"%}} ### Debug Tunneled Java Functions in Visual Studio Code IDE 1. Click the **Run/Debug** icon and select the functions you wish to debug. <br /> 2. Click the **Play** button. <br /> You can now easily debug your non-HTTPS and Integration functions. <br /> {{%/tab%}} {{%tab "IntelliJ IDEA"%}} ### Debug Tunneled Java Functions in IntelliJ IDEA IDE 1. Ensure you have set the required break points in your code and click the **Run/Debug configurations** button. <br /> 2. Select the *debugger file* you configured in the {{%link href="/en/tools/tunneling/implementation/ide-config/java/" %}}previous step{{%/link%}} from the drop-down. <br /> 3. Once function is triggered in the Catalyst web and the tunneling request is initiated in the Catalyst CLI, click the **Debug** button and start debugging. <br /> Once you have completed debugging your code, ensure you *stop/terminate* the debugging session in your IDE, by clicking the **stop-icon**. This is to ensure that the port is not engaged when you proceed to your next debugging session. <br /> {{%/tab%}} {{%tab "Eclipse"%}} ### Debug Tunneled Java Functions in Eclipse IDE 1. Ensure you have set the required break points in your code and click the **debugger-icon**. <br /> 2. Select the *debugger file* you configured in the {{%link href="/en/tools/tunneling/implementation/ide-config/java/" %}}previous step{{%/link%}}. <br /> 3. Once you trigger the tunneling-enabled function in Catalyst web, click the Debug button in your IDE and debug you function as required. <br /> Once you have completed debugging your code, ensure you terminate the debugging session in your IDE, by clicking the **terminate-icon**. This is to ensure that the port is not engaged when you proceed to your next debugging session. <br /> {{%/tab%}} {{%/tabs%}} -------------------------------------------------------------------------------- title: "Node.js" description: "Catalyst Tunneling allows you to debug Non-HTTPS and Integration functions by routing function calls to your local system using a rever-proxy provider's tunneling URL." last_updated: "2026-03-18T07:41:08.671Z" source: "https://docs.catalyst.zoho.com/en/tools/tunneling/implementation/debug-tunneled-func/nodejs/" service: "All Services" -------------------------------------------------------------------------------- # Debug Tunneled Node.js Functions Trigger the tunneled functions in Catalyst web, and confirm that the debugger has been attached by viewing the Catalyst CLI, for a message resembling the one shown in the image below: <br /> For the purpose of this help documentation, we aren going to ilustrate debugging of tunneled Node.js functions using Visual Studio Code IDE. Depending on the IDE you are using the following steps might vary. 1. Click the **Run/Debug** icon and select the functions you wish to debug. <br /> 2. Click the **Play** button. <br /> You can now easily debug your non-HTTPS and Integration functions. <br /> -------------------------------------------------------------------------------- title: "Python" description: "Catalyst Tunneling allows you to debug Non-HTTPS and Integration functions by routing function calls to your local system using a rever-proxy provider's tunneling URL." last_updated: "2026-03-18T07:41:08.676Z" source: "https://docs.catalyst.zoho.com/en/tools/tunneling/implementation/debug-tunneled-func/python/" service: "All Services" -------------------------------------------------------------------------------- # Debug Tunneled Python Functions For the purpose of this help documentation, we aren going to ilustrate debugging of tunneled Python functions using Visual Studio Code IDE. Depending on the IDE you are using the following steps might vary. 1. Click the **Run/Debug** icon and select the functions you wish to debug. <br /> 2. Click the **Play** button. <br /> You can now easily debug your non-HTTPS and Integration functions. <br /> For Python functions alone, ensure you disconnect the debugger by clicking the button shown in the image below. <br /> If you don't disconnect your debugger, then no other tunneling requests will be made possible.