Repository navigation
v0.4.0
v0.4.0 Release Notes
Release date: February 24, 2026
Highlights
- Expanded multiplatform migration coverage across
kcsgandkcsg-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.utilusage in core modules - reduced JVM stream dependencies in core and vendored code
- moved IO-facing APIs toward
kotlinx-iopath/source abstractions
- reduced
- Added delegate logger APIs and removed direct core SLF4J coupling.
- Migrated
Edgeoptional-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.1and 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 changedFileUtil.write()/FileUtil.read()— parameter type changedSTL.file()— parameter type changedOpOverride.file()— parameter type changedObjFile.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.