Content Packs Structure
For better separation between Content artifacts from different use cases and Partners we use a directory structure called
Content Packs. Each
Content Pack behaves like a mini content repo. It contains all relevant content items within its directory.
For instance a pack for CortexXDR will look as can be seen in the Content Repository Packs/CortexXDR.
To generate a new pack make sure to use:
demisto-sdk init --pack. Detailed command instructions are available here.
Note: The Content repo is going through a transition phase to move all content into packs. During this phase you will see some Content artifacts are still not maintained within Packs. All new Content should be maintained via Packs.
All the directories within the pack are the representation of all the possible entities possible in Content. And the pack will be located in the Content repo under
The pack directory contains numerous configuration files used for metadata and documentation.
Please note that all of the following files will be created using the
demisto-sdk init --pack, and some of them
will have to be filled by you. An explanation for each of them will be provided below.
This file contains all the relevant metadata about the pack.
The following fields are populated in the pack metadata:
|Field Name||Field Type||Field Description|
|name||String||The pack name. Usually it's the name of the integration the pack contains (e.g. CortexXDR) or the use-case implemented in it.|
|description||String||A short overview of the pack.|
|support||String||Should be one of the following:|
1. xsoar - Supported by Cortex XSOAR.
2. partner - Supported by a Cortex XSOAR partner.
3. developer - Supported by an independent developer/organization.
4. community - Not officialy supported, but available for the community to use.
|currentVersion||String||The pack version, in the format of |
|author||String||The name of the organization (for partners) or developer (for individual contributions) which developed the integration.|
|url||String||The URL to which users should refer to in case of support needed regarding the pack. Usually is the organization support URL or the developer GitHub repository. If left empty the default support site presented to users will be the Live Community site.|
|videos||String||The Youtube video link of the pack.|
|String||The email address to which users should reach out to in case of support needed regarding the pack.|
|categories||List||The use-case categories which are implemented in the pack. Usually set by the integration, which included in the pack category. Should be one of the following:|
1. Analytics & SIEM
5. Network Security
6. Vulnerability Management
7. Case Management
8. Forensics & Malware Analysis
9. IT Services
10. Data Enrichment & Threat Intelligence
14. Email Gateway
|tags||List||Tags to be attached to the pack on Cortex XSOAR marketplace.|
|created||String||Pack creation time in ISO 8601 format - YYYY-MM-DDTHH:mm:ssZ, e.g. 2020-01-25T10:00:00Z|
|useCases||List||Use-cases implemented by the pack.|
|keywords||List||List of strings by which the pack can be found in Cortex XSOAR marketplace.|
|marketplaces||List||List of marketplaces in which the pack can be found (XSOAR XSIAM).|
|hidden||Boolean||(Optional) Whether to hide the pack from Marketplace. Updates to this pack will not be published to Marketplace and the pack cannot be installed.|
|eulaLink||String||(Optional - Premium packs only) URL referencing the pack license agreement, will appear under the 'Disclaimer' section in the pack details. Non-premium packs are hosted in our open source content repo and will be subject to an MIT License.|
|price||String||(Optional - Premium packs only) The pack price in Palo Alto points.|
|dependencies||Dictionary||(Optional) An object that describes the content packs that the pack is dependant on. Should be kept empty on pack creation, as it is calculated by Cortex XSOAR content infrastructure.|
|displayedImages||List||(Optional) Images to be displayed in Cortex XSOAR marketplace. Should be kept empty on pack creation, as it is calculated by Cortex XSOAR content infrastructure.|
|githubUser||List||(Optional) List of Github usernames to receive notification in the PR in case pack files were modified.|
|devEmail||List||(Optional) List of emails to receive notification in case contributed pack files were modified.|
|certification||String||(Optional) If the pack is certifed the value of this fields should be "certified"|
|itemPrefix||String||(Optional) String to overwrite pack fields prefix. You can specify an alternative string instead of the default pack name enforced by the validation process.|
Pack metadata contents for example:
A supported partner pack metadata contents for example:
#Content Packs Versioning
Pack versions have the following format MAJOR.MINOR.REVISION:
- Revision when you make backwards compatible bug fixes.
- Minor when you add functionality in a backwards compatible manner.
- Major when you make incompatible API changes or revamping the pack by adding to it a lot of new backwards compatible functionality.
The file contains a general explanation for the pack and you are free to add any information relevant for the pack. For more details refer to the Pack Documentation page.
This file will be used while running the
demisto-sdk secrets(explanation), we will determine the file and will
use it as an allow list of approved words for your PR.
Note: We use
demisto-sdk secrets as part of our pre-commit hook to check that possible secrets in the PR aren't exposed to a public repository.
This file allows ignoring linter errors while lint checking and ignoring tests in the test collection.
To add ignored tests/linter errors in a file, first, add the file name to the .pack-ignore in this format
On the following line add
ignore= flag, with one or more comma-separated values:
auto-test- ignore test file in the build test collection.
linter codee.g. IN126 - ignore linter error codes.
You may choose to show the pack author image such that it will be displayed in the marketplace under the PUBLISHER section when viewing the pack details. The image should be saved in the pack root level (i.e. content/packs/MyPackName/Author_image.png), make sure to stick with this file name for the image to appear. The image size should be up to 4kb and in the dimensions of 120x50.
For Partners, this image is mandatory and is validated during the build. If the file is missing, a validation will fail with the following error:
In case file does not exist, the pack author name will be displayed in text.
If you are contributing to an existing pack, you can add a CONTRIBUTORS.json file to the root of the pack in the event that one does not already exist. The file should contain a list of strings including your name.