Toolbox App Help

Offline remote development in the Toolbox App

You can configure the remote development in the Toolbox App for offline/air-gapped environments.

Toolbox Agent

The proper distribution of Toolbox Agent must be manually provided into the proper directory or must be accessible from either public or internal server. Currently, we require the Toolbox Agent to be exactly the same version as the Toolbox App. The full version of the Toolbox App is available in About section:

The URL to Toolbox Agent has the format: https://download.jetbrains.com/toolbox/agent/tbcli-{os}-{arch}-{build_number}.tar.gz

  • os: win32, linux, mac

  • arch: x64, aarch64

  • build_number is exactly the same as Toolbox App build version string

You have to construct the proper link based on your remote environment platform. Example link: https://download.jetbrains.com/toolbox/agent/tbcli-linux-x64-2.8.1.52155.tar.gz

SSH flow

The deployment process uses (among others) following environment variables:

  • cli_url - which should point to URL to download the correct version of Toolbox Agent

  • cli_sha256 - which should match the sha256 of Toolbox Agent archive

  • cli_dir_path - which should point to the directory of unpacked Toolbox Agent

Manual provision

In order to provision the artifacts manually, you have to override only cli_dir_path. The Agent distribution contains the Java runtime which will be automatically detected.

Internal repository / proxy server

If you want the Toolbox App to automatically download and extract the correct version of Toolbox Agent, you have to override the cli_url and cli_sha256 variables. You can construct the correct link using cli_version variable which is equal to build_number part of the distribution name.

Check the following example:

cli_url="https://my-internal-server.example.com/agents/tbcli-linux-x64-${cli_version}.tar.gz" cli_sha256="$(curl -sL https://my-internal-server.example.com/agents/tbcli-linux-x64-${cli_version}.tar.gz.sha256

How to provide variables

The only way to provide those environment variables is by using an env override file. There are two env override files:

  • System-wide

    /Library/Application Support/JetBrains/ToolboxSshDeploy/env.sh

    /etc/xdg/JetBrains/ToolboxSshDeploy/env.sh

    %ALLUSERSAPPDATA%/JetBrains/ToolboxSshDeploy/env.ps1

  • User-specific

    ~/Library/Application Support/JetBrains/ToolboxSshDeploy/env.sh

    If $XDG_CONFIG_HOME is set then $XDG_CONFIG_HOME/JetBrains/ToolboxSshDeploy/env.sh

    If $XDG_CONFIG_HOME is not set then ~/.config/JetBrains/ToolboxSshDeploy/env.sh

    %LOCALAPPDATA%/JetBrains/ToolboxSshDeploy/env.ps1

    The user-specific file will override the variables set in system-wide one.

Check the following example for the Unix content:

cli_dir_path=/mnt/tbcli

Check the following example for the Windows content:

$cli_dir_path=F:/tbcli

Custom connection flow

If your custom plugin uses AgentConnectionBasedEnvironmentContentsView, then the only requirement is to launch the proper version of Toolbox Agent on the remote environment and provide the connection to the Toolbox App.

IDEs

Besides the Toolbox App and Toolbox Agent, in an air-gapped environment one also has to provide the IDE on the remote side and the compatible client on the local side.

Remote side

On the remote side, you have to provide the full IDE.

Local side

On the local side, you can either provide a corresponding JetBrains Client or the same full IDE as on the remote side.

Locations

By default, the Toolbox App detects tools only in the following default paths:

/Applications, ~/Applications

/usr/local/bin, ~/.local/share/JetBrains/Toolbox/apps

%PROGRAMFILES%, %LOCALAPPDATA%\Programs

However, the Toolbox App provides a way to scan additional paths:

~/Library/Application Support/JetBrains/Toolbox/preinstalled

~/.local/share/JetBrains/Toolbox/preinstalled

%LOCALAPPDATA%/JetBrains/Toolbox/preinstalled

Each tool should be represented by one JSON file in the directory. The format of file is:

