Skip to content
Specifications for the EXL Open Courseware Standard (EOCS)
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

EXL Open Courseware Standard (EOCS)

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.

About EXLskills

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 with the eocsutil tool. This process is 100% transparent, free, and open-source.

File Structure

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:

├── index.yaml
└── 00_Chapter Name
    ├── index.yaml
    └── 00_Sequential Name
        ├── index.yaml
        └── 00_Vertical
        └── 01_Second Vertical

EOCS Course with Vertical Directories (Multiple blocks):

├── index.yaml
└── 00_Chapter Name
    ├── index.yaml
    └── 00_Sequential Name
        ├── index.yaml
        └── 00_verticalname
            ├── index.yaml
            ├── 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.

Index Files

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).


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


Attribute Location Optional/Required Default
chapter display_name index.yaml Optional Generated from parent directory name
chapter url_name index.yaml Required None


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


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
You can’t perform that action at this time.