Docs (Public)

Data models are derived from data files formatted using either JSON, TOML or YAML. Common examples might be a data/authors.json that contains the site's author information or config.toml that has site configuration options.

Data models have access to all common content model fields.

Example

Take the following site structure

.
├── content
│   └── posts
│       ├── post1.md
│       ├── post2.md
├── data
│   └── footer.json
└── stackbit.yaml

The data in the data/footer.json file

{
  "features": [
    {
      "title": "Free Consultation",
      "description": "New clients recieve an obligation free consultation.",
      "image": "images/features/noun_branding_1885335.svg"
    },
    {
      "title": "Certified Accountants",
      "description": "All members of our team are certified accountants.",
      "image": "images/features/noun_The Process_1885341.svg"
    },
    {
      "title": "Tax Compliance",
      "description": "We stay up to date on the latest changes to the tax code.",
      "image": "images/features/noun_3d modeling_1885342.svg"
    }
  ]
}

Would map to the following data model in the stackbit.yaml:

stackbitVersion: ~0.2.0
ssgName: custom
pagesDir: content
dataDir: data
...
models:
    features:
    type: data
    label: Features
    file: footer.json # path is relative to the `dataDir`
    fields:
      - type: list
        name: features
        items:
          type: object
          label: Feature
          labelField: title
          fields:
            - type: string
              name: title
              label: Title
            - type: string
              name: description
              label: Description
            - type: image
              name: image
              label: Icon

Data in Multiple Folders

If you have data files in multiple folders and or data/config files in the root you can set dataDir: "", which will scan the entire project for data files.

.
├── content
│   └── posts
│       ├── post1.md
│       ├── post2.md
├── data
│   └── footer.json
├── stackbit.yaml
└── config.yaml

stackbit.yaml

stackbitVersion: ~0.2.0
ssgName: custom
pagesDir: content
dataDir: ""
...
models:
  config:
    type: data
    label: Config
    file: _config.yml # relative to `dataDir`
  author:
    type: data
    file: data/footer.json # relative to `dataDir`
    label: Footer