Skip to content

Development

Piotr Grabowski edited this page Dec 21, 2022 · 16 revisions

Technology

Kamite’s backend (including the control window GUI) is built with Java 19 (preview featues enabled); its web server specifically—with Javalin.

The client is built with TypeScript + SolidJS.

Running for development

To compile and run the backend, run:

DEV=1 mvn compile exec:java -Dexec.args='--debug --controlWindow=no'

This requires Java 19.

To compile and run the client, run:

pnpm install
pnpm dev

Hot-reload version of the client is then served on port 3000, while the backend’s HTTP API endpoint runs on the usual configured program port (4110 by default).

Development-specific config

dev {
  # Normally in dev mode the client is served separately using a dev server.
  # With the following option enabled, the client also will be served by the
  # backend from the client build done before compiling the program
  serveStaticInDevMode = false
}

Config handling

The config file’s shape is defined in config/config.spec.hocon (specification format reference). This file is used as the basis for generating the src/main/java/io/github/kamitejp/config/Config.java source file (not checked into VCS), which therefore must be done every time the specification file changes. To generate the Config.java, run:

make gen-config

This also generates the src/main/java/resources/known_config_keys.txt file (not checked into VCS either) that is included into the program JAR and used at runtime to check user’s config for unknown keys.

Code linting

make lint-java
Analyzes the Java code with PMD.

Beyond that, IntelliJ IDEA inspections are included, but they are work in progress: many of the ones that we will want disabled are not yet disabled, and for those that we will want to keep, a large part of the codebase has not been fixed yet.

make lint-ts
Typechecks the TypeScript code and lints it with eslint.

Docs

README.md and CHANGELOG.md are linted with markdownlint (make lint-docs).

The Readme’s table of contents is generated with mdtoc.rb.

Textractor extension

The C++ source for the Kamite Send Textractor extension is in the extra/textractor/src directory. The build commands are specified under the textractor target in the Makefile.