Skip to content

Releases

v1.11.0

Choose a tag to compare

@pambrose pambrose released this 13 Oct 07:25
b1d2528

A dependency-refresh release on top of 1.10.0 that also reworks how make versions reports dependency updates. There are no DSL, content, or runtime source changes. Existing Content.kt definitions compile and run unchanged, and the build still targets JDK 25. The minor-version bump reflects the readingbat-core minor bump, the core-utils major-version jump, and the new make versions-all target.

Highlights

  • make versions lists only what is behind. A custom outputFormatter on DependencyUpdatesTask (in configureVersions() in build.gradle.kts) replaces the plugin's report. It prints one line per outdated dependency (group:name current -> latest), a ? line for each dependency that could not be checked, a line for a newer Gradle release, and All dependencies are up to date when nothing is behind. The existing pre-release filter is unchanged.
  • New make versions-all target. It runs the same task with --output-formatter=plain to get the plugin's full report, which also lists every up-to-date dependency. Only this target writes build/dependencyUpdates/report.txt now.
  • readingbat-core / readingbat-kotest 3.4.0 → 3.5.0. A minor bump; no call-site changes were required. correctAnswers() is still a suspend function, so ContentTests.kt keeps its runBlocking { … } wrapper.
  • core-utils 3.2.2 → 5.1.1. This is two major versions. Content.kt (FileSystemSource, GitHubRepo, OwnerType) and ContentTests.kt (toDoubleQuoted) compile unchanged. readingbat-core 3.5.0 itself moved to the common-utils 5.1.1 line, so the whole runtime classpath agrees on 5.1.1 and no conflict resolution is involved.
  • Kotlin 2.4.10 → 2.4.21. A patch bump. The -Xreturn-value-checker=check compiler flag on compileKotlin still reports nothing.
  • Gradle 9.7.1 → 9.8.1. The wrapper jar, gradle-wrapper.properties, gradlew.bat, and the gradle-wrapper catalog key all moved together via make upgrade-wrapper. The configuration cache still stores and reuses entries.
  • ben-manes versions plugin 0.64.0 → 0.66.0.
  • Gradle daemon JVM args. gradle.properties now sets org.gradle.jvmargs to give the Gradle and Kotlin daemons a 4 GB heap, write a heap dump on OutOfMemoryError, and use UTF-8 file encoding.
  • Docs refreshed. CHANGELOG.md and RELEASE_NOTES.md gained 1.11.0 entries, llms.txt picked up the new Gradle, readingbat-core, and core-utils versions and the new targets, and README.md / CLAUDE.md now document make versions and make versions-all.

Dependencies

Library Version
Kotlin 2.4.21
Ktor 3.6.0
Kotest 6.2.5
readingbat-core 3.5.0
core-utils 5.1.1
kotlin-logging 8.0.4
detekt 2.0.0-alpha.6
kotlinter 5.7.0
Gradle 9.8.1
JDK toolchain 25

Unchanged from 1.10.0: Ktor, Kotest, kotlin-logging, detekt, kotlinter, and the JDK toolchain.

