Welcome to the home of EOCS. This standard is currently a work-in-progress. To learn more, continue reading our README and star this repo on GitHub.
EXLskills is on a mission to change education with an open-source online digital skills learning, certification, and peer-to-peer instruction platform that is committed to offering premium-quality courseware for 100% free via our open-source courseware methodology. Our courses are developed using the content in this repository and are then imported/pushed to EXLskills.com with the eocsutil tool. This process is 100% transparent, free, and open-source.
There are two main file structures for EOCS, the default and the multi-block (directory-per-vertical) file structures. The default file structure is designed for simple courses while the optional file structure is designed for courses that require certain verticals to have multiple blocks. You can also mix the formats within the same course. The two types of folder structures are shown below.
Simple EOCS Course Structure:
course
├── index.yaml
└── 00_Chapter Name
├── index.yaml
└── 00_Sequential Name
├── index.yaml
└── 00_Vertical Name.md
└── 01_Second Vertical Name.md
EOCS Course with Vertical Directories (Multiple blocks):
course
├── index.yaml
└── 00_Chapter Name
├── index.yaml
└── 00_Sequential Name
├── index.yaml
└── 00_verticalname
├── index.yaml
├── index.md
├── index.repl
└── index.repl.yaml
The file structure with vertical directories requires a different style of formatting as well as a separate folder for each vertical.
If the vertical contains more than 1 block, the standard format {index}_{name}.{ext}
should be used to ensure that the ordering is correct on import/conversion.
Inline code for verticals are setup with REPL, where each index.repl.yaml
file is considered a block. The index.repl
directory should contain a "source" directory for the inline code.
Use our AP Java Course as reference for the optional file structure.
Each course contains multiple index.yaml files that contain different information for each sublevel. The table below contains a brief description of each attribute and where it is located inside the folder structure. As shown below, each index.yaml file for the chapter, sequential, and vertical contain an attribute called url_name
. This attribute is a crucial component in the index.yaml
file as these "url names" are used when updating the course. If no url_name
is found (i.e. when you first import the course), a new url_name
will be automatically created and will override the existing files (if any).
Course:
Attribute | Location | Optional/Required | Default |
course | index.yaml | Required | None |
course url_name | index.yaml | Required | None |
course_image | index.yaml | Required | None |
display_name | index.yaml | Optional | Generated from parent directory name |
est_minutes | index.yaml | Optional | None |
language | index.yaml | Required | en |
org | index.yaml | Optional | None |
Chapter:
Attribute | Location | Optional/Required | Default |
chapter display_name | index.yaml | Optional | Generated from parent directory name |
chapter url_name | index.yaml | Required | None |
Sequential:
Attribute | Location | Optional/Required | Default |
format | index.yaml | Optional | Homework |
graded | index.yaml | Optional | true |
sequential display_name | index.yaml | Optional | Generated from parent directory name |
sequential url_name | index.yaml | Required | None |
Vertical:
Attribute | Location | Optional/Required | Default |
api_version | index.repl | Optional | 1 |
environment | index.repl | Optional | None |
height | index.repl | Optional | 500px |
src_path | index.repl | Optional | None |
vertical display_name | index.yaml | Optional | Generated from parent directory name |
vertical url_name | index.yaml | Required | None |