In Jekyll, can we group multiple collections inside the same folder?

This is now possible (I'm running Jekyll 3.7.2, I'm not sure in which version this was implemented).

Here's how to do it: In your _config.yml you can define your collections as well as the folder for your collections. Let's take a look at an example on a client site I'm working on:

collections:
  events:
    output: true
  work:
    output: true
  jobs:
    output: true
  cases:
    output: true
    permalink: /work/:name
collections_dir: pages

The collections_dir: [your_folder_here] will tell Jekyll to look into that folder for collections. My folder structure in development is as follows:

pages/
  ...
  _events/
  _work/
  _jobs/
  _cases/

And in the compiled site it's as follows:

...
events/
jobs/
work/ (contains both "work" and "cases" collections)

One thing also that wasn't asked, but I found to be useful, was that you're able to output different collections into a same folder. In my case I had a client website on which there were two types of work samples: client cases and general examples. We wanted to separate them for better maintenance but also show them in the same folder. To achieve this you can simply define a permalink for the collection. In our case we put permalink for the cases to appear in the work folder (permalink: /work/:name).

Hope this helps!

This is also present in the Jekyll documentation


Answer is no. Your collections folder must be at the root of your root folder.

Even if you name you create a collection in _collections/_music folder, and set it up like this :

collections:

  collections/_music folder:
    output: true

Jekyll ends up looking for your collection in _collections_music folder (without any slash) because of path sanitize process.

See jekyll code in collection.rb, site.rb and jekyll.rb


Nothing prevents you to use subfolders in your collection. (Note: this is not an answer to your question but a possible workaround)

So as a workaround you could have just one collection: say _arts for example and organize your folders like:

_arts
     dancing
     music
     concerts
     .....

to list them separately you can use:

  1. a FrontMatter variable in your files category: dancing when you have a output and check this for a dancing only list for example.

    {% for project in site.arts %}
    {% if project.category == 'dancing' %}
    ....
    {% endif %}
    {% endfor %}
    
  2. or check the path when you have no output for the collection

    {% for project in site.arts %}
    {% if project.url contains 'dancing' %}
    ....
    {% endif %}
    {% endfor %}
    

This could slowdown your build if you have hundreds and hundreds of items inside.