{}OPF
DocsSchema referenceEdit on GitHub

Chart Type

Schema for chart-type records in the pptx.gallery catalog. Each record describes a named chart variant, its Open XML mapping, its series/category cardinality, the column structure of the underlying workbook, a…

Schema $id

https://openpresentation.org/schema/opf-chart-type/v1

Source

spec/schemas/chart-type.schema.json

Field index

FieldTypeReqDefaultDescription
$schemaconstyesIdentifies this record as a chart type in the open presentation catalog.
idstringyesStable slug used by OPF documents to reference this chart type. Lowercase kebab-case. Chart type ids may start with a digit (e.g., '100pct-stacked-column', '3d-column') to mirror conventional chart naming.
namestringyesStable display/programmatic name for this chart type.
labelstringHuman-readable label shown in chart pickers.
summarystringOne-sentence positioning: when to reach for this chart variant.
descriptionstringLonger prose describing the chart and ideal use cases.
mappingsref:ChartTypeMappingsyesCanonical and optional renderer-specific mappings used by engines to render this chart type.
groupstringTop-level grouping in the chart picker (column, bar, line, area, pie, radar, etc.).
groupSortintegerDisplay ordering hint within the chart group.
complexityenumShape of the underlying data: a flat series ('simple'), one with engine-side calculation ('calculated'), parent-child rows ('hierarchical'), or pre-normalized rows ('normalized').
seriesintegerNumber of data series this chart type expects.
categoriesintegerNumber of category labels this chart type expects on the primary axis.
seriesGroupsintegerNumber of series groups (axis bands) this chart type uses; >1 for combo or banded charts.
useSecondaryCategoriesbooleanWhether the chart type uses a secondary category axis.
workbookRangestringA1 reference to the source range in the embedded workbook.
columnsarray<string>Column header names of the embedded workbook, in left-to-right order.
dataColumnsarray<ref:ChartDataColumn>Per-column metadata describing the role and position of each column in the workbook source.
helperColumnsarray<string>Optional auxiliary column names used by calculated or banded charts (e.g., 'Excellent', 'Good', 'Fair', 'Poor' for a bullet chart).
sampleDataref:ChartSampleDataInline sample dataset for previews and pickers.
slideNumberintegerSource slide number in the original chart-gallery deck. Carried for traceability.
tagsarray<string>Free-form labels for filtering and search.
previewobjectVisual previews of the record, used by picker UIs and inline rendering. All sub-fields are optional; engines fall back gracefully when previews aren't available.

$schema

Type: const · Required · Default:

Identifies this record as a chart type in the open presentation catalog.

$schema.json
{
  "$schema": "https://openpresentation.org/schema/opf-chart-type/v1"
}

id

Type: string · Required · Default: · Pattern: ^[a-z0-9][a-z0-9-]*$

Stable slug used by OPF documents to reference this chart type. Lowercase kebab-case. Chart type ids may start with a digit (e.g., '100pct-stacked-column', '3d-column') to mirror conventional chart naming.

id.json
{
  "id": "column"
}

name

Type: string · Required · Default:

Stable display/programmatic name for this chart type.

name.json
{
  "name": "COLUMN"
}

label

Type: string · Optional · Default:

Human-readable label shown in chart pickers.

label.json
{
  "label": "Column"
}

summary

Type: string · Optional · Default:

One-sentence positioning: when to reach for this chart variant.

summary.json
{
  "summary": "Single-series vertical column chart for comparing values across categories."
}

description

Type: string · Optional · Default:

Longer prose describing the chart and ideal use cases.

description.json
{
  "description": "Use a clustered column when you want to compare a small number of series across the same categories — e.g., revenue by quarter for two product lines. Best with 2–4 series and ≤12 categories."
}

mappings

Type: ref:ChartTypeMappings · Required · Default:

Canonical and optional renderer-specific mappings used by engines to render this chart type.

mappings.json
{
  "mappings": "mappings-value"
}

group

Type: string · Optional · Default:

Top-level grouping in the chart picker (column, bar, line, area, pie, radar, etc.).

group.json
{
  "group": "Column"
}

groupSort

Type: integer · Optional · Default:

Display ordering hint within the chart group.

groupSort.json
{
  "groupSort": 1
}

complexity

Type: enum · Optional · Default:

Shape of the underlying data: a flat series ('simple'), one with engine-side calculation ('calculated'), parent-child rows ('hierarchical'), or pre-normalized rows ('normalized').

complexity.json
{
  "complexity": "simple"
}

series

Type: integer · Optional · Default:

Number of data series this chart type expects.

series.json
{
  "series": 1
}

categories

Type: integer · Optional · Default:

Number of category labels this chart type expects on the primary axis.

categories.json
{
  "categories": 4
}

seriesGroups

Type: integer · Optional · Default:

Number of series groups (axis bands) this chart type uses; >1 for combo or banded charts.

seriesGroups.json
{
  "seriesGroups": 1
}

useSecondaryCategories

Type: boolean · Optional · Default:

Whether the chart type uses a secondary category axis.

useSecondaryCategories.json
{
  "useSecondaryCategories": false
}

workbookRange

Type: string · Optional · Default:

A1 reference to the source range in the embedded workbook.

workbookRange.json
{
  "workbookRange": "Sheet1!$A$1:$I$2"
}

columns

Type: array<string> · Optional · Default:

Column header names of the embedded workbook, in left-to-right order.

columns.json
{
  "columns": [
    "Series 1",
    "Value"
  ]
}

dataColumns

Type: array<ref:ChartDataColumn> · Optional · Default:

Per-column metadata describing the role and position of each column in the workbook source.

dataColumns.json
{
  "dataColumns": [
    {
      "name": "Series 1",
      "role": "categoryLabel",
      "type": "string",
      "position": "row0_col0"
    },
    {
      "name": "Value 1",
      "role": "series",
      "type": "number",
      "position": "row1_col0"
    },
    {
      "name": "Value 2",
      "role": "series",
      "type": "number",
      "position": "row2_col0"
    }
  ]
}

helperColumns

Type: array<string> · Optional · Default:

Optional auxiliary column names used by calculated or banded charts (e.g., 'Excellent', 'Good', 'Fair', 'Poor' for a bullet chart).

helperColumns.json
{
  "helperColumns": [
    "Excellent",
    "Good",
    "Fair",
    "Poor"
  ]
}

sampleData

Type: ref:ChartSampleData · Optional · Default:

Inline sample dataset for previews and pickers.

sampleData.json
{
  "sampleData": {
    "headers": [
      "Series 1",
      "Q1 2024",
      "Q2 2024",
      "Q3 2024",
      "Q4 2024"
    ],
    "rows": [
      [
        "Value",
        93810,
        24592,
        13278,
        46048
      ]
    ]
  }
}

slideNumber

Type: integer · Optional · Default:

Source slide number in the original chart-gallery deck. Carried for traceability.

slideNumber.json
{
  "slideNumber": 1
}

tags

Type: array<string> · Optional · Default:

Free-form labels for filtering and search.

tags.json
{
  "tags": [
    "column",
    "comparison"
  ]
}

preview

Type: object · Optional · Default:

Visual previews of the record, used by picker UIs and inline rendering. All sub-fields are optional; engines fall back gracefully when previews aren't available.

preview.json
{
  "preview": {}
}