Thanks a lot for contributing to Komga!
You will need:
- Java JDK version 17 & 21
- Nodejs version 18+ (check the
.nvmrc
file)
- run
npm install
in thekomga-webui
folder of the project. This will install the necessary tooling for the webui.
Komga's commit messages follow the Conventional Commits standard. This enables automatic versioning, releases, and release notes generation.
Komga is composed of 3 projects:
komga
: a Spring Boot backend server that hosts the APIs, but also serves the static assets of the frontend.komga-webui
: a VueJS frontend, built at compile time and served by the backend at runtime.komga-tray
: a thin desktop wrapper that displays a tray-icon
Komga uses Spring Profiles extensively:
dev
: add more logging, disable periodic scanning, in-memory database, and enable CORS fromlocalhost:8081
(the frontend dev server)localdb
: a dev profile that stores the database in./localdb
.noclaim
: will create initial users at startup if none exist and output users and passwords in the standard output- if
dev
is active, will create[email protected]
with passwordadmin
, and[email protected]
with passworduser
- if
dev
is not active, will create[email protected]
with a random password that will be shown in the logs
- if
The backend project uses gradle
to run all the necessary tasks. If your IDE does not have gradle
integration, you can run the tasks from the root directory using ./gradlew <taskName>
.
Here is a list of useful tasks:
bootRun
: run the application locally, useful for testing your changes.prepareThymeLeaf
: build the frontend, and copy the bundle to/resources/public
. You need to run this manually if you want to test the latest frontend build hosted by Spring.test
: run automated tests. Always run this before committing.jooq-codegen-primary
: generates the jOOQ DSL.
bootRun
needs to be run with a profile or list of profiles, usually:
dev,noclaim
: when testing with a blank databasedev,localdb,noclaim
: when testing with an existing database
There are few ways you can run the task with a profile:
./gradlew bootRun --args='--spring.profiles.active=dev'
- On Linux:
SPRING_PROFILES_ACTIVE=dev ./gradlew bootRun
- On Windows:
SET SPRING_PROFILES_ACTIVE=dev
./gradlew bootRun
- If you use IntelliJ, some Run Configurations are saved in the repository and available from the Gradle panel
You can run a live development server with npm run serve
from /komga-webui
. The dev server will override the URL to connect to localhost:25600
, so you can also run gradle bootRun
to have a backend running, serving the API requests. The frontend will be loaded from localhost:8081
.
Make sure you start the backend with the dev
profile, else the frontend requests will be denied because of CORS.
To build the Docker image, you need to:
- have the webui built and copied to
/resources/public
. To do so, run./gradlew prepareThymeLeaf
- prepare the docker image via JReleaser. To do so, run
./gradlew jreleaserPackage
- the
Dockerfile
will be available inkomga/build/jreleaser/package/docker/