Create Policies

Curation is based on a set of defined policies. To create a new curation policy, the Curation Admin must choose the remote repositories to which the policy applies, the policy condition (only 1 condition can be defined for each policy), and the action to be performed when the policy is violated. In addition, any exceptions to the policy can be defined in a waiver.

📘

This is a basic procedure outlining the steps to create a policy. In the How-Tos section we provide more scenario specific procedures for creating policies.

Do the following:

  1. Go to Administration > Curation > Policies Management.
  2. Click Create Policy and follow the wizard:
    • Step 1: Enter a name for the policy (max 50 characters, no special symbols).
    • Step 2: Define the scope:
      • Organization-wide: Applies to all curated repositories. You can optionally exclude specific repositories or groups.
      • Specific remote repositories: Select one or more curated remote repositories or package types to enforce the policy on.
      • Selected groups: Enforce the policy only on selected JFrog Platform Access groups. Requires Enforce policy on cached packages to be enabled.
    • Step 3: Choose a condition from the predefined or custom options.
      For a full detailed list of the conditions, see here.
      Examples:
    • Step 4 (optional): Add waivers to exclude specific packages or versions.
    • Step 5: Define the action as Block or Dry Run, set the behaviors for packages whose data is pending, and configure email notifications. The pending behaviors are Block for pending packages and Block for on demand pending packages.
    • Step 6 (optional): Enable Share with Federation to propagate this policy to all connected follower Instances via Curation Federation. This option is available only for policies with scope All Curated or Package Types. Share with Federation requires Curation Federation to be enabled on your platform.
      Learn more here.

Pending Catalog Update Behavior

A package that the JFrog Public Catalog hasn't ingested yet is in a Pending Catalog Update state. A package that is waiting for an On-Demand Curation scan is in a pending on-demand state. Each policy decides on its own whether to block or skip a package in these states.

In Step 5 of the wizard, under Pending Catalog update, select or clear the following independent checkboxes. Each one covers a different pending state, so selecting one doesn't affect the other.

CheckboxApplies toWhen a package is blocked
Block for pending packagesPackages that the JFrog Public Catalog hasn't ingested yet.Developers can request a waiver against the policy, or wait for the Catalog to analyze the package.
Block for on demand pending packagesPackages that are waiting for an On-Demand Curation scan.Developers must wait for the scan to complete and retry the download. Waivers are not available for this state.
  • Selected: The policy blocks the package while its data is pending.
  • Cleared: The policy is skipped while the data is pending, and the package is still evaluated against your other policies.

Only a block on a package pending a Catalog update can be waived. For more information, see Manage Waivers.

📘

Note

Both checkboxes are available only for policies whose action is Block. A Dry Run policy always skips both pending states and never blocks a package in a pending state.

How Pending Packages Are Evaluated

Each policy is evaluated independently. If one policy blocks a pending package and another skips it, the package is blocked only by the blocking policy. When the package is pending Catalog analysis, a waiver request is routed to the decision owners of that blocking policy.

Migration from Global Setting

This per-policy behavior replaces the platform-wide Resolution of Pending Package Updates setting. Existing policies are migrated automatically.

Previous global settingMigrated policy behavior
Always allow (Not recommended)Both options cleared to skip pending packages
Always blockBoth options selected to block pending packages
Allow if no blocking policy on remoteBoth options selected to block pending packages

Dry Run policies are migrated with both options cleared.

Policy Scope Options

When creating a policy, you choose how broadly or narrowly it should be applied. The available scope options are:

ScopeDescription
Organization-wideEnforces the policy across all current and future curated repositories. You can optionally exclude specific repositories or groups.
Specific remote repositoriesEnforces the policy only on the remote repositories you select.
Repositories package typeEnforces the policy on all repositories matching the selected package types (e.g., npm, Maven, PyPI).
Selected groupsEnforces the policy based on the requesting user's JFrog Platform Access group membership. Only users belonging to the selected groups are subject to the policy.

Apply Policy to a Group of Users

Curation supports scoping policies by JFrog Platform Access Groups, enabling organizations to apply different policy behaviors to different teams or user segments even when they share the same repositories.

📘

Group-based policy scope requires Enforce policy on cached packages to be enabled.

Navigate to Administration > Curation > Settings and enable Curation for Cached Packages before using this scope.

How It Works

When a user requests to download a package, Curation resolves the user's Access group memberships and evaluates whether the policy applies:

  • Selected groups (include): The policy is enforced only for users who belong to at least one of the selected groups. Users outside those groups are not affected.
  • Excluded groups: When using the Organization-wide scope, you can exclude specific groups. Users belonging to an excluded group are exempt from the policy, even if it would otherwise apply.

If a user belongs to both an included and an excluded group, the exclusion takes precedence and the policy is not enforced for that user.

When to Use Group-Based Scope

Group-based scoping is useful when a single repository serves multiple teams with different security requirements. For example:

GroupPolicy behavior
Dev Team AExcluded from the policy — allowed to download packages meeting internal maturity criteria
Dev Team BBlocked if the package contains a critical CVE
Compliance TeamRestricted to approved package versions only

Configuration

  1. Go to Administration > Curation > Policies Management.
  2. Click Create Policy.
  3. In the Scope step, select Selected groups.
  4. Choose one or more Access groups from the group selection modal.
  5. Continue with the remaining policy wizard steps (condition, waivers, actions).

To exclude groups from an Organization-wide policy:

  1. In the Scope step, select Organization-wide.
  2. Click Exclude Groups and select the groups to exempt.
📘

Limitation for NPM Packages When using Compliant Version together with group-based policy enforcement and cached package blocking, cache behavior may cause multiple groups to receive the same compliant version that was retrieved by the first user. Curation will still evaluate the download request and block it if it conflicts with the policies of the requesting group.


Did this page help you?