Rafael Tonholo

@rafael.tonholo.dev

Android Developer 💜 Kotlin lover 📱 Jetpack Compose addicted 💡 Always trying to learn new things 🇧🇷🇨🇦

One of the things we love most about our community is its passion for every detail. One of our design team recently sat down with ten of our users to learn how they use Thunderbird, and what would make using it even better! 📣 #Thunderbird #OpenSource blog.thunderbird.net/2026/07/deskt…

Desktop settings research: what we learned from your feedback - The Thunderbird Blog

Quick overview of the insights gathered from interviewing 10 users about how they manage preferences and configurations in Thunderbird desktop.

blog.thunderbird.net

Last Friday, we announced a ✨ new default structure ✨ for Kotlin Multiplatform projects. (Nothing like a late Friday afternoon release!) In case you missed that, here’s a quick recap of what’s new! 🧵👇

Someone just shared, out of the blue, my project on another social media! That is the first time it ever happened and I was so happy to see that! Sometimes I wonder if I should ever keep working on it, if ever people are using it or not. It felt heartwarming seeing that, tbh!

Metro is so good! If you haven't tried yet, I strongly suggest you to!! I wish IntelliJ allowed non-bundled K2 compiler plugins to contribute their FIR checkers to the IDE so we could see diagnostics in real-time. Perhaps a Metro IntelliJ plugin could bridge the gap until then

Zac Sweers@zacsweers.dev · 4mo ago

Metro 0.13.0 adds top-level contribution providers, Circuit code gen, and a new @DefaultBinding annotation. This also removes most deprecated APIs as Metro prepares to go stable (!!). If you have runtime API feedback, now is the time! github.com/ZacSweers/me...

I've just released the website for CLI/Gradle Plugin code, built using KMP! It also features a playground editor where you can convert your SVGs without needing to download anything! And the best is that everything runs locally on your browser! svgtocompose.tonholo.dev #AndroidDev #KMP

SVG to Compose - Convert SVG and AVD to Compose ImageVector

Convert SVG and Android Vector Drawables into Jetpack Compose ImageVector code. CLI tool and Gradle plugin for Kotlin Multiplatform.

svgtocompose.tonholo.dev

Why Compose HotSwan 🦢 It explains how Compose HotSwan brings true Hot Reload to Android, avoiding rebuilds and app restarts. It enables instant UI updates on a running app while preserving state, improving development speed. hotswan.dev/docs/how-it-...

Compose HotSwan - Android Hot Reload for Jetpack Compose

Hot reload your Jetpack Compose UI instantly without rebuilding. Compose HotSwan is a JetBrains IDE plugin for Android developers.

hotswan.dev

Today I’m open-sourcing Dejavu! Testing UI performance in Jetpack Compose is frustrating. We profile and watch tools, yet regressions still creep in. I built Dejavu to make recomposition behavior something you can actually test.

A screenshot of code that reads:

// Create a Recomposition Tracking Rule
@get:Rule
val composeTestRule = createRecompositionTrackingRule()

@Test
fun incrementCounter_onlyValueRecomposes() {
  // Perform an action
  composeTestRule.onNodeWithTag("inc_button")
    .performClick()

  // Assert that Composables change like you expect
  composeTestRule.onNodeWithTag("counter_value")
    .assertRecompositions(exactly = 1)

  // Or assert that they remain stable
  composeTestRule.onNodeWithTag("counter_title")
    .assertStable() // asserts recompositions = 0
}