Cwackers
1.1.0indexedOffers advanced image tiling support, replicating Illustrator's design system directly in code with multiple tiling modes and customization options without image editing.
Offers advanced image tiling support, replicating Illustrator's design system directly in code with multiple tiling modes and customization options without image editing.

Advanced Image Tiling for Compose Multiplatform
Cwackers is a Kotlin Multiplatform library that brings advanced image tiling support to Jetpack Compose. It implements the same 5 tiling modes found in Adobe Illustrator and other design programs, making it simple to go from design to implementation without hacks like adding artificial whitespace or clever cropping.
Out of the box, Compose only supports simple grid tiling using an ImageShader. With Cwackers, you get full parity with Illustrator’s tiling system, meaning you can replicate your design mockups directly in code - no extra image editing required. This means all tiling modes (grid, brick by column, brick by row, hex by column, and hex by row) are available. All options for each mode, including spacing, tile alpha, and offsets are also available.
To integrate Cwackers into your Compose Multiplatform project, follow these steps:
Add the dependency:
Copyright 2025 Infinite Retry Labs
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance the License.
You may obtain a copy of the License at
http:
Unless applicable law agreed to writing, software
distributed under the License distributed an BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express implied.
See the License the specific language governing permissions
limitations under the License.
// For KMP projects:
commonMain {
implementation("com.infiniteretry.cwackers:cwackers:1.1.0")
}
// For Android projects:
dependencies {
implementation("com.infiniteretry.cwackers:cwackers:1.1.0")
}
Use the simple modifier
@Composable
fun MyScreen() {
Box(
modifier = Modifier
.fillMaxSize()
.tiledBackground(
painter = painterResource(R.drawable.my_cool_tile), // Replace with Res.drawable.my_cool_tile for CMP
tileMode = TileMode.HexByRow(), // Lots of customizability here
),
)
}
Surfaced from shared tags and platforms — no rankings paid for.