JFrog CLI Plugins

JFrog CLI plugins extend JFrog CLI to meet individual and organization needs. The source code of a plugin is maintained as an open-source Go project on GitHub. All public plugins are registered in the JFrog CLI Plugins Registry. You can create plugins and share them publicly with the community. When a plugin is included in the registry, it becomes publicly available, and you can install it with JFrog CLI.

📘

Requirements

JFrog CLI version 1.41.1 or higher is required for plugin support.

Command Reference

The following table summarizes plugin commands.

CommandAliasDescription
jf plugin installjf plugin iInstall or upgrade a plugin
jf plugin uninstalljf plugin uiUninstall a plugin
jf plugin publishjf plugin pPublish a plugin to a private registry

Installing Plugins

A plugin included in JFrog CLI's Plugins Registry can be installed from the command line.

To install a plugin from the public registry:

  1. Run:

    jf plugin install <plugin-name>

    Where:

    For example:

    jf plugin install rt-fs

Expected output:

[Info] Downloading: rt-fs
[Info] Downloading: rt-fs
[Info] Plugin downloaded successfully.
📘

Duplicate log line

The Downloading log line appears twice. This behavior is expected from JFrog CLI.

This command installs the plugin from the official public registry by default.

📘

macOS note

Plugin binaries must be notarized by Apple to run on macOS. If a plugin is not notarized, macOS Gatekeeper blocks execution after download. For more information, see Troubleshooting.

📘

Upgrading or switching versions

If the plugin is already installed, do not run jf plugin install directly over it. Doing so can corrupt the installation. The CLI kills the existing binary during a startup signature check, then fails to write the new binary, and ultimately deletes the plugin directory. Always uninstall first, then install the target version.

jf plugin uninstall <plugin-name>
jf plugin install <plugin-name>@<new-version>

Installing a Specific Version

To install a specific version of a plugin:

  1. Run:

    jf plugin install <plugin-name>@<version>

    Where:

    • <plugin-name>: Plugin name from the registry
    • <version>: Version string as published for that plugin in the registry (for example, 1.0.0 or v1.1.5—the format must match the version path in the registry; JFrog CLI’s built-in help uses the form [email protected])

    For example:

    jf plugin install [email protected]

Expected output:

[Info] Downloading: rt-fs
[Info] Downloading: rt-fs
[Info] Plugin downloaded successfully.
📘

Version strings and confirmation

If you do not specify a version, the latest available version is installed. The segment after @ is passed to the registry as given (for example, 1.0.0 or v1.1.5); it must match how the version is published. The success message does not include the version number. To confirm the installed version, run the plugin with --version or inspect the binary under ~/.jfrog/plugins/<plugin-name>/bin/.

Plugin Installation Location

Installed plugins are stored in the following directory structure:

~/.jfrog/plugins/<plugin-name>/bin/<plugin-executable>

If a plugin includes external resources, they are stored in:

~/.jfrog/plugins/<plugin-name>/resources/

Checking Installed Plugins

JFrog CLI does not provide a jf plugin list command.

To list installed plugins:

  1. List the plugins directory:

    ls ~/.jfrog/plugins/

Each subdirectory corresponds to an installed plugin. The installed binary is located at ~/.jfrog/plugins/<plugin-name>/bin/<plugin-name>.

Uninstalling Plugins

To uninstall a plugin:

  1. Run:

    jf plugin uninstall <plugin-name>

    Where:

    • <plugin-name>: Name of the plugin to remove

    For example:

    jf plugin uninstall rt-fs

When CI is not set to true, the command asks for confirmation before uninstalling. The prompt text includes:

Are you sure you want to uninstall plugin: "rt-fs"?
📘

Non-interactive environments

The uninstall command skips the confirmation prompt when the CI environment variable is set to true (and then removes the plugin). For scripted or CI runs, set CI=true so the command does not wait for input. If you are not in CI, behavior when stdin is not a TTY depends on the CLI’s confirmation logic—use CI=true to be explicit. See Non-Interactive Uninstall.

📘

macOS note

On macOS, the uninstall command may print [Error] messages about signal: killed or permission denied before completing. These errors occur when JFrog CLI attempts to load the plugin binary to register its commands, and macOS Gatekeeper blocks execution. The errors do not indicate a failure. The plugin is removed successfully if no other error output appears. For more information, see Startup [Error] messages on macOS during uninstall in Troubleshooting.

Non-Interactive Uninstall

To uninstall a plugin without a confirmation prompt:

  1. Run:

    CI=true jf plugin uninstall <plugin-name>

    Where:

    • <plugin-name>: Name of the plugin to remove

    For example:

    CI=true jf plugin uninstall rt-fs