{ "installationDirectory": "/opt/RustRover", //mandatory "intellij_platform": { //optional "default_config_directories": { //optional "config": "/mnt/home/ide-config-example", //optional "logs": "/mnt/home/ide-logs", //optional "system": ..., //optional "plugins":"plugin_id" //optional } } }

Environment.json (only Toolbox Agent)

Toolbox Agent looks for environment.json file in:

~/Library/Application Support/JetBrains/Toolbox/environment.json

~/.local/share/JetBrains/Toolbox/environment.json

%LOCALAPPDATA%/JetBrains/Toolbox/environment.json

Feed

This step can be initially omitted. However, it might be needed in case of some problems:

  • The Toolbox App tries to download JetBrains Client for remote IDE even though there’s either a proper JetBrains Client or a full IDE on the local side.

  • Remote Development works but wrong config/system directories are used for either client or backend. (or plugins are missing).

In order to let the Toolbox App properly detect tools, you may need to provide the feed manually. Feed is a list of tools and information about them.

To be able to manually provide feed files, you have to start Toolbox with argument:

--offline-mode

In such mode, the Toolbox App searches for the offline config file at the following location:

~/Library/Application Support/JetBrains/Toolbox/offline_config.json

~/.local/share/JetBrains/Toolbox/offline_config.json

%LOCALAPPDATA%/JetBrains/Toolbox/offline_config.json

The offline config should have a format:

{ feedFiles: [ <path>, <path2>, ... ] }

The most recent feed file containing all IDEs is available under the following links:

https://download.jetbrains.com/toolbox/feeds/v1/public-feed.feed.xz.signed

https://download.jetbrains.com/toolbox/feeds/v1/public-feed-arm.feed.xz.signed

Notes

Check the following sample script that was used for preparing remote machine to test offline mode on Linux:

#!/bin/bash ps aux | grep tbcli | awk '{ print $2 }' | xargs kill -KILL rm -rf ~/.cache/Toolbox-CLI-dist rm -rf ~/.local/share/JetBrains/Toolbox rm -rf ~/.local/share/JetBrains/Toolbox-Dev rm -rf ~/.cache/JetBrains/Toolbox rm -rf ~/.cache/JetBrains/Toolbox-Dev rm -rf ~/.config/JetBrains/ToolboxSshDeploy mkdir -p ~/.local/share/JetBrains/Toolbox/preinstalled mkdir -p ~/.config/JetBrains/ToolboxSshDeploy echo 'cli_dir_path=/home/test/tbcli' > ~/.config/JetBrains/ToolboxSshDeploy/env.sh echo 'java_path=/home/test/jbr-21.0.3-linux-aarch64-b509.11' >> ~/.config/JetBrains/ToolboxSshDeploy/env.sh echo '{"installationDirectory": "/home/test/idea-IU-252.23892.409"}' > ~/.local/share/JetBrains/Toolbox/preinstalled/idea.json

Default paths

Remote paths

  • Toolbox CLI: ~/Library/Caches/JetBrains/Toolbox-CLI-dist/

  • JBR: ~/Library/Caches/JetBrains/Toolbox-CLI-dist/

  • Default IDE path: ~/Applications/

  • Environment: ~/Library/Application Support/JetBrains/Toolbox/environment.json

  • VM Options: ~/Library/Application Support/JetBrains/<IDE_Name>/ide_name.vmoptions

  • Toolbox CLI: ~/.cache/JetBrains/Toolbox-CLI-dist/

  • JBR: ~/.cache/JetBrains/Toolbox-CLI-dist/

  • Default IDE path: ~/.local/share/JetBrains/Toolbox/apps/

  • Environment: ~/.local/share/JetBrains/Toolbox/environment.json

  • VM Options: ~/.config/JetBrains/<IDE_Name>/ide_name.64.vmoptions

  • Toolbox CLI: %LOCALAPPDATA%\JetBrains\Toolbox-CLI-dist\

  • JBR: %LOCALAPPDATA%\JetBrains\Toolbox-CLI-dist\

  • Default IDE path: %LOCALAPPDATA%\Programs\

  • Environment: %LOCALAPPDATA%\JetBrains\Toolbox\environment.json

  • VM Options: %APPDATA%/JetBrains/<IDE_Name>/ide_name.64.exe.vmoptions

>

Local installations (JetBrains Client)

Client: ~/Library/Application Support/JetBrains/Toolbox/internal-tools/

Client: ~/.local/share/JetBrains/Toolbox/internal-tools/

Client: %LOCALAPPDATA%\JetBrains\Toolbox\internal-tools\

23 February 2026