Getting Started
Creating a New Course
Create a new project directory and install @freecodecamp/freecodecamp-os
:
mkdir <COURSE_DIR>
cd <COURSE_DIR>
npm init -y
npm install @freecodecamp/freecodecamp-os
Configuring Your Course
Create a freecodecamp.conf.json
file in the project root:
touch freecodecamp.conf.json
Add the following required configuration:
{
"version": "0.0.1",
"config": {
"projects.json": "<PROJECTS_JSON>",
"state.json": "<STATE_JSON>"
},
"curriculum": {
"locales": {
"<LOCALE>": "<LOCALE_DIR>"
}
}
}
Example
{
"version": "0.0.1",
"config": {
"projects.json": "./config/projects.json",
"state.json": "./config/state.json"
},
"curriculum": {
"locales": {
"english": "./curriculum/locales/english"
}
}
}
There are many more configuration options available. See the configuration page for more details.
Create the projects.json
file:
[
{
"id": 0,
"dashedName": "<PROJECT_DASHED_NAME>"
}
]
There are many more configuration options available. See the configuration page for more details.
Create the state.json
file:
{}
Initialise this file with the initial state of the course. If you want the course to start on a project (instead of the landing page), replace null
with the dashedName
of the project.
Create the curricula files:
mkdir <LOCALE_DIR>
touch <LOCALE_DIR>/<PROJECT_DASHED_NAME>.md
Add the Markdown content to the curricula files. See the project syntax page for more details.
Create the project boilerplate/working directory in the root:
mkdir <PROJECT_DASHED_NAME>
<COURSE_DIR>/
├── freecodecamp.conf.json
├── <PROJECTS_JSON>
├── <STATE_JSON>
└── <LOCALE_DIR>/
└── <PROJECT_DASHED_NAME>.md
If using the terminal
feature:
├── <CONFIG_BASH>/
│ ├── <CONFIG_BASH_BASHRC>
│ └── <CONFIG_BASH_SOURCERER>
├── .logs/
│ ├── .bash_history.log
│ ├── .cwd.log
│ ├── .history_cwd.log
│ ├── .next_command.log
│ ├── .temp.log
│ └── .terminal_out.log
If using the tooling
feature:
├── <CONFIG_TOOLING_HELPERS>
Create a .vscode/settings.json
file to configure the freeCodeCamp - Courses extension:
{
// Open the course when the workspace is opened
"freecodecamp-courses.autoStart": true,
// Automatically adjust the terminal logs if used
"freecodecamp-courses.prepare": "sed -i \"s#WD=.*#WD=$(pwd)#g\" ./bash/.bashrc",
// Command run in terminal on `freeCodeCamp: Develop Course`
"freecodecamp-courses.scripts.develop-course": "NODE_ENV=development npm run start",
// Command run in terminal on `freeCodeCamp: Run Course`
"freecodecamp-courses.scripts.run-course": "NODE_ENV=production npm run start",
// Preview to open when course starts
"freecodecamp-courses.workspace.previews": [
{
"open": true,
"url": "http://localhost:8080",
"showLoader": true,
"timeout": 4000
}
],
// The below settings are needed for using the terminal feature
"terminal.integrated.defaultProfile.linux": "bash",
"terminal.integrated.profiles.linux": {
"bash": {
"path": "bash",
"icon": "terminal-bash",
"args": ["--init-file", "./bash/sourcerer.sh"]
}
}
}
A few more settings are available, and can be seen and configured from the VSCode Settings UI.