Skip to content

Platform baseline

AreaRuleLevelEditora reference
JDKJDK 25 or newer. maven.compiler.release 25 is the floor, not the ceiling: build and bundle a current JDK (the enforcer range is [25,), open-ended). The bundled runtime is jlinked; users never install JavaMUSTpom.xml
JavaFXJavaFX 27 or newer (javafx.version 27 is the floor)MUSTpom.xml
ModulesOne named JPMS module (com.<app>); module-info.java opens only what reflection, FXML and Jackson needSHOULDsrc/main/java/module-info.java
Theme toolkitAtlantaFX 3.x (atlantafx-base) for controls; light and dark themes; app CSS uses AtlantaFX -color-* tokens, never hex literalsMUSTui/Themes.java, app.css
UI fontBundle Inter (Regular, Bold, Italic, BoldItalic + OFL.txt); register with Font.loadFont before any stylesheet; attach ui-font.css to every scene and dialog pane. Gives the family one look on every OSSHOULDui/Fonts.java
BuildMaven with the Maven Wrapper (mvnw, mvnw.cmd) committed, so ./mvnw works on a clean machineMUSTmvnw, .mvn/wrapper/
Null safetyJSpecify annotations, checked by NullAway on Error Prone at compile time. Every package is @NullMarked in its own package-info.javaMUSTdocs/conventions.md#null-annotations-jspecify-checked-by-nullaway
FormattingSpotless with Palantir Java Format; CI fails an unformatted changeMUSTpom.xml (spotless plugin)
TestsJUnit 5 + TestFX over JavaFX’s built-in Headless glass platform (-Dglass.platform=Headless), so FX tests need no display, no xvfb and no MonocleMUSTdocs/testing.md, FxTestSupport
CoverageJaCoCo check at mvn verify: ≥ 0.90 lines, ≥ 0.90 methods, ≥ 0.79 branches, plus per-package floorsMUSTpom.xml jacoco-check
Loggingjava.util.logging, captured in-app by the Debug LogSHOULDui/DebugLog.java
JSON configJackson POJOs with a SCHEMA_VERSION eachSHOULDconfig/Settings, config/migration/ConfigSchema.java
Editora's Appearance settings page with font, theme and editor theme choices and a code preview
Settings → Appearance in Editora: language, fonts, app theme and editor theme, with a live preview.

Everyday commands (identical in every repo)

Section titled “Everyday commands (identical in every repo)”
Terminal window
./mvnw javafx:run # run the app
./mvnw test # unit + headless FX tests, writes the JaCoCo report
./mvnw spotless:apply # format
./mvnw verify # full gate: tests, coverage check, NullAway
./mvnw -Pfatjar package # runnable fat jar for this OS
./mvnw clean -Pdist package # native installer for this OS (clean is mandatory)

The clean in every -Pdist build is mandatory: incremental compilation can leave synthetic enum-switch classes out of target/classes, and jlink then ships an app whose keyboard fails on the first keypress.

Pauta 1.1.0 · · Changelog