JFrog CLI Plugins

JFrog CLI plugins enhance the functionality of JFrog CLI to meet specific user 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 JFrog CLI's Plugins Registry. Developers are encouraged to create plugins and share them publicly with the community. When a plugin is included in the registry, it becomes publicly available and can be installed using JFrog CLI.

📘

Requirements

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

Command Reference

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.
📘

Note

The Downloading log line appears twice — this is expected CLI behavior.

This command will install 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 will block execution after download. See Troubleshooting for steps to resolve this.

📘

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:

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 with a v prefix (for example, v1.1.5)

    For example:

    jf plugin install [email protected]

Expected output:

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

Note

If no version is specified, the latest available version will be installed. Version strings must include a v prefix (for example, v1.1.5 not 1.1.5). The success message does not include the version number. To confirm the installed version, check the binary in ~/.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 run in an interactive terminal, this command prompts for confirmation before uninstalling:

Uninstall plugin 'rt-fs'? (y/n): y
📘

Non-interactive environments

When stdin is not a TTY (for example, in scripts or CI pipelines), the uninstall proceeds without prompting and removes the plugin silently (exit code 0, no output). If you want to be explicit about non-interactive intent, use CI=true (see Non-Interactive Uninstall below). Do not rely on the prompt as a safeguard in scripted workflows.

📘

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. 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 Artifactory server, create a local generic repository named jfrog-cli-plugins.

    In Artifactory UI: Administration → Repositories → Local → Create, select "Generic" as the package type.

  2. Verify your Artifactory server configuration:

    Check if your Artifactory server is already configured in JFrog CLI:

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

    If your server is not configured, add it using:

    jf c add <server-id> --url=<ArtifactoryURL> --interactive

    Where:

    • <server-id>: Short ID you choose for this server in JFrog CLI configuration
    • <ArtifactoryURL>: Base URL of your Artifactory instance (for example, https://acme.jfrog.io)

    For example:

    jf c 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 ID you used with jf c 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-repo-name>

    Where:

    • <custom-repo-name>: Local generic repository name on the server (must be used together with JFROG_CLI_PLUGINS_SERVER)

    Important: The JFROG_CLI_PLUGINS_REPO environment variable can only be used in conjunction with JFROG_CLI_PLUGINS_SERVER. It cannot be set 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 with v prefix (for example, v1.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 will fail 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
  • Include a v prefix (for example, v1.0.0, v2.1.3)

Supported Architectures

Plugins are built for the following platforms:

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

Environment Variables Reference

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 fix a 404 when installing:

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

  2. If specifying a version, ensure it uses the v prefix (for example, v1.1.5 not 1.1.5)

  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 with v prefix (for example, v1.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 above. Plugins must be built for your specific OS 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

Get started by installing your first plugin from the registry.