Requirements
What to install before you run your package, with Docker or without it.
For the Full Stack package
What your package contains
| Package | Apps in the download | Runs on its own |
|---|---|---|
| Full Stack | API, student site, admin dashboard | Yes, all three together |
| Student site | Student site | Yes, on bundled sample data until you connect a Learnio API |
| Admin dashboard | Admin dashboard | Yes, on an in-browser mock until you connect a Learnio API |
| API | API | Yes, serving the API only |
A single-app package does not include the other apps. The frontends can use an API you already run, but the API's code is only in the Full Stack and API packages.
With Docker
- Docker Desktop on macOS or Windows, or Docker Engine with the Compose plugin on Linux. The full stack starts with one
docker composecommand. - An internet connection for the first build, which downloads the base images and the dependencies.
- Nothing else: Docker brings Node.js, and the database is a SQLite file inside a Docker volume.
With Docker
- Docker Desktop on macOS or Windows, or Docker Engine on Linux. Your app has its own
Dockerfile; Compose is not needed. - An internet connection for the first build, which downloads the base image and the dependencies.
Without Docker
- Node.js 22 or 24, the LTS releases Learnio is tested on. Node 26 works too, but it no longer ships Corepack: run
npm install -g corepackfirst. - Yarn 4, through Corepack. Run
corepack enableonce; each app pins its own Yarn version, soyarnpicks the right one.
Database
No database server and no C++ compiler. The API uses SQLite by default and creates the file for you; Docker uses SQLite too. MySQL is supported as a configuration change, not a code change.
Ports
Each app listens on a fixed local port. Make sure nothing else uses them, or, with Docker, move one with SITE_PORT, ADMIN_PORT or API_PORT in a .env next to docker-compose.yml.
| App | Port |
|---|---|
| API | 8000 |
| Student site | 3030 |
| Admin dashboard | 3031 |
Port
The student site listens on port 3030. Make sure nothing else uses it.
Port
The admin dashboard listens on port 3031. Make sure nothing else uses it.
Port
The API listens on port 8000. Make sure nothing else uses it.
An API to connect
Nothing is needed to try your app: it runs on its own sample data. To use real data, it needs a running Learnio API, whose address you set in its .env. The API is sold as its own package.
Optional services
None of these is needed to run Learnio locally. Each is switched on by its keys in back-end/.env.
| Service | Without it |
|---|---|
| Cloudflare R2 or another S3-compatible bucket | Media is served from the apps' bundled sample files; only uploading new media stops working. |
| Resend, for email | Every message is written to the API's log instead. |
| Stripe and PayPal | The checkout runs on a built-in simulator that completes orders without charging anyone. Free courses never need a processor. |
| Google, OpenAI or DeepSeek keys | The AI assistant asks the admin for their own key in the browser. |
| A Jitsi Meet server | The calendar shows live classes as unavailable. |