Use this pattern in CI/CD environments or scripts where interactive prompts should be avoided.

Private Plugins Registries

In addition to the public official JFrog CLI Plugins Registry, JFrog CLI supports publishing and installing plugins to and from private registries. A private registry can be hosted on any Artifactory server and uses a local generic Artifactory repository for storing the plugins.

Setting Up a Private Registry

To set up a private plugins registry:

  1. Create a local generic repository:

    On your JFrog Artifactory server, create a local generic repository named jfrog-cli-plugins.

    In the JFrog Artifactory user interface, open Administration, Repositories, Local, then Create, and select Generic as the package type.

  2. Verify your Artifactory server configuration:

    Check whether your JFrog Artifactory server is already configured in JFrog CLI.

    jf config show
  3. Configure your Artifactory instance (if needed):

    If your server is not configured, add it using the following command.

    jf config add <server-id> --url=<artifactory-base-url> --interactive

    Where:

    • <server-id> — Short identifier you choose for this server in JFrog CLI configuration.
    • <artifactory-base-url> — Base URL of your JFrog Artifactory instance, such as https://acme.jfrog.io.

    For example:

    jf config add my-artifactory --url=https://acme.jfrog.io --interactive
  4. Set the plugins server environment variable:

    Set the ID of the configured server as the value of the JFROG_CLI_PLUGINS_SERVER environment variable:

    export JFROG_CLI_PLUGINS_SERVER=<server-id>

    Where:

    • <server-id> — Same server identifier you used with jf config add.

    For example:

    export JFROG_CLI_PLUGINS_SERVER=my-artifactory
  5. Set a custom repository name (optional):

    To use a repository name other than jfrog-cli-plugins, set the custom name as the value of the JFROG_CLI_PLUGINS_REPO environment variable.

    export JFROG_CLI_PLUGINS_REPO=<custom-repository-name>

    Where:

    • <custom-repository-name> — Local generic repository name on the server. You must set this together with JFROG_CLI_PLUGINS_SERVER.

    Important. The JFROG_CLI_PLUGINS_REPO environment variable can only be used together with JFROG_CLI_PLUGINS_SERVER. You cannot set it independently.

The jf plugin install command will now install plugins stored in your private registry.

Installing from a Private Registry

To install a plugin from a private registry:

  1. Ensure JFROG_CLI_PLUGINS_SERVER (and optionally JFROG_CLI_PLUGINS_REPO) are set as described in Setting Up a Private Registry.

  2. Run:

    jf plugin install <plugin-name>

    Where:

    • <plugin-name>: Plugin name as stored in your private registry

    For example:

    jf plugin install my-plugin
  3. To install a specific version, run:

    jf plugin install <plugin-name>@<version>

    Where:

    • <plugin-name>: Plugin name
    • <version>: Version as published (for example, v1.0.0 or 1.0.0)

    For example:

    jf plugin install [email protected]

Publishing Plugins

To publish a plugin to your private registry:

  1. From the root directory of the plugin's source code, run:

    jf plugin publish <plugin-name> <plugin-version>

    Where:

    • <plugin-name>: Plugin name (must match your plugin project)
    • <plugin-version>: Version to publish, including v prefix if your plugin uses one (for example, v1.0.0)

    For example:

    jf plugin publish my-plugin v1.0.0
❗️

Important

The JFROG_CLI_PLUGINS_SERVER environment variable is mandatory for the publish command. The publish command fails if this variable is not set.

This command:

  • Builds the plugin's source code for all supported operating systems and architectures
  • Uploads all binaries to the configured private registry
  • Copies the version to the latest directory for default installations

Version Requirements

Plugin versions must:

  • Follow semantic versioning format
  • Match semantic versioning and your plugin’s published layout (for example, v1.0.0 or 1.0.0—must match the registry and your App.Version)

Supported Architectures

Plugins are built for the following platforms.

The following table lists supported operating systems and CPU architectures.

PlatformArchitecture
Linuxamd64, arm64, arm, 386, s390x, ppc64, ppc64le
macOSamd64, arm64
Windowsamd64

Environment Variables Reference

The following table lists environment variables for JFrog CLI plugins.

VariableDescriptionDefaultRequired For
JFROG_CLI_PLUGINS_SERVERConfigured Artifactory server ID from which to download/upload JFrog CLI PluginsOfficial JFrog CLI Plugins Registrypublish (mandatory), install (optional)
JFROG_CLI_PLUGINS_REPOName of the local repository to use for pluginsjfrog-cli-pluginsOptional (requires JFROG_CLI_PLUGINS_SERVER)

Troubleshooting