Upgrade Notes

  • No source changes are required for forks that track this template. This release touches only build.gradle.kts (the dependencyUpdates formatter), the Makefile, gradle/libs.versions.toml, gradle/wrapper/*, gradlew.bat, gradle.properties, and the docs.
  • core-utils 5.1.1 removes or changes some public API, including ScopeFunctionsKt, SingleAssignVar.ThreadSafeSingleAssignVar, MiscFuncs.waitForPortAvailable (which now returns Boolean), toCreated(LocalDateTime), and the SecureObjectInputStream, NonNullableAtomicReferenceDelegate, and SingleSetAtomicReferenceDelegate constructors. This template uses none of them. Forks that call core-utils directly beyond what Content.kt uses should check their call sites against that list.
  • The new org.gradle.jvmargs asks for a 4 GB daemon heap. On a machine with little memory, lower -Xmx in gradle.properties.
  • Re-run ./gradlew --version after pulling so the new wrapper (9.8.1) downloads on first use.
  • Under Gradle 9.8.1 every build prints "Deprecated Gradle features were used in this build, making it incompatible with Gradle 10". The cause is detekt 2.0.0-alpha.6 calling Configuration.setVisible(), which Gradle 9.8 deprecated and plans to remove in Gradle 11. It's harmless for now and should go away with a later detekt release.
  • make versions no longer writes build/dependencyUpdates/report.txt. Use make versions-all if you rely on that file.
  • JDK 25 is still required, unchanged since 1.8.0.

Full Changelog: 1.10.0...1.11.0

v1.10.0

Choose a tag to compare

@pambrose pambrose released this 22 Sep 05:19
41f2269

A dependency-refresh release on top of 1.9.1, plus cross-platform line-ending normalization. There are no DSL, content, or runtime source changes — existing Content.kt definitions compile and run unchanged, and the build still targets JDK 25. The minor-version bump tracks the minor bumps in Ktor and readingbat-core rather than any change in this repo's own API.

Highlights

  • readingbat-core / readingbat-kotest 3.3.1 → 3.4.0. A minor bump; no call-site changes were required. correctAnswers() remains a suspend function, as it has since 3.2.0, so ContentTests.kt keeps its runBlocking { … } wrapper.
  • Ktor 3.5.1 → 3.6.0. The catalog and readingbat-core 3.4.0 agree on this version — runtimeClasspath resolves io.ktor:ktor-server-core to 3.6.0 with no conflict resolution in play.
  • Kotest 6.2.3 → 6.2.5. A patch bump; the libs.bundles.testing bundle and the StringSpec/JUnit5 setup are unchanged.
  • Gradle 9.6.1 → 9.7.1. The wrapper jar, gradle-wrapper.properties, and the gradle-wrapper catalog key all move together. The configuration cache continues to store and reuse entries.
  • Static-analysis and tooling bumps. detekt 2.0.0-alpha.5 → 2.0.0-alpha.6, Kotlinter 5.6.0 → 5.7.0, and the ben-manes versions plugin 0.57.0 → 0.64.0. Both linters re-run clean under the new versions, so no .editorconfig changes were needed and the repo still requires no detekt baseline.
  • .gitattributes added. Git now normalizes line endings per file type instead of relying on each contributor's core.autocrlf setting: gradlew is pinned to lf so the launcher stays executable on Linux and macOS after a Windows checkout, *.bat to crlf, and *.jar / *.png are marked binary so Git stops attempting text diffs or EOL conversion on them — which also keeps gradle/wrapper/gradle-wrapper.jar intact across wrapper upgrades.
  • Docs refreshed. CHANGELOG.md and RELEASE_NOTES.md gained 1.10.0 entries, llms.txt picked up the new Gradle and readingbat-core versions plus the new file, and README.md / CLAUDE.md now document the .gitattributes conventions and that the Gradle version is driven by the gradle-wrapper catalog key via make upgrade-wrapper.

Dependencies

Library Version
Kotlin 2.4.10
Ktor 3.6.0
Kotest 6.2.5
readingbat-core 3.4.0
core-utils 3.2.2
kotlin-logging 8.0.4
detekt 2.0.0-alpha.6
kotlinter 5.7.0
Gradle 9.7.1
JDK toolchain 25

Unchanged from 1.9.1: Kotlin, core-utils, kotlin-logging, and the JDK toolchain.

Upgrade Notes

  • No source changes are required for forks that track this template — this release touches only gradle/libs.versions.toml, gradle/wrapper/*, gradle.properties, .gitattributes, and the docs.
  • Re-run ./gradlew --version after pulling to let the new wrapper (9.7.1) download on first use. Forks that track their own Gradle version should bump the gradle-wrapper key in gradle/libs.versions.toml and run make upgrade-wrapper, which drives ./gradlew wrapper from that key.
  • Windows contributors may see a one-time line-ending renormalization the first time they check out with .gitattributes in place. git add --renormalize . resolves any spurious whole-file diffs.
  • JDK 25 remains required, unchanged from 1.8.0.
  • Deliberately not adopted in this release: Kotlin 2.4.20 and core-utils 3.2.3 / 4.1.0, all of which ./gradlew dependencyUpdates reports as available.

Full Changelog: 1.9.1...1.10.0

v1.9.1

Choose a tag to compare

@pambrose pambrose released this 01 Aug 20:25
4b850ff

A patch release on top of 1.9.0: a dependency refresh, a build-plugin coordinate fix, and a CLAUDE.md trim. There are no DSL, content, or runtime source changes — existing Content.kt definitions compile and run unchanged, and the build still targets JDK 25.

Highlights

  • readingbat-core / readingbat-kotest 3.3.0 → 3.3.1. A patch bump; no call-site changes were required. correctAnswers() remains a suspend function, as it has since 3.2.0.
  • core-utils 3.2.1 → 3.2.2. A patch bump on the 3.x line adopted in 1.9.0. The template's four call sites — FileSystemSource, GitHubRepo, and OwnerType.Organization in Content.kt, plus toDoubleQuoted in ContentTests.kt — compile unchanged.
  • ben-manes versions plugin 0.54.0 → 0.57.0, with a coordinate move. The plugin's published ID changed from com.github.ben-manes.versions to io.github.ben-manes.versions; gradle/libs.versions.toml now points at the new ID. The catalog alias stays ben-manes-versions, so alias(libs.plugins.ben.manes.versions) in build.gradle.kts is untouched and ./gradlew dependencyUpdates / make versions behave exactly as before.
  • CLAUDE.md trimmed 89 → 31 lines. Removed the guidance a session can reconstruct from the repo itself — the build-command list (already surfaced by the self-documenting make help), the architecture tour, the dependency inventory, and the step-by-step CI description. What stays is the material the code can't teach: the initTestProperties() and suspend-correctAnswers() runtime gotchas, the gradle.properties / FAIL_ON_PROJECT_REPOS / configuration-cache build constraints, the pre-push lint etiquette, and the DSL conventions.

Dependencies

Library Version
Kotlin 2.4.10
Ktor 3.5.1
Kotest 6.2.3
readingbat-core 3.3.1
core-utils 3.2.2
kotlin-logging 8.0.4
detekt 2.0.0-alpha.5
kotlinter 5.6.0
Gradle 9.6.1
JDK toolchain 25

Upgrade Notes

  • No source changes are required for forks that track this template — this release touches only gradle/libs.versions.toml, gradle.properties, CLAUDE.md, and the release docs.
  • Forks that declare the ben-manes versions plugin themselves must update the coordinate from com.github.ben-manes.versions to io.github.ben-manes.versions. Forks that consume it through this repo's catalog alias need no change.
  • JDK 25 remains required, unchanged from 1.8.0.

Verification

  • ./gradlew --rerun-tasks check — BUILD SUCCESSFUL; all three ContentTests specs pass (Test all challenges, Test with correct answers, Test individual challenges), 3 tests, 0 failures, 0 errors.
  • ./gradlew buildFatJar — BUILD SUCCESSFUL; produces build/libs/server.jar.
  • ./gradlew lintKotlin detekt — both checks run cleanly.
  • ./gradlew dependencyUpdates — BUILD SUCCESSFUL under the new plugin coordinate, confirming the ID move resolves.
  • build/libs/readingbat-template-1.9.1.jar confirms the gradle.properties version bump took effect.

Full Changelog: 1.9.0...1.9.1

v1.9.0

Choose a tag to compare

@pambrose pambrose released this 26 Jul 15:40
54407f6

A dependency-refresh and CI release on top of 1.8.0. There are no DSL, content, or runtime source changes — existing Content.kt definitions compile and run unchanged, and the build still targets JDK 25.

Highlights

  • GitHub Actions CI. .github/workflows/ci.yml runs on pushes and pull requests targeting master. It checks out the repo, installs Temurin JDK 25, sets up Gradle via gradle/actions/setup-gradle@v4, runs ./gradlew --rerun-tasks check, then runs ./gradlew lintKotlin detekt. Lint and static analysis are now enforced on every PR rather than by convention.
  • readingbat-core / readingbat-kotest 3.2.1 → 3.3.0. No call-site changes were required; correctAnswers() remains a suspend function as of 3.2.0.
  • core-utils 2.9.3 → 3.2.1. A major-version bump of a library this template uses directly — FileSystemSource, GitHubRepo, and OwnerType.Organization in Content.kt, and toDoubleQuoted in ContentTests.kt. All four call sites compile unchanged against 3.x.
  • Kotlin 2.4.0 → 2.4.10, Kotest 6.2.1 → 6.2.3, Kotlinter 5.5.0 → 5.6.0.
  • Catalog version key renamed. [versions] ben-manes-versions → versions. The plugin alias remains ben-manes-versions, so alias(libs.plugins.ben.manes.versions) in build.gradle.kts is unchanged. This affects only the version.ref inside libs.versions.toml.

Documentation

  • CHANGELOG.md — 1.9.0 section plus the compare link.
  • RELEASE_NOTES.md — v1.9.0 highlights, dependency table, upgrade notes, and verification results.
  • CLAUDE.md / README.md — new "Continuous Integration" sections documenting the workflow.
  • README.md — CI status badge.
  • llms.txt — refreshed readingbat-core and current-version values; CI noted under Key Files and Tech Stack.

Dependencies

Library Version
Kotlin 2.4.10
Ktor 3.5.1
Kotest 6.2.3
readingbat-core 3.3.0
core-utils 3.2.1
kotlin-logging 8.0.4
detekt 2.0.0-alpha.5
kotlinter 5.6.0
Gradle 9.6.1
JDK toolchain 25

Upgrade Notes

  • No source changes are required for forks that track this template — this release touches only .github/workflows/ci.yml, gradle/libs.versions.toml, and gradle.properties.
  • Forks that add their own [versions] ben-manes-versions entry should rename the key to versions (or keep their own version.ref).
  • Forks with custom code against core-utils 2.x should re-verify against 3.x; this template's own usage needed no changes, but 3.0.0 is a major release.
  • JDK 25 remains required, unchanged from 1.8.0.

Verification

  • ./gradlew --rerun-tasks check — BUILD SUCCESSFUL; all three ContentTests specs pass (Test all challenges, Test with correct answers, Test individual challenges).
  • ./gradlew buildFatJar — BUILD SUCCESSFUL; produces build/libs/server.jar.
  • ./gradlew lintKotlin detekt — both checks run cleanly.
  • GitHub Actions CI passed on PR #11, confirming the build on a clean JDK 25 runner.

Full Changelog: 1.8.0...1.9.0

v1.8.0

Choose a tag to compare

@pambrose pambrose released this 03 Jul 22:01

A linting and toolchain-modernization release on top of 1.7.0. The content DSL is unchanged, but the project now targets JDK 25 and picks up readingbat-core 3.2.1, which adjusts one test call site.

Highlights

  • JVM toolchain 17 → 25. A JDK 25 is now required to build.
  • readingbat-core 3.1.5 → 3.2.1. correctAnswers is now a suspend function; ContentTests calls correctAnswers() inside a runBlocking { … } block. Existing Content.kt definitions compile and run unchanged.
  • Linting wired in. detekt (dev.detekt 2.0.0-alpha.5) and Kotlinter (org.jmailen.kotlinter 5.5.0) Gradle plugins, with make lint / make format / make detekt / make detekt-baseline shortcuts and a project-wide .editorconfig.
  • Gradle configuration cache enabled (org.gradle.configuration-cache=true).
  • Dropped Heroku deployment support. Removed Procfile, system.properties, and the heroku / logs Makefile targets; deploy the ./gradlew buildFatJar output (build/libs/server.jar) instead.
  • Build tidy-ups. Self-documenting Makefile (make help), a fixed make uberjar target (now ./gradlew buildFatJar), fat-jar config moved to Ktor's ktor { fatJar { … } } block, and jvm / gradle-wrapper versions promoted into the version catalog.
  • Kotlin challenge package renamed kgroup1 → kgroup to match the documented layout.

Dependencies

Library Version
Kotlin 2.4.0
Ktor 3.5.1
Kotest 6.2.1
readingbat-core 3.2.1
core-utils 2.9.3
kotlin-logging 8.0.4
detekt 2.0.0-alpha.5
kotlinter 5.5.0
Gradle 9.6.1
JDK toolchain 25

Upgrade Notes

  • Install a JDK 25 — the toolchain target moved from 17 to 25.
  • Forks invoking ./gradlew uberjar should switch to ./gradlew buildFatJar (or make uberjar).
  • Forks referencing libs.plugins.versions should rename to libs.plugins.ben.manes.versions.
  • Forks referencing the kgroup1 package should rename it to kgroup.
  • Heroku users: Procfile and system.properties were removed — deploy the fat JAR instead.

Full Changelog: 1.7.0...1.8.0

v1.7.0

Choose a tag to compare

@pambrose pambrose released this 04 May 06:31
b6b7b22

Release of ReadingBat Template 1.7.0.

Changes

  • Clean up Gradle build and bump version to 1.7.0 (#4)
  • Migrate repository configuration to settings.gradle.kts and clean up build.gradle.kts
  • Bump Gradle to 9.5.0 and update Kotlin, Ktor, and dependency versions
  • Update readingbat to 3.1.2, adjust group ID, and clean up build config
  • Migrate packages from JitPack to Maven Central and update dependencies

Full Changelog: 1.6.0...1.7.0

v1.6.0

Choose a tag to compare

@pambrose pambrose released this 04 May 06:33

Highlights

  • Upgrade Gradle to 9.0.0, then 9.4.0
  • Update Kotlin, Ktor, kotest 6.0.0, readingbat 3.0.5, utils 2.4.2
  • Add shadowJar config and test logging
  • Update Java runtime to 17 and remove redisEnabled config
  • Fix tests by adding initTestProperties and ktor-server-config-yaml
  • Migrate packages from JitPack to Maven Central
  • Update readingbat to 3.1.2, adjust group ID
  • Modernize README, add CLAUDE.md and llms.txt
  • Add .DS_Store to .gitignore
  • Fix unreachable slice1.py

Full Changelog: 1.5.0...1.6.0

v1.5.0

Choose a tag to compare

@pambrose pambrose released this 04 May 06:33

Highlights

  • Upgrade to Kotlin 1.9.22
  • Update to Kotlin 2.1.0 and Ktor 3.0.1
  • Update to readingbat-core 2.0.0
  • Convert to using libs.versions.toml

Full Changelog: 1.4.0...1.5.0

v1.4.0

Choose a tag to compare

@pambrose pambrose released this 04 May 06:33

Highlights

  • Upgrade to Kotlin 1.9.20
  • Routine jar updates

Full Changelog: 1.3.0...1.4.0

v1.3.0

Choose a tag to compare

@pambrose pambrose released this 04 May 06:33

Highlights

  • Routine jar/dependency updates

Full Changelog: 1.2.0...1.3.0