Skip to content


The Compose Rules is a set of custom Ktlint / Detekt rules to ensure that your composables don't fall into common pitfalls, that might be easy to miss in code reviews.


It can be challenging for big teams to start adopting Compose, particularly because not everyone will start at same time or with the same patterns. We tried to ease the pain by creating a set of Compose static checks.

Compose has lots of superpowers but also has a bunch of footguns to be aware of as seen in this Twitter Thread.

This is where our static checks come in. We want to detect as many potential issues as we can, as quickly as we can. In this case we want an error to show prior to engineers having to review code. Similar to other static check libraries we hope this leads to a "don't shoot the messengers" philosphy which will foster healthy Compose adoption.

Using with ktlint

You can refer to the Using with ktlint documentation.

Using with detekt

You can refer to the Using with detekt documentation.

Migrating from Twitter Compose Rules

The process to migrate to these rules coming from the Twitter ones is simple.

  • Change the project coordinates in your gradle build scripts - For detekt, com.twitter.compose.rules:detekt:$version becomes io.nlopez.compose.rules:detekt:$version - For ktlint, com.twitter.compose.rules:ktlint:$version becomes io.nlopez.compose.rules:ktlint:$version.
  • Update $version to the latest: Latest version - see the project releases page.
  • If you are using Detekt: update the config file (e.g. detekt.yml) so that the rule set name TwitterCompose becomes Compose. Keep in mind that there are a lot of new rules in this repo that weren't in Twitter's, so you'd be better copying over from the example configuration.
  • Done!