Aardink mascot split into ink outline, paper fill, and ink detail layers beside the assembled app iconAardink mascot split into ink outline, paper fill, and ink detail layers beside the assembled app icon

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.

Note

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.