---
title: PingGateway operating modes
description: To prevent unwanted changes to the configuration, PingGateway is by default in production mode after installation. Production mode has the following characteristics:
component: pinggateway
version: 2026
page_id: pinggateway:configure:operating-modes
canonical_url: https://docs.pingidentity.com/pinggateway/2026/configure/operating-modes.html
revdate: 2025-04-01T17:53:34Z
section_ids:
  production_mode_immutable_mode: Production mode (immutable mode)
  development-mode: Development mode (mutable mode)
  switch_from_production_mode_to_development_mode: Switch from production mode to development mode
  immutable: Switch from development mode to production mode
---

# PingGateway operating modes

## Production mode (immutable mode)

To prevent unwanted changes to the configuration, PingGateway is by default in production mode after installation. Production mode has the following characteristics:

* The `/routes` endpoint isn't exposed or accessible.

* Studio is effectively disabled. You can't manage, list, or even read routes through Common REST.

* By default, other endpoints, such as `/share` and `api/info` are exposed to the loopback address only.

  To change the default protection for specific endpoints, configure an `"apiProtectionFilter"` in `admin.json`.

## Development mode (mutable mode)

In development mode, by default all endpoints are open and accessible.

You can create, edit, and deploy routes through [PingGateway Studio](../studio-guide/preface.html), manage routes through [Common REST](crest.html) without authentication or authorization, and access [PingGateway API descriptors](../about/api-descriptor.html).

Use development mode to evaluate or demo PingGateway, or to develop configurations on a single instance. This mode isn't suitable for production.

For information about Restrict access to Studio in development mode, refer to [Restrict access to Studio](../studio-guide/restrict-access.html).

## Switch from production mode to development mode

Switch from production mode to development mode in one of the following ways, applied in order of precedence:

1. Add the following configuration to `admin.json`, and restart PingGateway:

   ```json
   {
     "mode": "DEVELOPMENT",
     "adminConnector": {
       "host": "localhost",
       "port": 8085
     },
     "connectors": [
       {
         "port": 8080
       }
     ]
   }
   ```

   Source: [admin-dev.json](../_attachments/config/admin-dev.json)

2. Define an environment variable for the configuration token `ig.run.mode`, and then start PingGateway in the same terminal.

   If `mode` is not defined in `admin.json`, the following example starts an instance of PingGateway in development mode:

   * Linux

   * Windows

   ```console
   $ IG_RUN_MODE=development /path/to/ping-gateway-2026.3.0/bin/bin/start.sh
   ```

   ```none
   C:\IG_RUN_MODE=development
   C:\path\to\ping-gateway-2026.3.0\bin\start.bat %appdata%\OpenIG
   ```

3. Define a system property for the configuration token `ig.run.mode` when you start PingGateway.

   If `mode` is not defined in `admin.json` or an `IG_RUN_MODE` environment variable is not set, the following file starts PingGateway with the system property `ig.run.mode` to force development mode:

   * Linux

     `$HOME/.openig/env.sh`

   * Windows

     `%appdata%\OpenIG\env.sh`

   ```shell
   export JAVA_OPTS='-Dig.run.mode=development'
   ```

## Switch from development mode to production mode

Switch from development mode to production mode to prevent unwanted changes to the configuration.

1. In `$HOME/.openig/config/admin.json` (on Windows, `%appdata%\OpenIG\config` ), change the value of `mode` from `DEVELOPMENT` to `PRODUCTION`:

   ```json
   {
     "mode": "PRODUCTION"
   }
   ```

   Source: [admin.json](../_attachments/config/admin.json)

   The file changes the operating mode from development mode to production mode. For more information about the `admin.json` file, refer to [AdminHttpApplication (`admin.json`)](../reference/AdminHttpApplication.html).

   The value set in `admin.json` overrides any value set by the `ig.run.mode` configuration token when it is used in an environment variable or system property. For information about `ig.run.mode`, refer to [Configuration Tokens](../reference/ConfigTokens.html).

2. (Optional) Prevent routes from being reloaded after startup:

   * To prevent all routes in the configuration from being reloaded, add a `config.json` as described in the [Getting started with PingGateway](../getting-started/preface.html), and configure the `scanInterval` property of the main Router.

   * To prevent individual routes from being reloaded, configure the `scanInterval` of the routers in those routes.

     ```json
     {
       "type": "Router",
       "config": {
         "scanInterval": "disabled"
       }
     }
     ```

   Learn more in [Router](../reference/Router.html).

3. Restart PingGateway.

   When PingGateway starts up, the route endpoints aren't displayed in the logs, and aren't available. You can't access Studio on <http://ig.example.com:8085/studio>.
