{ "title": "Landscape data JSON Schema", "type": "object", "patternProperties": { "^(categories|landscape)": { "title": "List of categories in the landscape", "type": "array", "items": { "type": "object", "properties": { "name": { "title": "Name of the category", "type": "string", "minLength": 1, "examples": [ "Category 1", "Category 2" ] }, "subcategories": { "title": "List of subcategories in this category", "type": "array", "items": { "type": "object", "properties": { "name": { "title": "Name of the subcategory", "type": "string", "minLength": 1, "examples": [ "Subcategory 1", "Subcategory 2" ] }, "items": { "title": "List of items in this subcategory", "type": "array", "items": { "type": "object", "properties": { "name": { "title": "Name of the item", "type": "string", "examples": [ "Item 1", "Item 2" ] }, "homepage_url": { "title": "Homepage URL", "type": "string", "format": "uri", "examples": [ "https://homepage.url" ] }, "logo": { "title": "File name of the logo", "description": "The provided logo file is expected to be located in the landscape logos path (i.e. `hosted-logos`). URLs are not supported, it must be a file name. The logo file must be an SVG file.", "type": "string", "pattern": "^.*\\.(svg|gif|jpe?g|tiff?|png|webp|bmp)$", "examples": [ "logo.svg" ] }, "description": { "title": "Description of the item", "description": "When the description is not provided, the primary repository's description or the organization's description from Crunchbase will be used (in that order). This description will be indexed to power the search feature.", "type": "string", "examples": [ "This is the description of item" ] }, "second_path": { "title": "Alternative `category / subcategory` where this item should be listed in", "description": "Sometimes we may want to list an item in multiple categories or subcategories. This field allows specifying additional locations for an item without having to duplicate it.", "type": "array", "items": { "type": "string", "pattern": "^.* / .*$", "examples": [ "Category 2 / Subcategory 2-1", "Category 2 / Subcategory 2-2" ] } }, "project": { "title": "Maturity of the project", "description": "This field is only expected on items that represent a project that belongs to the foundation. The maturity can be any string, but there are some values that have a special meaning: `graduated, incubating, sandbox` -> when used in combination with the date they moved to that state (set in `extra` field), a special progress bar will be displayed in the item's details view, or `archived` -> items in this state will be grayed out", "type": "string", "examples": [ "graduated", "incubating", "sandbox", "archived" ] }, "joined": { "title": "Date at which the member joined the foundation", "description": "This field is only expected on items that represent a foundation's member", "type": "string", "format": "date", "examples": [ "2025-01-01" ] }, "repo_url": { "title": "URL of the primary repository", "description": "Some extra information will be collected for repositories hosted in GitHub.", "type": "string", "format": "uri", "examples": [ "https://github.com/owner/repo" ] }, "branch": { "title": "Branch to use when collecting information for the primary repository", "type": "string", "examples": [ "main", "master" ] }, "license": { "title": "Primary repository license", "description": "This information is usually collected from GitHub, but it can be overridden here. The license must be a valid SPDX license identifier (more info: https://spdx.org/licenses/)", "type": "string", "examples": [ "Apache License 2.0", "MIT License" ] }, "additional_repos": { "title": "List of additional repositories", "type": "array", "items": { "type": "object", "properties": { "repo_url": { "title": "URL of the repository", "type": "string", "format": "uri", "examples": [ "https://github.com/owner/repo" ] }, "branch": { "title": "Branch to use when collecting information for the repository", "type": "string", "examples": [ "main", "master" ] }, "license": { "title": "Repository license", "description": "This information is usually collected from GitHub, but it can be overridden here. The license must be a valid SPDX license identifier (more info: https://spdx.org/licenses/)", "type": "string", "examples": [ "Apache License 2.0", "MIT License" ] } }, "required": [ "repo_url" ] } }, "crunchbase": { "title": "Crunchbase URL of the organization this item belongs to", "type": "string", "format": "uri", "pattern": "^https?://(www\\.)?crunchbase.com/organization/.*", "examples": [ "https://www.crunchbase.com/organization/org-name" ] }, "twitter": { "title": "Twitter URL", "type": "string", "pattern": "^https?://(twitter|x).com/.*", "examples": [ "https://twitter.com/org-name", "https://x.com/org-name" ] }, "url_for_bestpractices": { "title": "OpenSSF best practices URL", "type": "string", "format": "uri", "examples": [ "https://www.bestpractices.dev/en/projects/1234" ] }, "enduser": { "title": "Indicate if the item corresponds to an end user", "type": "boolean" }, "extra": { "title": "Extra information about the item", "type": "object", "properties": { "accepted": { "title": "Date at which the project was accepted in the foundation", "description": "This field is only expected on items that represent a foundation's project", "type": "string", "format": "date", "examples": [ "2025-01-01" ] }, "annotations": { "title": "List of user-defined annotations", "description": "Annotations can be used to add custom metadata to landscape items. Annotations are not used by the landscape itself, but they can be used by external tools that consume the landscape data. Both keys and values are expected to be strings", "type": "object", "additionalProperties": true }, "archived": { "title": "Date at which the project was archived", "description": "This field is only expected on items that represent a foundation's project", "type": "string", "format": "date", "examples": [ "2025-01-01" ] }, "audits": { "title": "List of security audits the projet has undergone", "type": "array", "items": { "type": "object", "properties": { "date": { "title": "Date of the audit", "type": "string", "format": "date", "examples": [ "2025-01-01" ] }, "type": { "title": "Audit type", "type": "string", "examples": [ "fuzzing" ] }, "url": { "title": "URL of the audit report", "type": "string", "format": "uri", "examples": [ "https://audit.report.url" ] }, "vendor": { "title": "Name of the vendor who did the audit", "type": "string", "examples": [ "Vendor name" ] } }, "required": [ "date", "type", "url", "vendor" ] } }, "annual_review_date": { "title": "Date of the last annual review presented by this project", "description": "This field is only expected on items that represent a foundation's project", "type": "string", "format": "date", "examples": [ "2025-01-01" ] }, "annual_review_url": { "title": "URL of the last annual review presented by this project", "description": "This field is only expected on items that represent a foundation's project", "type": "string", "format": "uri", "examples": [ "https://annual.review.url" ] }, "artwork_url": { "title": "Artwork URL", "type": "string", "format": "uri", "examples": [ "https://artwork.url" ] }, "blog_url": { "title": "Blog URL", "type": "string", "format": "uri", "examples": [ "https://blog.url" ] }, "bluesky_url": { "title": "Bluesky URL", "type": "string", "pattern": "^https?://bsky.app/profile/.*", "examples": [ "https://bsky.app/profile/org-name" ] }, "chat_channel": { "title": "Channel to discuss topics related to this item", "type": "string", "examples": [ "#channel" ] }, "clomonitor_name": { "title": "The name of a project listed in CLOMonitor that matches this item", "description": "This reference is used to pull the CLOMonitor report for this item and display it in the item's details view. CLOMonitor is only enabled for a small number of foundations, so this field won't be used in most cases", "type": "string", "examples": [ "project-name" ] }, "dev_stats_url": { "title": "Dev stats URL", "type": "string", "format": "uri", "examples": [ "https://dev.stats.url" ] }, "discord_url": { "title": "Discord URL", "type": "string", "format": "uri", "examples": [ "https://discord.url" ] }, "docker_url": { "title": "Docker URL", "type": "string", "format": "uri", "examples": [ "https://docker.url" ] }, "documentation_url": { "title": "Documentation URL", "type": "string", "format": "uri", "examples": [ "https://documentation.url" ] }, "facebook_url": { "title": "Facebook URL", "type": "string", "format": "uri", "pattern": "^https?://(www\\.)?facebook.com/.*" }, "funding_url": { "title": "Funding URL", "description": "URL to external financial details. When provided, the funding rounds table in the item's details view is hidden and this URL is shown instead", "type": "string", "format": "uri", "examples": [ "https://financial.details.url" ] }, "github_discussions_url": { "title": "GitHub discussions URL", "type": "string", "format": "uri", "examples": [ "https://github.discussions.url" ] }, "gitter_url": { "title": "Gitter URL", "type": "string", "format": "uri", "examples": [ "https://gitter.url" ] }, "graduated": { "title": "Date at which the project moved to graduated", "description": "This field is only expected on items that represent a foundation's project, and should only be used when adhering to the graduated/incubating/sandbox maturities", "type": "string", "format": "date", "examples": [ "2025-01-01" ] }, "incubating": { "title": "Date at which the project moved to incubating", "description": "This field is only expected on items that represent a foundation's project, and should only be used when adhering to the graduated/incubating/sandbox maturities", "type": "string", "format": "date", "examples": [ "2025-01-01" ] }, "lfx_slug": { "title": "Slug used by LFX to identify the item (i.e. project)", "description": "Slug used by LFX to reference the project, so external integrations can link both records together.", "type": "string", "examples": [ "my-project" ] }, "linkedin_url": { "title": "LinkedIn URL", "type": "string", "format": "uri", "pattern": "^https?://(www\\.)?linkedin.com/.*", "examples": [ "https://www.linkedin.com/url" ] }, "mailing_list_url": { "title": "Mailing list URL", "type": "string", "format": "uri", "examples": [ "https://mailing.list.url" ] }, "other_links": { "title": "List of links to feature in the item's details view", "type": "array", "items": { "type": "object", "properties": { "name": { "title": "Name of the link", "type": "string", "examples": [ "Link name" ] }, "url": { "title": "URL of the link", "type": "string", "format": "uri", "examples": [ "https://link.url", "mailto:team@example.com" ] } }, "required": [ "name", "url" ] } }, "package_manager_url": { "title": "Package manager URL", "description": "Link to the package manager where the item is available", "type": "string", "format": "uri", "pattern": "^https?://.*" }, "parent_project": { "title": "Name of the parent project", "description": "The parent of a project will be highlighted in the item's details view. The parent project must be listed in the landscape and the name must match exactly", "type": "string", "examples": [ "Project name" ] }, "pinterest_url": { "title": "Pinterest URL", "type": "string", "format": "uri", "pattern": "^https?://(www\\.)?pinterest.com/.*", "examples": [ "https://www.pinterest.com/url" ] }, "reddit_url": { "title": "Reddit URL", "type": "string", "format": "uri", "pattern": "^https?://(www\\.)?reddit.com/.*", "examples": [ "https://www.reddit.com/url" ] }, "slack_url": { "title": "Slack URL", "type": "string", "format": "uri", "pattern": "^https?://.*", "examples": [ "https://slack.url" ] }, "specification": { "title": "Indicate whether this item is a specification", "type": "boolean" }, "stack_overflow_url": { "title": "Stack Overflow URL", "type": "string", "format": "uri", "pattern": "^https?://stackoverflow.com/.*" }, "summary_business_use_case": { "title": "Description of the business use case", "description": "More info: https://github.com/cncf/landscape/blob/master/docs/item_summary.md", "type": "string", "examples": [ "Reduce operational risks associated with software supply chain" ] }, "summary_integration": { "title": "Comma separated list of other projects this item integrates with", "description": "More info: https://github.com/cncf/landscape/blob/master/docs/item_summary.md", "type": "string", "examples": [ "Project 1, Project 2" ] }, "summary_integrations": { "title": "Alternative field for `summary_integration`", "description": "More info: https://github.com/cncf/landscape/blob/master/docs/item_summary.md", "type": "string", "examples": [ "Project 1, Project 2" ] }, "summary_intro_url": { "tirle": "Video URL of the item's pitch", "description": "More info: https://github.com/cncf/landscape/blob/master/docs/item_summary.md", "type": "string", "examples": [ "https://summary.intro.url" ] }, "summary_personas": { "title": "List of target users this item is intended for", "description": "Entries must be separated by commas. More info: https://github.com/cncf/landscape/blob/master/docs/item_summary.md", "type": "string", "examples": [ "Cloud Architects, Platform Engineers" ] }, "summary_release_rate": { "title": "Describes how often a new version of the item is released", "description": "More info: https://github.com/cncf/landscape/blob/master/docs/item_summary.md", "type": "string", "examples": [ "Every 3 months" ] }, "summary_tags": { "title": "Keywords that describe the item", "description": "The keywords must be separated by commas. These keywords will be indexed to power the search feature. More info: https://github.com/cncf/landscape/blob/master/docs/item_summary.md", "type": "string", "examples": [ "security, networking, cloud" ] }, "summary_use_case": { "title": "Description of the technical problem this item solves", "description": "More info: https://github.com/cncf/landscape/blob/master/docs/item_summary.md", "type": "string", "examples": [ "Provides security for the software supply chain" ] }, "tag": { "title": "Technical Advisory Groups (TAG) this item is associated to", "description": "When the automatic TAG mapping feature is enabled in the landscape settings, the TAG names used here must match exactly any of the TAGs listed in the landscape settings", "type": "array", "items": { "type": "string", "examples": [ "security", "storage" ] } }, "youtube_url": { "title": "YouTube URL", "type": "string", "format": "uri", "pattern": "^https?://(www\\.)?youtube.com/.*", "examples": [ "https://www.youtube.com/url" ] } } } }, "required": [ "name", "homepage_url", "logo" ] } } }, "required": [ "name", "items" ], "examples": [ "Subcategory 1", "Subcategory 2" ] }, "minItems": 1, "required": [ "name", "subcategories" ] } } }, "minItems": 1 } }, "oneOf": [ { "required": [ "categories" ] }, { "required": [ "landscape" ] } ], "additionalProperties": false }