This also starts Mailpit, which catches outgoing email at http://localhost:8025.
Seed the database:
Terminal window
pnpmrunseed
This creates a test user with no completed certifications. For a user with certifications, run pnpm run seed:certified-user instead, then clear your browser cookies and sign in again.
Start the client and the API:
Terminal window
pnpmrundevelop
A full curriculum build takes several minutes. Open http://localhost:8000 when it finishes.
A dev container runs the same image as GitHub Codespaces, on your own machine. The image includes Node.js, pnpm and dependency caches. Container setup installs the project dependencies and starts MongoDB and Mailpit as separate services.
In Docker’s resource settings, give it at least 4 CPUs and 16 GB of memory. The client build needs a 7 GB heap, and Docker treats its memory setting as a hard limit.
Open the Command Palette (Ctrl+Shift+P / Cmd+Shift+P), then select Dev Containers: Reopen in Container.
Wait for the setup to finish. The terminal shows Done. Press any key to close the terminal. The container installs the dependencies, writes .env, starts MongoDB and Mailpit, and seeds the database for you.
Open the Command Palette again, type Run Task, then select Start freeCodeCamp. Or open a terminal and run:
Terminal window
pnpmrundevelop
Wait for the build. It takes several minutes the first time. Then open http://localhost:8000.
A codespace runs the project on a GitHub server. You install nothing, and you work in your browser or in VS Code.
Go to your fork at https://github.com/YOUR_USER_NAME/freeCodeCamp.
Click the green Code button, select the Codespaces tab, then click Create codespace on main.
Pick the 4-core, 16 GB RAM machine, or a larger one. The codespace then installs every dependency, starts MongoDB and Mailpit, seeds a test user, writes .env, and installs the ESLint and Prettier extensions.
Wait for the setup to finish, then open a terminal and run:
Terminal window
pnpmrundevelop
Wait for the build. It takes several minutes the first time. VS Code shows a notification for port 8000 when the client is ready — open it to view the client in a new browser tab.