An authoring, teaching and learning environment: An AGPL-licensed open source LMS.
Getting started
Install prerequisites
To build, you need Java 25, Node 24 and SBT. To run, you need PostgreSQL 17, OpenSearch and Valkey/Redis.
MacOS with Homebrew
The follow steps assume a modern macOS and Homebrew, but other OS and environments will work too. The default configuration expects that the required services are all available on their standard ports.
Build tools
% brew install openjdk@25 node@24 sbt
Follow the instructions to add node and java to your PATH (or use
nvm or jenv or suchlike). Expect that node --version is 24
and java --version is 25. Then enable Node corepack.
% corepack enable
PostgreSQL
% brew install postgresql@17
Follow the instructions to add PostgreSQL to your PATH and to
start the service.
OpenSearch
% brew install opensearch
Follow the instructions to start the service.
Valkey/Redis
% brew install valkey
Follow the instructions to start the service. Redis will also work.
Configure the platform
The platform needs a database, a keystore and some secrets.
Create a database
Create a database and user. You'll need to choose a password for the database user and remember it for later.
% createuser -P ug
Enter password for new role: <dbpass>
% createdb -O ug -E utf-8 underground
If these commands are not found, make sure you added postgres to your PATH above
and source your rc file if necessary.
Generate a keystore
Generate a keystore for the Tomcat server. You'll need to choose a password for the keystore and remember it for later.
% keytool -genkey -keystore backend/keystore -alias localhost -dname "CN=localhost" -sigalg SHA256withRSA -keyalg RSA -validity 365
Enter keystore password: <storepass>
Re-enter new password: <storepass>
Write your local config
Create a file backend/deploy/src/main/resources/user.conf. You will need to choose
a password for the overlord (super-admin) and test accounts and enter the keystore and
database user passwords from above:
overlord.password = "<rootpass>"
de.strap.user.password = "<adminpass>"
keystore.password = "<storepass>"
de.databases.underground.datasource.pass = "<dbpass>"
If OpenSearch required an admin password for setup, add these lines:
opensearch.username = "admin"
opensearch.password = "<ospass>"
Build and publish the frontend locally
The frontend components are built using Vite and then packaged and published locally as JAR files for convenience to the backend.
% cd frontend/
% sbt install build publishLocal
This builds the three frontend packages in parallel, and publishes the resulting artifacts to your local Ivy repository.
Building individual projects
If there are problems with the combined build step, you can build the projects individually using Yarn:
% cd frontend/authoring/ # or platform/ or courseware/
% yarn install
% yarn build
You still need to sbt publishLocal if you build individually.
Build and start the backend
The backend is build with SBT and runs directly in an embedded Tomcat container.
% cd backend/
% sbt -J-Xmx4G
sbt:de> up
After a brief interlude you should see the message "CPXP ready". Log messages
are available in logs/detomcat.json.
Log in as super-admin and create a domain
Navigate to:
https://127.0.01:8181/control/admin.
You'll have to accept the HTTPS security warning.
Login using the username root and the rootpass password you chose above.

Navigate to Domains, choose Add Domain / Basic Domain.
Under Domain Settings enter the following values:
- Identifier:
lo - Name:
LO University - Short Name:
LO - Primary Host Name:
localhost
Under Profile Settings select the Test Data checkbox to create some test accounts including the local admin.

Click Submit and wait for the domain to provision. You will be launched into the administration portal for the domain.
Log in as an admin and author some content
Navigate to:
https://localhost:8181/.
You'll have to accept the HTTPS security warning.
Login using the username admin and the adminpass password you chose above.

Click on the Authoring tab, click New Project, enter a name such as "First Project" and click Create Project.

Create content using the authoring environment.

Preview content using the Eye of Horus menu.

LO Platform copyright © 2007–2025 LO Ventures LLC.
Released under the terms of the AGPL-3.0.
For custom licensing, contact us at info @ lo.ventures.
For culpability, please see the hall of blame.