Guidelines for contributing, including adding new content or editing existing materials.
We highly recommend reading Ten simple rules for making training materials FAIR before creating a new training material and following the FAIR (Findable, Accessible, Interoperable, Reusable) principles for training materials.
There are two options to run the website locally and preview your training materials before pushing them.
Option 1: Using Ruby and Bundler
You need Ruby and Bundler installed. Then run:
# Install required gems
bundle install
# Start the Jekyll server
bundle exec jekyll serve --trace --livereload
Open http://127.0.0.1:4000/training/ (Server address) in your browser to view the website.
Option 2: Using Docker
Build and run the containerized version:
# Build the Docker image
docker build . -t dekcd
# Run the container
docker run -it -p 4000:4000 dekcd
Then open http://127.0.0.1:4000/training/ in your browser.
This section describes the required structure, conventions, and submission workflow for contributing a new tutorial. Please follow these guidelines to ensure consistency, reusability, and maintainability across the repository.
All tutorials must reside within the _tutorials directory. Each tutorial should have its own dedicated subfolder:
_tutorials/<tutorial-name>/
Within this folder, you may either:
tutorial.md), orpart1.md, part2.md)Recommended approach: modular structure
Splitting content into smaller, logically coherent markdown files is strongly encouraged. This enables:
All tutorials must define their metadata at the very top of the main file tutorial.md using YAML front matter. Do not place metadata in auxiliary Markdown files (e.g., part1.md, part2.md).
Example:
---
layout: tutorial_hands_on
title: Introduction to basic Unix commands
description: "This is the introduction to the basic shell commands."
slug: unix-course
time_estimation: 2H30M
questions:
- Which questions are addressed by the tutorial?
objectives:
- The learning objectives of the tutorial
key_points:
- The take-home messages
- They will appear at the end of the tutorial
version:
- main
life_cycle: "Beta"
contributions:
authorship:
- author 1
- author 2
editing:
funding:
---
## Section title
Enter your tutorial content here.
The following fields are mandatory unless stated otherwise:
layout: use tutorial_hands_on as the default layout.title: tutorial title as displayed on the tutorial collection page.description: a concise summary of the tutorial content.time_estimation: estimated duration of the tutorial. This must conform to the following pattern:
/^(?:([0-9]+)[Hh])?(?:([0-9]+)[Mm])?(?:([0-9.]+)[Ss])?$/questions: a list of key questions addressed by the tutorial.objectives: a list of learning objectives.key_points: summary points presented at the end of the tutorial.version: specifies the tutorial version (e.g., main).life_cycle: indicates the development status.contributions: categorized list of contributors. Examples include authorship, editing, funding, testing, infrastructure, and translation. In the funding section, list the name of the organization that supported the training material. Ensure that the organization’s name matches an entry in _data/contributions.yml. If your organization is not listed, please add its name to _data/contributions.yml and place the organization’s logo in /assets/img/.Development status of tutorials Tutorials follow a structured development model aligned with best practices from Carpentries.
- Alpha: early-stage development. Content may be incomplete, untested, and subject to significant changes. This status typically applies until a complete first draft is available.
- Beta: actively tested and reviewed. Feedback from pilot workshops is actively incorporated, and further revisions are likely.
- Stable: complete, reliable, and well-maintained tutorial. Only minor updates are expected.
- Deprecated: the tutorial is no longer maintained and may be removed in the future.
The following fields are optional but recommended where applicable:
zenodo_link: link to the input data for the tutorial on Zenodo.follow_up_training: a list of resources that the reader of the material could follow at the end of the tutorial.For extended metadata options and advanced patterns, please refer to the Galaxy Training Network tutorial guidelines.
If you choose a modular structure, assemble the final tutorial using Jekyll’s include directive:
Your introductory text.
{% include _tutorials/intro-python/main/part1.md %}
Additional content.
This approach allows flexible composition while keeping individual sections reusable.
A typical modular tutorial may look like:
_tutorials/
intro-python/
main/
part1.md
part2.md
tutorial.md
If you have any data or images that you would like to add to the tutorial, please place them in the tutorial directory.
This section outlines the standardized components used to structure tutorial content, including instructional boxes and image handling.
To enhance the learning experience, tutorials use a set of predefined “boxes” implemented via styled blockquotes. These visually distinguish different types of content such as tasks, explanations, tips, and assessments.
Example: Question and Solution Box
> <question-title>Questions</question-title>
> 1. Question 1
> 2. Question 2
>
> > <solution-title>Answers</solution-title>
> > 1. Answer 1
> > 2. Answer 2
> >
> {: .solution}
>
{: .question}
This structure creates a nested box where solutions are revealed within the question block:
Questions
- Question 1
- Question 2
Answers
- Answer 1
- Answer 2
Box titles are defined using a custom HTML-like tag structure, such as
The following boxes are available and should be used consistently:
{: .overview} summaries{: .key_points} take-home messages{: .tip} practical advice or shortcuts{: .warning} important cautions{: .comment} explanatory notes{: .hands_on} or {: .hands-on} exercises or tasks{: .question} assessment questions{: .solution} answers to questions{: .details} supplementary information{: .feedback} learner feedback prompts{: .code-in} input code blocks{: .code-out} output or resultsTasks
- Create each box and see how it looks.
- Create one with a nested box.
Usage examples:
Tasks
- List of tasks
- …
Details Here put some text…
Tip Here put some useful information…
Comment Here put some comments…
Code In ls -lhimport pandas as pd
Code Out # code output
Questions
- Question 1
- Question 2
Answers
- Answer 1
- Answer 2
Images must be referenced using the relative_url filter:
{: .responsive-img }
![figure-title]() this is standard Markdown image syntax. The text inside the brackets (figure-title) becomes the alt text, which improves accessibility and is displayed if the image fails to load./training/path/to/image the relative_url ensures that the correct baseurl defined in _config.yml is automatically prepended. This prevents broken links when the site is hosted in a subdirectory.{: .responsive-img } CSS class ensures that images do not exceed content width and scale proportionally on smaller screens.Additional resources If you need an additional materials to learn how to format the tutorial content, i.e. to wrap parts of the text in the special block quotes, please refer to the Software Carpenters’ Formatting episode.
Please also refer to the Markdown Cheatsheet to learn more how to use Markdown.
If your tutorial exists in multiple versions (e.g., adapted for different audiences or events), organize them using version-specific subdirectories:
_tutorials/<tutorial-name>/
main/
tutorial.md
summer-school/
tutorial.md
Each version should be self-contained or consistently structured using include.
Tutorials are categorized into thematic groups (e.g., Unix, Metagenomics) for navigation and discoverability. To register your tutorial:
intro-python) to the _data/tutorial_groups.yml fileIf no suitable group exists:
Once your tutorial is ready to publish, create a new branch, commit your changes, submit a pull request for review. You may optionally open an issue to describe your contribution before or alongside your pull request.
Learning pathwayss organize multiple tutorials into coherent, structured curricula. Each pathway defines a sequence of modules, where each module groups related tutorials under a shared theme.
To define a new pathway create a markdown file named <pathway_title>.md and place it in the _pathways directory.
Each pathway file must include YAML front matter describing its structure, modules, and associated tutorials.
Template:
---
layout: pathway
title: Title of the Learning Pathway
description: A concise summary of the pathway’s scope and objectives.
tags: [a list of keywords]
pathway:
- section: "Module 1: The module title"
description: A short explanation of the module’s focus
tutorials:
- name: tutorial name
version: main
- section: "Module 2: The module title"
description: A short explanation of the module’s focus
tutorials:
- name: another tutorial
version: main
editorial_board:
- name: contributor Name
orcid: contributor ORCID
---
The layout field must be set to pathway to ensure correct rendering of the pathway page. Each tutorial entry must include name (which must exactly match the corresponding tutorial folder name) and version (selected from the available versions of that tutorial).
After defining the pathway, create a new branch, commit the pathway file, and submit a pull request for review.