

Updates to the Aardink editor v0.4.1

Hot on the heels of the big 0.4.0 release, Aardink 0.4.1 shipped on 12 September. It is a small patch release with no library changes at all - if you are on 0.4.0 there is nothing you need to do - but it tidies up two things in the repo that were bugging me.
The mascot finally looks right in every theme
The sample app’s mascot used to be the launcher foreground drawable, clipped to rounded corners and shown as-is. That worked fine against one background and looked wrong against every other one, which is a problem for an app whose whole point is switching editor themes.
The artwork is line art whose interior fills are painted over the outline, so a single tint over one drawable flattened the whole thing into a silhouette. The fix was to split it into three vector layers - the ink outline, the paper fills, and the ink detail - and stack them in that order, tinting each one separately:
@Composable
fun Mascot(
modifier: Modifier = Modifier,
size: Dp = 88.dp,
inkColor: Color = MaterialTheme.colorScheme.onSurface,
paperColor: Color = MaterialTheme.colorScheme.surfaceContainerHigh,
) {
Box(modifier = modifier.size(size)) {
MascotLayer(R.drawable.ic_aardink_mascot_ink_base, inkColor, "Aardink mascot")
MascotLayer(R.drawable.ic_aardink_mascot_paper, paperColor, null)
MascotLayer(R.drawable.ic_aardink_mascot_ink_detail, inkColor, null)
}
}
The paper colour defaults to the container colour of the card the mascot sits on, so the interior fills read as
transparent, and the ink follows the theme’s onSurface. Drop it on another surface and pass your own colours. The
adaptive launcher icon and its monochrome variant were rebuilt from the same layers, so the home-screen icon matches
too.
This only affects the sample module. The published aardink, aardink-languages and aardink-languages-lsp
artifacts are identical to 0.4.0 apart from the version number.
Toolchain bumps
The build moves to Kotlin 2.4.20 and the September 2026 Compose BOM. Nothing in the library needed to change for either, but keeping the sample on current tooling means the project builds cleanly against what most people have installed.
That is the whole release. If you skipped 0.4.0, go and read that post - it is the one with the new language services and the external language-server bridge.