Error: JFROG_CLI_PLUGINS_REPO should not be provided without JFROG_CLI_PLUGINS_SERVER

Cause: You set JFROG_CLI_PLUGINS_REPO without also setting JFROG_CLI_PLUGINS_SERVER.

To resolve this error:

  1. Set both variables together (or unset JFROG_CLI_PLUGINS_REPO):

    export JFROG_CLI_PLUGINS_SERVER=my-server
    export JFROG_CLI_PLUGINS_REPO=my-custom-repo

Error: the JFROG_CLI_PLUGINS_SERVER env var is mandatory for the 'publish' command

Cause: The publish command requires a configured Artifactory server.

To resolve this error:

  1. Set JFROG_CLI_PLUGINS_SERVER to your configured server ID, then publish:

    export JFROG_CLI_PLUGINS_SERVER=my-server
    jf plugin publish my-plugin v1.0.0

Error: 404 when installing a plugin

Cause: The plugin doesn't exist in the registry, or the specified version is not available.

To resolve a 404 when installing:

  1. Verify the exact plugin name in the JFrog CLI Plugins Registry

  2. If specifying a version, ensure the string matches the published version in the registry (try the same form as in the Plugins Registry, for example with or without a v prefix)

  3. Verify the specified version exists in the registry

  4. Try installing without a version to get the latest:

    jf plugin install <plugin-name>

    Where:

    • <plugin-name>: Registry name of the plugin

Error: plugin already exists locally

Cause: The plugin with the requested version is already installed.

To resolve this error:

  1. Uninstall the existing plugin, then install the desired version:

    jf plugin uninstall <plugin-name>
    jf plugin install <plugin-name>@<version>

    Where:

    • <plugin-name>: Installed plugin name
    • <version>: Target version as published (for example, v1.1.5 or 1.1.5)

    For example:

    jf plugin uninstall rt-fs
    jf plugin install [email protected]

Error: no compatible plugin architecture was found

Cause: Your system architecture is not supported by the plugin.

To resolve this error: Check the supported architectures table in Supported Architectures. Plugins must be built for your specific operating system and architecture combination.

Error: chmod ... no such file or directory on macOS

Cause: macOS Gatekeeper is preventing the downloaded plugin binary from being made executable. The binary is downloaded successfully but the OS security layer blocks the chmod operation, causing the install to fail and the plugin directory to be removed.

To work around Gatekeeper on macOS:

  1. Re-run the install command to download the binary again:

    jf plugin install <plugin-name>

    Where:

    • <plugin-name>: Plugin you are installing
  2. Immediately after the download completes (before the error cleanup), clear the quarantine attribute and set execute permissions:

    xattr -d com.apple.quarantine ~/.jfrog/plugins/<plugin-name>/bin/<plugin-name>
    chmod +x ~/.jfrog/plugins/<plugin-name>/bin/<plugin-name>

    Where:

    • <plugin-name>: Same plugin name as in step 1

    For example:

    xattr -d com.apple.quarantine ~/.jfrog/plugins/rt-fs/bin/rt-fs
    chmod +x ~/.jfrog/plugins/rt-fs/bin/rt-fs
  3. Contact the plugin author to request that they notarize their macOS binaries, which permanently resolves the issue without manual intervention.

Startup [Error] messages appear before every jf plugin command

Cause: A previously installed plugin is corrupt, incompatible with the current JFrog CLI version, or blocked by the operating system.

To remove a broken plugin:

  1. Uninstall the plugin:

    jf plugin uninstall <plugin-name>

    Where:

    • <plugin-name>: Plugin that fails at startup

    For example:

    jf plugin uninstall rt-fs
  2. Reinstall it if needed:

    jf plugin install <plugin-name>

    Where:

    • <plugin-name>: Same plugin name
  3. If the error persists after uninstalling, verify that the plugin directory has been fully removed:

    ls ~/.jfrog/plugins/

Startup [Error] messages on macOS during uninstall

Cause: On macOS, JFrog CLI attempts to execute every installed plugin binary at startup to register its commands. If the binary is blocked by macOS Gatekeeper (quarantine attribute set on downloaded files), the OS sends signal: killed on the first attempt and returns permission denied on subsequent attempts. These errors appear even when running jf plugin uninstall.

This is not a failure. The uninstall operation completes successfully despite the error output.

To confirm the plugin was removed:

  1. List the plugins directory:

    ls ~/.jfrog/plugins/

If you see the plugin directory is gone, the uninstall succeeded. If you need to suppress these errors permanently, ask the plugin author to notarize their macOS binaries. Until then, the errors are cosmetic and can be safely ignored when running jf plugin uninstall.


What’s Next

To install your first plugin, see Install JFrog CLI Plugins.