JFrog CLI provides two modes of operation when running package managers: Wrapped Mode and Native Mode. This guide explains the differences between these modes and how to enforce fully native package-manager behaviour when needed.
Wrapped Mode
In Wrapped Mode, JFrog CLI intercepts certain package-manager commands to provide Artifactory-aware features, such as:
Automatic repository resolution
Injection of registry/source configuration into project files
Enhanced dependency resolution
Automatic build-info collection (when flags like
--build-name/--build-numberare supplied)Consistent authentication and resolution via JFrog CLI config
Wrapped Mode is the recommended flow for most Artifactory-integrated development workflows.
Native Mode
Native Mode disables all JFrog CLI wrapping and allows the package manager to run exactly as its upstream client would, while still providing build-info collection capabilities.
Enable Native Mode with:
export JFROG_RUN_NATIVE=true
When Native Mode is enabled:
No Artifactory configuration or repositories are injected into project files
No CLI YAML (
.jfrog/projects/*.yml) is appliedNo wrapped behaviour is executed (e.g., no automatic dependency updates, no metadata alterations)
The package manager uses its own configuration, as set through native package manager commands (e.g.,
poetry source add,poetry config,mvn settings.xml) or directly in project filesLock files and metadata remain untouched
Build-info is collected after the native command executes (when
--build-nameand--build-numberare provided)Build-info collection reads configuration directly from project files (e.g.,
pyproject.tomlfor Poetry,pom.xmlfor Maven)Execution is fully deterministic and aligned with the original client tooling
Note
Important: Even in Native Mode, you must use jf <package-manager> commands (e.g., jf poetry, jf mvn). The "native" refers to how the package manager itself executes, not that you bypass JFrog CLI entirely.
Supported Package Managers
Here are the package managers and their default execution modes:
Packages with Native Mode by Default
Helm
Conan
Packages that Do NOT Have Native Mode by Default (Run in Wrapped Mode)
These packages require manual steps to run in Native Mode:
Maven (Requires
export JFROG_RUN_NATIVE=true)Poetry (Requires
export JFROG_RUN_NATIVE=true)Gradle (Requires manual setup and native Gradle commands)
Docker (Requires manual setup, including
docker login, and native Docker commands)
When to Use Which Mode
Use Wrapped Mode when you want:
Integrated Artifactory resolution
Automatic build-info capture with minimal configuration
Managed repository configuration via JFrog CLI
Consistent, unified behaviour across machines and CI environments
Minimal configuration overhead
Use Native Mode when you need:
Strict lockfile fidelity — Zero modifications to lock files
Zero modification to project metadata (
pom.xml,pyproject.toml, lock files, etc.) by JFrog CLIFull compatibility with the upstream package manager's behaviour
Deterministic builds that must be fully reproducible across environments
Version-controlled repository configuration (e.g., repositories defined in
pyproject.tomlorpom.xml)Custom or advanced workflows configured directly in the package manager
Direct control over repository configuration in project files
FAQ: Wrapped Mode vs. Native Mode (Condensed)
- 1. What are the two modes for package managers in JFrog CLI?
- 2. What is Wrapped Mode?
- 3. What is Native Mode?
- 4. How do I enable Native Mode?
1. | What are the two modes for package managers in JFrog CLI? |
Wrapped Mode and Native Mode. | |
2. | What is Wrapped Mode? |
The recommended mode. JFrog CLI provides Artifactory features like automatic repository resolution and build-info collection. | |
3. | What is Native Mode? |
It disables JFrog CLI wrapping. It is used for strict lockfile fidelity and zero modification to project metadata. | |
4. | How do I enable Native Mode? |
Set the environment variable: |