--- layout: docs title: Data Files permalink: /docs/datafiles/ --- In addition to the [built-in variables](../variables/) available from Jekyll, you can specify your own custom data that can be accessed via the [Liquid templating system](https://wiki.github.com/shopify/liquid/liquid-for-designers). Jekyll supports loading data from [YAML](http://yaml.org/), [JSON](http://www.json.org/), and [CSV](https://en.wikipedia.org/wiki/Comma-separated_values) files located in the `_data` directory. Note that CSV files *must* contain a header row. This powerful feature allows you to avoid repetition in your templates and to set site specific options without changing `_config.yml`. Plugins/themes can also leverage Data Files to set configuration variables. ## The Data Folder As explained on the [directory structure](../structure/) page, the `_data` folder is where you can store additional data for Jekyll to use when generating your site. These files must be YAML, JSON, or CSV files (using either the `.yml`, `.yaml`, `.json` or `.csv` extension), and they will be accessible via `site.data`. ## Example: List of members Here is a basic example of using Data Files to avoid copy-pasting large chunks of code in your Jekyll templates: In `_data/members.yml`: ```yaml - name: Eric Mill github: konklone - name: Parker Moore github: parkr - name: Liu Fengyun github: liufengyun ``` Or `_data/members.csv`: ```text name,github Eric Mill,konklone Parker Moore,parkr Liu Fengyun,liufengyun ``` This data can be accessed via `site.data.members` (notice that the filename determines the variable name). You can now render the list of members in a template: ```html {% raw %} {% endraw %} ``` ## Example: Organizations Data files can also be placed in sub-folders of the `_data` folder. Each folder level will be added to a variable's namespace. The example below shows how GitHub organizations could be defined separately in a file under the `orgs` folder: In `_data/orgs/jekyll.yml`: ```yaml username: jekyll name: Jekyll members: - name: Tom Preston-Werner github: mojombo - name: Parker Moore github: parkr ``` In `_data/orgs/doeorg.yml`: ```yaml username: doeorg name: Doe Org members: - name: John Doe github: jdoe ``` The organizations can then be accessed via `site.data.orgs`, followed by the file name: ```html {% raw %} {% endraw %} ``` ## Example: Accessing a specific author Pages and posts can also access a specific data item. The example below shows how to access a specific item: `_data/people.yml`: ```yaml dave: name: David Smith twitter: DavidSilvaSmith ``` The author can then be specified as a page variable in a post's frontmatter: ```html {% raw %} --- title: sample post author: dave --- {% assign author = site.data.people[page.author] %} {% endraw %} ```