---
schema_version: "1"
id: 65346786e4de0408687175290f2db9616b7f4aa1720d4bb676e7eec2d440b5fe
title: Build an Extension Package for DevOps Center
collection: admin
version: current
locale: en-us
portal_url: https://docs.salesforce.com/admin/current/en-us/platform/264-0-0/devops_center_partners_extension_packages.md
canonical_url: https://help.salesforce.com/s/articleView?id=platform.devops_center_partners_extension_packages.htm&release=264.0.0&type=5
source_site: help.salesforce.com
content_type: documentation
content_hash: c04b13c41eefd4ba4fd34823b87649daf0474795dc1ab13bceaf045139d09819
description: Salesforce partners and ISVs can use scratch orgs as their dev environments when building managed second-generation (2GP) extension packages that expand the functionality of DevOps Center. An extension is any package, component, or set of components that adds to the functionality of a managed package. An extension requires that the base managed package is installed in the org.
products:
  - Salesforce Platform
release: "264"
---
# Build an Extension Package for DevOps Center

Salesforce partners and ISVs can use scratch orgs as their dev environments when building managed second-generation (2GP) extension packages that expand the functionality of DevOps Center. An extension is any package, component, or set of components that adds to the functionality of a managed package. An extension requires that the base managed package is installed in the org.

### Required Editions

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small permission">
        <colgroup>
          <col style="width:50%">
          <col style="width:50%">
        </colgroup>
        <thead class="slds-text-title_caps ">
          <tr class="">
            <th scope="colgroup" class="slds-cell-wrap" colspan="2" style="text-align:center;vertical-align:top;" id="d6149e31">User Permissions
              Needed</th>
          </tr>
        </thead>
        <tbody>
          <tr class="">
            <td data-label="User Permissions Needed" class="slds-cell-wrap" style="vertical-align:top;" headers="d6149e31 ">To install and configure DevOps Center:</td>
            <td class="slds-cell-wrap" style="vertical-align:top;" headers="d6149e31 ">“Download AppExchange Packages”</td>
          </tr>
          <tr class="">
            <td data-label="User Permissions Needed" class="slds-cell-wrap" style="vertical-align:top;" headers="d6149e31 ">To create packages:</td>
            <td class="slds-cell-wrap" style="vertical-align:top;" headers="d6149e31 ">“Create AppExchange Packages”</td>
          </tr>
          <tr class="">
            <td data-label="User Permissions Needed" class="slds-cell-wrap" style="vertical-align:top;" headers="d6149e31 ">To upload packages:</td>
            <td class="slds-cell-wrap" style="vertical-align:top;" headers="d6149e31 ">“Upload AppExchange Packages”</td>
          </tr>
        </tbody>
      </table>

Use this high-level work flow as a guide for using a scratch org as your development environment when building an extension package.

1. Enable DevOps Center in your Dev Hub org.
2. Update the scratch org definition file to enable DevOps Center, and then use this definition file when creating scratch orgs and package versions.
    
    ```
    {
        "orgName": "Acme",
        "edition": "Enterprise",
        "features": ["DevOpsCenter"],
        "settings": {
            "devHubSettings": {
                "enableDevOpsCenterGA": true
                }  
            }  
        }
    ```
    
    If creating a scratch org based on an org shape, you still have to include the DevOps Center feature and settings in the scratch org definition file for legal reasons as part of the DevOps Center terms and conditions.
    
    ```
    {
        "orgName": "Acme",
        "sourceOrg": "00DB1230400Ifx5",
        "features": ["DevOpsCenter"],
        "settings": {
            "devHubSettings": {
                "enableDevOpsCenterGA": true
                }  
            }  
        }
    ```
3. Update the sfdx\_project.json file to include the DevOps Center base package as a dependency.
    
    You can also reference the definition file or indicate it on the command line later during package version creation. See the example files in [Project Configuration File for a Second-Generation Managed Package](https://developer.salesforce.com/docs/atlas.en-us.pkg2_dev.meta/pkg2_dev/sfdx_dev2gp_config_file.htm) in the Second-Generation Managed Packaging Developer Guide.
4. In the scratch org, from the DevOps Center Setup page, install the DevOps Center package.
    
    To use Salesforce CLI to install the package in additional scratch orgs, note the package ID, which starts with `04t`.
5. After you have finished developing your extension package, use Salesforce CLI to create a package.
6. When you’re ready to test or release the package, create a package version.
    
    If you didn’t include the definition file in the sfdx\_project.json project file, be sure to indicate it on the command line. For example:
    
    ```
    sf package version create --package "Agile Addon " --definition-file config/project-scratch-def.json \
    --installation-key test1234 --wait 10 
    ```

#### See Also

- [_DevOps Center Developer Guide_](https://developer.salesforce.com/docs/atlas.en-us.devops_center_dev.meta/devops_center_dev/devops_center_dev_overview.htm)
- [_First-Generation Managed Packaging Developer Guide_: Publishing Extensions to Managed Packages](https://developer.salesforce.com/docs/atlas.en-us.pkg1_dev.meta/pkg1_dev/publish_extensions.htm)
- [_Salesforce DX Developer Guide_: Scratch Orgs](https://developer.salesforce.com/docs/atlas.en-us.sfdx_dev.meta/sfdx_dev/sfdx_dev_scratch_orgs.htm)
- [_Second-Generation Managed Packaging Developer Guide_: Second-Generation Managed Packages](https://developer.salesforce.com/docs/atlas.en-us.pkg2_dev.meta/pkg2_dev/sfdx_dev_dev2gp.htm)