Skip to content

v0.4.0

Choose a tag to compare

@Monkopedia Monkopedia released this 28 Feb 20:35
· 61 commits to master since this release

v0.4.0 Release Notes

Release date: February 24, 2026

Highlights

  • Expanded multiplatform migration coverage across kcsg and kcsg-dsl.
  • Added compile-smoke CI for JS, Wasm (wasmJs + wasmWasi), and Linux native targets.
  • Closed remaining DSL wrapper coverage gaps used by default/named-argument paths.

Runtime And API Changes

  • Replaced JVM-only hashing primitives with a pure Kotlin SHA-256 path.
  • Continued migration away from JVM-specific APIs:
    • reduced java.util usage in core modules
    • reduced JVM stream dependencies in core and vendored code
    • moved IO-facing APIs toward kotlinx-io path/source abstractions
  • Added delegate logger APIs and removed direct core SLF4J coupling.
  • Migrated Edge optional-style APIs and trimmed Java-style IO throws from public entry points.

Quality And Validation

  • Expanded oracle coverage and multiplatform verification scaffolding.
  • CI now runs compile smoke checks for:
    • JS
    • Wasm JS + Wasi
    • Linux X64 native
  • Coverage workflow now installs OpenSCAD runtime dependencies
    (libEGL.so.1 and GL stack) so oracle-backed verification is stable on
    GitHub-hosted Ubuntu runners.

Tooling And Build

  • Updated release workflow toolchain to Java 21.
  • Kept publishing workflow aligned with Gradle wrapper/tooling updates.

Upgrade Notes

Logger migration (since v0.3.0)

SLF4J is no longer used internally. All log output is dropped by default.
To receive KCSG log messages (STL parse errors, CSG warnings, etc.), install
a delegate at startup:

Logger.setLogger(object : Logger {
    override fun log(level: Logger.Level, tag: String, message: String, throwable: Throwable?) {
        println("[$level] $tag: $message")
        throwable?.printStackTrace()
    }
})

IO path type migration (since v0.3.0)

All file-facing APIs now use kotlinx.io.files.Path instead of
java.nio.file.Path. This affects:

  • KcsgHost.findStl() — return type changed
  • FileUtil.write() / FileUtil.read() — parameter type changed
  • STL.file() — parameter type changed
  • OpOverride.file() — parameter type changed
  • ObjFile.toFiles() — parameter type changed

JVM consumers can convert with kotlinx.io.files.Path(javaPath.toString()).
Deprecated JVM compatibility extensions are available for some methods.

Tilted extrude behavior change (since v0.3.0)

Extrude.points() with non-coplanar paths previously applied near-zero
rotation due to a double radian-to-degree conversion bug. This is now fixed —
tilted extrusions produce correct geometry. Models that were manually tuned
to compensate for the old bug may need adjustment.

Other notes

  • If you integrate with internal logging hooks, migrate to the new delegate
    logger API surface instead of binding to backend-specific logging classes.
  • For CI consumers mirroring this setup, ensure OpenSCAD runtime libs are
    installed on Linux hosts before oracle fixture generation/tests.