Error loading the CMS configuration although it has folder specified

I’m trying to manually install netlify cms to a site. I get the following error:

'collections[3]' should have required property 'files' 
'collections[3]' should have required property 'folder'
'collections[3]' should match exactly one schema in oneOf 
'collections[4]' should have required property 'files' 
'collections[4]' should have required property 'folder' 
'collections[4]' should match exactly one schema in oneOf

However, I have “folder” in both collections. They look like this:

- name: people
  label: Our Team
  folder: /src/team/
  create: true
  extension: md
  slug: '{{slug}}'
  identifier_field: personname
  fields:
    - widget: string
      name: personname
      label: Name
      required: true

What am I doing wrong? I read collection doc, and all seems normal.

Could be an indentation issue. Can you share your entire config.yml?

Here it is:

backend:
  name: git-gateway
  branch: master
  commit_messages:
    create: 'Create {{collection}} “{{slug}}”'
    update: 'Update {{collection}} “{{slug}}”'
    delete: 'Delete {{collection}} “{{slug}}”'
    uploadMedia: '[skip ci] Upload “{{path}}”'
    deleteMedia: '[skip ci] Delete “{{path}}”'

media_folder: static/img
public_folder: /img

collections:
  - name: config
    label: Site Configuration
    files:
      - name: config
        label: Site Configuration
        file: site-metadata.json
        fields:
          - widget: string
            name: title
            label: Title
            required: true
          - widget: string
            name: description
            label: Description
            required: true
          - widget: select
            name: palette
            label: Color Palette
            required: true
            hint: The color palette used for the website.
            options:
              - Blue
              - Green
              - Black & White
  - name: about
    label: About
    files:
      - name: about
        label: About
        file: /src/about/index.md
        fields:
          - widget: string
            name: title
            label: Title
            required: true
          - widget: string
            name: subtitle
            label: Subtitle
            required: false
            hint: The text shown below the page title
          - widget: image
            name: image
            label: Image
            required: false
            hint: The image shown below the page title
          - widget: hidden
            name: template
            label: Template
            required: true
            default: page
          - widget: markdown
            name: body
            label: Content
            required: false
            hint: Page content
  - name: people
    label: Our Team
    folder: /src/team/
    create: true
    extension: md
    slug: '{{slug}}'
    identifier_field: personname
    fields:
      - widget: string
        name: personname
        label: Name
        required: true
      - widget: string
        name: email
        label: Email Address 
        required: false
      - widget: string
        name: phone
        label: Phone Number of the person
        required: false
        hint: "E.g.: 999.555.9999"
      - widget: image
        name: personimage
        label: Image
        required: false
      - widget: markdown
        name: personprofile
        label: Person Profile
        required: false
      - widget: hidden
        name: template
        label: Template
        required: true
        default: page
    filter:
      field: template
      value: page
  - name: testimonials
    label: Testimonials
    file: /src/testimonials/index.md
    widget: list
    fields:
      - widget: string
        name: quote
        label: Quote
        required: true
        hint: Client's testimonial
      - widget: string
        name: author
        label: Author
        required: false
        hint: Client's name
  - name: contact
    label: Contact Information
    file: /src/contact/index.md
    widget: object
    fields:
      - widget: string
        name: location
        label: Location name
        required: false
      - widget: string
        name: address
        label: Address
        required: true
      - widget: string
        name: email
        label: Email Address
        required: false
      - widget: string
        name: phone
        label: Phone
        required: false
      - widget: string
        name: fax
        label: Fax Number
        required: false

File collections can be super confusing. Usually you break down your collections like this (or at least, it’s how I do it): Folder collections get their own collections. File collections come in groups, like pages, configuration etc. You almost got it right, you just gave every file its own collection, which becomes confusing pretty quickly. My advice is to bundle all the static pages into a pages collection:


collections:
  - name: config
    label: Site Configuration
    files:
      - name: config
        label: Site Configuration
        file: site-metadata.json
        fields:
          - widget: string
            name: title
            label: Title
            required: true
          - widget: string
            name: description
            label: Description
            required: true
          - widget: select
            name: palette
            label: Color Palette
            required: true
            hint: The color palette used for the website.
            options:
              - Blue
              - Green
              - Black & White
  - name: people
    label: Our Team
    folder: /src/team/
    create: true
    extension: md
    slug: '{{slug}}'
    identifier_field: personname
    fields:
      - widget: string
        name: personname
        label: Name
        required: true
      - widget: string
        name: email
        label: Email Address 
        required: false
      - widget: string
        name: phone
        label: Phone Number of the person
        required: false
        hint: "E.g.: 999.555.9999"
      - widget: image
        name: personimage
        label: Image
        required: false
      - widget: markdown
        name: personprofile
        label: Person Profile
        required: false
      - widget: hidden
        name: template
        label: Template
        required: true
        default: page
    filter:
      field: template
      value: page

  - name: pages
    label: Pages
    files:
      - name: about
        label: About
        file: /src/about/index.md
        fields:
          - widget: string
            name: title
            label: Title
            required: true
          - widget: string
            name: subtitle
            label: Subtitle
            required: false
            hint: The text shown below the page title
          - widget: image
            name: image
            label: Image
            required: false
            hint: The image shown below the page title
          - widget: hidden
            name: template
            label: Template
            required: true
            default: page
          - widget: markdown
            name: body
            label: Content
            required: false
            hint: Page content

      - name: testimonials
        label: Testimonials
        file: /src/testimonials/index.md
        widget: list
        fields:
          - widget: string
            name: quote
            label: Quote
            required: true
            hint: Client's testimonial
          - widget: string
            name: author
            label: Author
            required: false
            hint: Client's name
      - name: contact
        label: Contact Information
        file: /src/contact/index.md
        widget: object
        fields:
          - widget: string
            name: location
            label: Location name
            required: false
          - widget: string
            name: address
            label: Address
            required: true
          - widget: string
            name: email
            label: Email Address
            required: false
          - widget: string
            name: phone
            label: Phone
            required: false
          - widget: string
            name: fax
            label: Fax Number
            required: false
1 Like

Thanks Tom! It works now but I don’t know what was missing previously. :slight_smile: Messy? Yes, but I felt like it should work. I was just copy-pasting from an open source project.

Anyways, now I see the login screen. How can I login without deploying to netlify? I prefer to experiment in local.

You can experiment locally with either the test-repo or a local git repository. If you just want to try out your config, I recommend the former. It ignores your data though, something to be aware of…

1 Like

Thanks. I was trying local git repo as in the link you’ve sent.

I created another topic, so if anyone else is experiencing same problem, check this.