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.
- 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
| 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.
Note
The
Downloadinglog 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 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: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 with avprefix (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
vprefix (for example,v1.1.5not1.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:
-
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 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 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. 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 Artifactory server, create a local generic repository named
jfrog-cli-plugins.In Artifactory UI: Administration → Repositories → Local → Create, select "Generic" as the package type.
-
Verify your Artifactory server configuration:
Check if your Artifactory server is already configured in JFrog CLI:
jf c show -
Configure your Artifactory instance (if needed):
If your server is not configured, add it using:
jf c add <server-id> --url=<ArtifactoryURL> --interactiveWhere:
<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 -
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 ID you used withjf c 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-repo-name>Where:
-
<custom-repo-name>: Local generic repository name on the server (must be used together withJFROG_CLI_PLUGINS_SERVER)
Important: The
JFROG_CLI_PLUGINS_REPOenvironment variable can only be used in conjunction withJFROG_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:
-
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 withvprefix (for example,v1.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 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
latestdirectory for default installations
Version Requirements
Plugin versions must:
- Follow semantic versioning format
- Include a
vprefix (for example,v1.0.0,v2.1.3)
Supported Architectures
Plugins are built for the following platforms:
| Platform | Architecture |
|---|---|
| Linux | amd64, arm64, arm, 386, s390x, ppc64, ppc64le |
| macOS | amd64, arm64 |
| Windows | amd64 |
Environment Variables Reference
| 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 fix a 404 when installing:
-
Verify the exact plugin name in the JFrog CLI Plugins Registry
-
If specifying a version, ensure it uses the
vprefix (for example,v1.1.5not1.1.5) -
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 withvprefix (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
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 3 days ago
