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.
- Install a plugin from the registry
- Install a specific plugin version
- List installed plugins
- Uninstall a plugin
- Uninstall a plugin without a confirmation prompt
- Set up a private plugins registry
- Install a plugin from a private registry
- Publish a plugin to a private registry
- Troubleshoot common plugin issues
Command Reference
The following table summarizes plugin commands.
| Command | Alias | Description |
|---|---|---|
jf plugin install | jf plugin i | Install or upgrade a plugin |
jf plugin uninstall | jf plugin ui | Uninstall a plugin |
jf plugin publish | jf plugin p | Publish 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:
-
Run:
jf plugin install <plugin-name>Where:
<plugin-name>: Name of the plugin in the JFrog CLI Plugins Registry
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
Downloadinglog 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 installdirectly 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:
-
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.0orv1.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.0orv1.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--versionor 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:
-
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:
-
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
CIenvironment variable is set totrue(and then removes the plugin). For scripted or CI runs, setCI=trueso 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—useCI=trueto be explicit. See Non-Interactive Uninstall.
macOS note
On macOS, the uninstall command may print
[Error]messages aboutsignal: killedorpermission deniedbefore 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:
-
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:
-
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.
-
Verify your Artifactory server configuration:
Check whether your JFrog Artifactory server is already configured in JFrog CLI.
jf config show -
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> --interactiveWhere:
<server-id>— Short identifier you choose for this server in JFrog CLI configuration.<artifactory-base-url>— Base URL of your JFrog Artifactory instance, such ashttps://acme.jfrog.io.
For example:
jf config add my-artifactory --url=https://acme.jfrog.io --interactive -
Set the plugins server environment variable:
Set the ID of the configured server as the value of the
JFROG_CLI_PLUGINS_SERVERenvironment variable:export JFROG_CLI_PLUGINS_SERVER=<server-id>Where:
<server-id>— Same server identifier you used withjf config add.
For example:
export JFROG_CLI_PLUGINS_SERVER=my-artifactory -
Set a custom repository name (optional):
To use a repository name other than
jfrog-cli-plugins, set the custom name as the value of theJFROG_CLI_PLUGINS_REPOenvironment 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 withJFROG_CLI_PLUGINS_SERVER.
Important. The
JFROG_CLI_PLUGINS_REPOenvironment variable can only be used together withJFROG_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:
-
Ensure
JFROG_CLI_PLUGINS_SERVER(and optionallyJFROG_CLI_PLUGINS_REPO) are set as described in Setting Up a Private Registry. -
Run:
jf plugin install <plugin-name>Where:
<plugin-name>: Plugin name as stored in your private registry
For example:
jf plugin install my-plugin -
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.0or1.0.0)
For example:
jf plugin install [email protected]
Publishing Plugins
To publish a plugin to your private registry:
-
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, includingvprefix 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_SERVERenvironment 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
latestdirectory 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.0or1.0.0—must match the registry and yourApp.Version)
Supported Architectures
Plugins are built for the following platforms.
The following table lists supported operating systems and CPU architectures.
| Platform | Architecture |
|---|---|
| Linux | amd64, arm64, arm, 386, s390x, ppc64, ppc64le |
| macOS | amd64, arm64 |
| Windows | amd64 |
Environment Variables Reference
The following table lists environment variables for JFrog CLI plugins.
| Variable | Description | Default | Required For |
|---|---|---|---|
JFROG_CLI_PLUGINS_SERVER | Configured Artifactory server ID from which to download/upload JFrog CLI Plugins | Official JFrog CLI Plugins Registry | publish (mandatory), install (optional) |
JFROG_CLI_PLUGINS_REPO | Name of the local repository to use for plugins | jfrog-cli-plugins | Optional (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:
-
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:
-
Set
JFROG_CLI_PLUGINS_SERVERto 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:
-
Verify the exact plugin name in the JFrog CLI Plugins Registry
-
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
vprefix) -
Verify the specified version exists in the registry
-
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:
-
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.5or1.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
chmod ... no such file or directory on macOSCause: 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:
-
Re-run the install command to download the binary again:
jf plugin install <plugin-name>Where:
<plugin-name>: Plugin you are installing
-
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 -
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
[Error] messages appear before every jf plugin commandCause: A previously installed plugin is corrupt, incompatible with the current JFrog CLI version, or blocked by the operating system.
To remove a broken plugin:
-
Uninstall the plugin:
jf plugin uninstall <plugin-name>Where:
<plugin-name>: Plugin that fails at startup
For example:
jf plugin uninstall rt-fs -
Reinstall it if needed:
jf plugin install <plugin-name>Where:
<plugin-name>: Same plugin name
-
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
[Error] messages on macOS during uninstallCause: 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:
-
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.
Updated 26 days ago
