# Rodrigo Sicarelli > Rodrigo Sicarelli — Staff Software Engineer, Kotlin Multiplatform authority, speaker and OSS maintainer. > Content: CC BY-NC 4.0 (https://creativecommons.org/licenses/by-nc/4.0/) — attribution required: Rodrigo Sicarelli (https://rsicarelli.com). Code: Apache-2.0. ## Blog — English - [Claude Code 101: Demystifying Language Models](https://rsicarelli.com/en/blog/claude-code-101-demystifying-language-models): In the previous article, we built the entire factory: the evolution from manual production to autonomous machines, the ecosystem of agentic tools, the three pillars (prompt, context, and harness engineering). You know what the factory does, who works in it, and even how much revenue it pulls in. - [Claude Code 101: Introduction to Agentic Programming](https://rsicarelli.com/en/blog/claude-code-101-introduction-to-agentic-programming): September 2025. I was leading a critical dependency upgrade on a mobile app with millions of users. The kind of change that breaks tests in a cascade. The deadline was October: if it wasn't ready, the app wouldn't ship to the store. - [Fakt: Automating the Fake-over-mock pattern](https://rsicarelli.com/en/blog/fakt-automating-the-fake-over-mock-pattern-amh): Kotlin testing has a problem that gets worse the more successful your project becomes. - [The Hidden Cost of Default Hierarchy Template in Kotlin Multiplatform](https://rsicarelli.com/en/blog/the-hidden-cost-of-default-hierarchy-templates-in-kotlin-multiplatform): The Default Hierarchy Template in KMP projects is a great way to reduce boilerplate code and start working quickly. However, it came with an unexpected… - [KMP-102 - Modularization in KMP](https://rsicarelli.com/en/blog/kmp-102-modularizacao-no-kmp): In the last article we dug into the quirks of code exported to Objective-C headers, along with the best practices for what to export. - [KMP-102 - Optimizing Kotlin for Obj-C/Swift](https://rsicarelli.com/en/blog/kmp-102-otimizando-a-exportacao-do-kotlin-para-o-obj-cswift): In the last post, we learned how to use Kotlin code in Swift. We covered a few techniques to improve the code exported to Swift, and how annotations like @HiddenFromObjC and @HidesFromObjC control the visibility of code in Swift. - [KMP-102 - Using Kotlin Code in Swift](https://rsicarelli.com/en/blog/kmp-102-utilizando-codigo-kotlin-no-swift): In the last post, we learned how to create an XCFramework from Kotlin code and explored some characteristics of the generated build types. - [KMP-102 - Characteristics of the XCFramework in KMP](https://rsicarelli.com/en/blog/kmp-102-caracteristicas-do-xcframework-no-kmp): In the previous post, we learned how Kotlin/Native exports a collection of .frameworks in the XCFramework format. - [KMP-102 - XCFramework for KMP Devs](https://rsicarelli.com/en/blog/kmp-102-xcframework-para-devs-kmp): Welcome to the KMP-102 series. We dig deeper into Kotlin Multiplatform concepts, learning more about how to integrate our Kotlin code into iOS and beyond. - [Kotlin Koans BR: Import alias](https://rsicarelli.com/en/blog/kotlin-koans-br-alias-para-importacao-import-alias): When importing a class or function, you can give it a different name by adding as NewName after the import directive. This can be useful when… - [Kotlin Koans BR: Extension functions and properties](https://rsicarelli.com/en/blog/kotlin-koans-br-extension-functions-e-properties-funcoes-e-propriedades-estendidas): Implement the extension functions Int.r() and Pair.r() so they convert an Int and a Pair into a RationalNumber. - [Kotlin Koans BR: Named arguments](https://rsicarelli.com/en/blog/kotlin-koans-br-argumentos-nomeados): Make the joinOptions() function return the list in JSON format (for example, [a, b, c]) by specifying only two arguments. - [Kotlin Koans BR: Default arguments](https://rsicarelli.com/en/blog/kotlin-koans-br-argumentos-padrao): Imagine you have several overloads of foo() in your favorite language. You can replace them all with a single function in Kotlin. - [Kotlin Koans BR: Data Classes](https://rsicarelli.com/en/blog/kotlin-koans-br-classes-de-dados-data-classes): Rewrite the following code in Kotlin, then add the data modifier. A beginner-friendly look at Kotlin classes and data classes. - [Kotlin Koans BR: Sealed Classes](https://rsicarelli.com/en/blog/kotlin-koans-br-classes-seladas): Reuse your solution from the previous task, but replace the interface with a sealed interface. That way you no longer need the else branch in the when expression. - [Kotlin Koans BR: Lambdas](https://rsicarelli.com/en/blog/kotlin-koans-br-lambdas): Pass a lambda to the any function to check whether the collection contains an even number. - [Kotlin Koans BR: String Templates](https://rsicarelli.com/en/blog/kotlin-koans-br-modelos-de-string): The pattern below matches a date in the format 13.06.1992 (two digits, a dot, two digits, a dot, four digits): - [Kotlin Koans BR: Hello, world!](https://rsicarelli.com/en/blog/kotlin-koans-br-ola-mundo): Change the code so that the start function returns the string "OK". - [Kotlin Koans BR: Triple-quoted strings](https://rsicarelli.com/en/blog/kotlin-koans-br-strings-com-tres-aspas): Swap the trimIndent call for trimMargin, setting # as the prefix value, so the resulting string no longer contains the prefix character. - [Kotlin Koans BR: Smart casts](https://rsicarelli.com/en/blog/kotlin-koans-br-tipagem-inteligente): Rewrite the given code using Kotlin smart casts and the when expression. - [Kotlin Koans BR: The "nothing" type (Nothing)](https://rsicarelli.com/en/blog/kotlin-koans-br-tipo-nenhum-nothing): Specify the Nothing return type for the failWithWrongAge function. - [Kotlin Koans BR: Nullable types](https://rsicarelli.com/en/blog/kotlin-koans-br-tipos-anulaveis): Rewrite the following code so that it uses only a single if expression, and learn how Kotlin handles nullable types safely. - [KMP 101: Exploring internal and external dependencies in KMP (end of the series)](https://rsicarelli.com/en/blog/kmp-101-explorando-as-dependencias-internas-e-externas-no-kmp): In previous articles, we established a foundation in Kotlin Multiplatform (KMP) and how it compiles to multiple platforms. - [KMP 101: How to Share Code in KMP - Connecting Platforms with expect and actual](https://rsicarelli.com/en/blog/kmp-101-como-compartilhar-codigo-no-kmp-conectando-plataformas-com-expect-e-actual): Over the last few articles, we dug into the inner workings of Kotlin Multiplatform: its paradigm, the compiler architecture, the source sets, the development environment, building and running a sample project, and the essential role of Gradle. - [KMP 101: Learning how Gradle is used in Kotlin Multiplatform](https://rsicarelli.com/en/blog/kmp-101-aprendendo-sobre-o-uso-do-gradle-no-kotlin-multiplataforma): In the last article, we created a project using the KMP Wizard and, with little effort, ran our app on Android, iOS, and Desktop devices. - [KMP 101: Creating and running your first multiplatform project in Fleet](https://rsicarelli.com/en/blog/kmp-101-criando-e-executando-seu-primeiro-projeto-multiplataforma-no-fleet): Over the last few articles we covered key KMP concepts, from the multiplatform paradigm to setting up the environment. - [KMP 101: Understanding and Setting Up the Dev Environment in Kotlin Multiplatform](https://rsicarelli.com/en/blog/kmp-101-guia-pratico-para-configurar-e-entender-o-ambiente-no-kotlin-multiplataforma): Software development is a complex process that demands not only skill and creativity, but also a well-configured development environment. - [KMP 101: Mastering the Principles of Source Sets](https://rsicarelli.com/en/blog/kotlin-multiplataforma-101-dominando-os-principios-dos-source-sets): In the last article (🔗 KMP 101: Understanding How Kotlin Compiles for Multiple Platforms), we learned about the frontend, IR, and backend of the Kotlin compiler. - [KMP 101: Understanding How Kotlin Compiles to Multiple Platforms](https://rsicarelli.com/en/blog/kotlin-multiplataforma-101-entendendo-como-o-kotlin-compila-para-multiplas-plataformas): In the last post (🔗 KMP 101: An Introduction to the multiplatform paradigm), we explored the multiplatform paradigm and how KMP stands out in the ecosystem. - [KMP 101: An introduction to the multiplatform paradigm](https://rsicarelli.com/en/blog/kotlin-multiplataforma-101-introducao-ao-paradigma-da-multiplataforma): We use a wide range of apps every day on phones, watches, TVs, and computers, all part of a broad digital ecosystem. - [Android Plataforma - Part 0: Introducing the Series](https://rsicarelli.com/en/blog/android-plataforma-parte-0-introducao-a-serie): Android development is a constant stream of new things: new devices, SDK updates, and an endless variety of libraries and tools that ship every single day. - [Android Plataforma - Part 1: Modularization](https://rsicarelli.com/en/blog/android-plataforma-parte-1-modularizacao): Efficiency matters in modern software projects. This article covers modularization in Kotlin/Android projects, the vital role Gradle plays in speeding up builds, and the challenges of managing multiple modules. - [Android Plataforma - Part 10: Customizing the modules](https://rsicarelli.com/en/blog/android-plataforma-parte-10-customizacao-dos-modulos): In the last article we explored CommonsExtension to remove duplication from our configuration. - [Android Plataforma - Part 11: Building a DSL to customize the new options](https://rsicarelli.com/en/blog/android-plataforma-parte-11-criando-uma-dsl-para-customizar-as-novas-opcoes): In the previous article, we parameterized the arguments of applyAndroidApp() and appyAndroidLibary() with models. - [Android Plataforma - Part 12: Optimizing build time for Android libraries](https://rsicarelli.com/en/blog/android-plataforma-parte-12-otimizando-tempo-de-compilacao-para-bibliotecas-android): 🌱 Branch: 12/improving-android-library-build-time 🔗 Repository:... - [Android Plataforma - Part 13: Including "pure JVM" modules](https://rsicarelli.com/en/blog/android-plataforma-parte-13-incluindo-modulos-puro-jvm): In the last article we sped up Android module builds by turning off several Android Gradle Plugin (AGP) features. - [Android Plataforma - Part 14: Opting in to experimental Kotlin compiler features](https://rsicarelli.com/en/blog/android-plataforma-parte-14-aderindo-a-funcionalidades-experimentais-do-compilador-do-kotlin): In the last article we extended our platform with the ability to declare JVM modules. - [Android Plataforma - Part 15: Taking care of your code with Detekt, ktlint and Spotless](https://rsicarelli.com/en/blog/android-plataforma-parte-15-cuidando-do-codigo-com-detekt-klint-e-spotless): In the last article we covered how our platform lets different modules opt into experimental features. - [Android Plataforma - Part 16: Final thoughts](https://rsicarelli.com/en/blog/android-plataforma-parte-16-consideracoes-finais): Over the last articles, we built a platform from scratch, learning and applying several concepts with the goal of making multi-module Kotlin apps more flexible and scalable. - [Android Plataforma - Part 2: Starting the Project](https://rsicarelli.com/en/blog/android-plataforma-parte-2-inicio-do-projeto): In this post we explore a starter project, understand the challenges of maintaining build.gradle.kts files, and discover how Gradle Composite Builds can help along the way. - [Android Plataforma - Part 3: Sharing Gradle Scripts](https://rsicarelli.com/en/blog/android-plataforma-parte-3-compartilhando-scripts-do-gradle): In the previous article, we understood the challenges a multi-module project brings: maintaining and reusing Gradle files. Let us get a better grasp on how to solve this problem by looking at two concepts: buildSrc and Composite Builds. - [Android Plataforma - Part 4: Composite Build](https://rsicarelli.com/en/blog/android-plataforma-parte-4-composite-build-lgk): In the previous articles we saw why modularity matters and why Composite Builds are the right choice for scaling Kotlin projects. - [Android Plataforma - Part 5: Simplifying Gradle Init](https://rsicarelli.com/en/blog/android-plataforma-parte-5-simplificando-gradle-init): In the previous article, we set up our platform with build-logic and registered the greeting task in the main project. - [Android Plataforma - Part 6: Version Catalog](https://rsicarelli.com/en/blog/android-plataforma-parte-6-version-catalog): In the previous post, we optimized our platform and got it ready for more features. - [Android Plataforma - Part 7: Decorating the 'app' module](https://rsicarelli.com/en/blog/android-plataforma-parte-7-decorando-o-modulo-app): In the previous article, we got our platform ready to take on new features. - [Android Plataforma - Part 8: Decorating the 'library' modules](https://rsicarelli.com/en/blog/android-plataforma-parte-8-decorando-os-modulo-library): In the last post, we introduced the first decoration in the Platform and set up our entire app module using the Kotlin DSL. - [Android Plataforma - Part 9: Unifying the Application and Library extensions with the Common Extension](https://rsicarelli.com/en/blog/android-plataforma-parte-9-unificando-a-application-e-library-extensions-com-a-common-extension): In the last post, we managed to extract the configuration logic for our library modules. ## Projects — English - [fakt](https://rsicarelli.com/en/projects/fakt): Compile-time test doubles for Kotlin Multiplatform — type-safe fakes generated from annotated interfaces, zero boilerplate. - [kmp-native-flavors](https://rsicarelli.com/en/projects/kmp-native-flavors): A Gradle plugin for managing native flavors in Kotlin Multiplatform projects. - [kmp-targets](https://rsicarelli.com/en/projects/kmp-targets): A Gradle plugin to streamline declaring Kotlin Multiplatform targets. ## Talks — English - [KotlinConf 2025](https://rsicarelli.com/en/talks/kotlinconf-2025): Speaking at KotlinConf 2025 in Copenhagen on Kotlin Multiplatform. - [Exploring Kotlin Multiplatform klibs](https://rsicarelli.com/en/talks/kmp-klibs-2024): A GDG Foz do Iguaçu live session exploring Kotlin Multiplatform klibs. - [Stability and Immutability in Compose Multiplatform](https://rsicarelli.com/en/talks/compose-stability-immutability): How stability and immutability in the Compose runtime drive smooth, performant UI across platforms. - [The State of Kotlin Multiplatform in 2024](https://rsicarelli.com/en/talks/kmp-state-2024): A tour of where Kotlin Multiplatform stood in 2024 — ecosystem, community and what comes next. - [KotlinConf 2024 Panel — What's New](https://rsicarelli.com/en/talks/kotlinconf-2024-panel): A panel recap of KotlinConf 2024 with Ivan Sanchez, Manuel Ernesto and Rodrigo Sicarelli. ## About — English - [rsicarelli.com — About](https://rsicarelli.com/en/about) ## Blog — Português - [Claude Code 101: Desmistificando os Modelos de Linguagem](https://rsicarelli.com/pt-br/blog/claude-code-101-demystifying-language-models): O que é um token A janela de contexto Como o modelo gera texto O mecanismo de atenção Como o modelo... - [Claude Code 101: Introdução à Programação Agêntica](https://rsicarelli.com/pt-br/blog/claude-code-101-introduction-to-agentic-programming): Setembro de 2025. Eu estava tocando a atualização de uma dependência crítica num app mobile com milhões de usuários. O tipo de mudança que quebra testes em cascata. O prazo era Outubro: se não ficasse pronto, o app não subia pra loja. - [Fakt: Automatizando o padrão fake-over-mock](https://rsicarelli.com/pt-br/blog/fakt-automating-the-fake-over-mock-pattern-amh): Os testes em Kotlin têm um problema que piora quanto mais bem-sucedido seu projeto se torna. - [O Custo Oculto do Default Hierarchy Template no Kotlin Multiplatform](https://rsicarelli.com/pt-br/blog/the-hidden-cost-of-default-hierarchy-templates-in-kotlin-multiplatform): O Default Hierarchy Template em projetos KMP é uma ótima forma de reduzir código boilerplate e começar a trabalhar rapidamente. Porém, ele veio com um custo inesperado… - [KMP-102 - Modularização no KMP](https://rsicarelli.com/pt-br/blog/kmp-102-modularizacao-no-kmp): No último artigo, entramos em detalhes e aprendemos sobre as peculiaridades do código exportado nos headers do Objective-C, assim como as boas práticas quanto ao que exportar. - [KMP-102 - Otimizando o Kotlin para o Obj-c/Swift](https://rsicarelli.com/pt-br/blog/kmp-102-otimizando-a-exportacao-do-kotlin-para-o-obj-cswift): No último post, aprendemos como utilizar código Kotlin no Swift. Aprendemos sobre algumas técnicas para melhorar o codigo exportado para o Swift, e como as anotações como @HiddenFromObjC e @HidesFromObjC controlam a visibilidade do código no Swift. - [KMP-102 - Utilizando Código Kotlin no Swift](https://rsicarelli.com/pt-br/blog/kmp-102-utilizando-codigo-kotlin-no-swift): No último post, aprendemos a criar um XCFramework a partir de código Kotlin e exploramos algumas características dos tipos de build gerados. - [KMP-102 - Características do XCFramework no KMP](https://rsicarelli.com/pt-br/blog/kmp-102-caracteristicas-do-xcframework-no-kmp): No post anterior, aprendemos sobre como o Kotlin/Native exporta uma coleção de .frameworks no formato XCFramework. - [KMP-102 - XCFramework para Devs KMP](https://rsicarelli.com/pt-br/blog/kmp-102-xcframework-para-devs-kmp): Olá! Dou as boas-vindas a série KMP-102. Vamos aprofundar os conceitos do Kotlin Multiplatform, aprendendo mais sobre como integrar nosso código Kotlin… - [Kotlin Koans BR: Alias para importação (import alias)](https://rsicarelli.com/pt-br/blog/kotlin-koans-br-alias-para-importacao-import-alias): Ao importar uma classe ou função, você pode especificar um nome diferente para ela adicionando como NewName após a diretiva de importação. Isso pode ser… - [Kotlin Koans BR: Extension functions e properties (funções e propriedades estendidas)](https://rsicarelli.com/pt-br/blog/kotlin-koans-br-extension-functions-e-properties-funcoes-e-propriedades-estendidas): Implemente as funções de extensão Int.r() e Pair.r() e faça com que elas convertam Int e Pair em um RationalNumber. - [Kotlin Koans BR: Argumentos nomeados](https://rsicarelli.com/pt-br/blog/kotlin-koans-br-argumentos-nomeados): Faça com que a função joinOptions() retorne a lista em formato JSON (por exemplo, [a, b, c]) especificando apenas dois argumentos. - [Kotlin Koans BR: Argumentos padrão](https://rsicarelli.com/pt-br/blog/kotlin-koans-br-argumentos-padrao): Imagine que você tenha várias sobrecargas de foo() na sua linguagem favorita. - [Kotlin Koans BR: Classes de dados (Data Classes)](https://rsicarelli.com/pt-br/blog/kotlin-koans-br-classes-de-dados-data-classes): Reescreva o seguinte código para Kotlin:
Java - [Kotlin Koans BR: Classes Seladas](https://rsicarelli.com/pt-br/blog/kotlin-koans-br-classes-seladas): Reutilize sua solução da tarefa anterior, mas substitua a interface pela interface sealed. Assim, você não precisará mais do bloco else na expressão when. - [Kotlin Koans BR: Lambdas](https://rsicarelli.com/pt-br/blog/kotlin-koans-br-lambdas): Passe um lambda para a função anypara verificar se a coleção contém um número par. - [Kotlin Koans BR: Modelos de String](https://rsicarelli.com/pt-br/blog/kotlin-koans-br-modelos-de-string): O padrão a seguir corresponde a uma data no formato 13.06.1992 (dois dígitos, um ponto, dois dígitos, um ponto, quatro dígitos): - [Kotlin Koans BR: Olá, mundo!](https://rsicarelli.com/pt-br/blog/kotlin-koans-br-ola-mundo): Altere o código para que a função start retorne a string "OK". - [Kotlin Koans BR: Strings com três aspas](https://rsicarelli.com/pt-br/blog/kotlin-koans-br-strings-com-tres-aspas): Substitua a chamada trimIndent pela chamada trimMargin, definindo # como valor de prefixo, assim a string resultante não conterá o caractere de prefixo. - [Kotlin Koans BR: Tipagem inteligente](https://rsicarelli.com/pt-br/blog/kotlin-koans-br-tipagem-inteligente): Reescreva o código fornecido usando smart casts e a expressão when do Kotlin. - [Kotlin Koans BR: Tipo "nenhum" (Nothing)](https://rsicarelli.com/pt-br/blog/kotlin-koans-br-tipo-nenhum-nothing): Especifique o tipo de retorno Nothing para a função failWithWrongAge. - [Kotlin Koans BR: Tipos anuláveis](https://rsicarelli.com/pt-br/blog/kotlin-koans-br-tipos-anulaveis): Reescreva o código a seguir para que ele tenha apenas uma expressão if:
Java - [KMP 101: Explorando as dependências internas e externas no KMP (fim da série)](https://rsicarelli.com/pt-br/blog/kmp-101-explorando-as-dependencias-internas-e-externas-no-kmp): Nos artigos anteriores, estabelecemos uma base sobre o Kotlin Multiplatform (KMP) e como ele compila para múltiplas plataformas. - [KMP 101: Como compartilhar código no KMP - conectando plataformas com expect e actual](https://rsicarelli.com/pt-br/blog/kmp-101-como-compartilhar-codigo-no-kmp-conectando-plataformas-com-expect-e-actual): Nos últimos artigos, aprofundamos nos bastidores do Kotlin Multiplataforma: seu paradigma, a arquitetura do compilador, os source sets, o ambiente de desenvolvimento, a criação e execução de um projeto exemplo, e o papel fundamental do Gradle. - [KMP 101: Aprendendo sobre o uso do Gradle no Kotlin Multiplataforma](https://rsicarelli.com/pt-br/blog/kmp-101-aprendendo-sobre-o-uso-do-gradle-no-kotlin-multiplataforma): No último artigo, criamos um projeto utilizando o KMP Wizard e, sem muitos esforços, executamos nosso app em aparelhos Android, iOS e Desktop. - [KMP 101: Criando e executando seu primeiro projeto multiplataforma no Fleet](https://rsicarelli.com/pt-br/blog/kmp-101-criando-e-executando-seu-primeiro-projeto-multiplataforma-no-fleet): Nos últimos artigos, focamos em diversos conceitos-chave do KMP e entendemos desde o paradigma multiplataforma, até a configuração do ambiente. - [KMP 101: Entendendo e configurando o ambiente dev no Kotlin Multiplataforma](https://rsicarelli.com/pt-br/blog/kmp-101-guia-pratico-para-configurar-e-entender-o-ambiente-no-kotlin-multiplataforma): O desenvolvimento de software é um processo complexo que exige não apenas habilidade e criatividade, mas também um ambiente de desenvolvimento bem configurado. - [KMP 101: Dominando os princípios dos Source Sets](https://rsicarelli.com/pt-br/blog/kotlin-multiplataforma-101-dominando-os-principios-dos-source-sets): No último artigo (🔗 KMP 101: Entendendo como o Kotlin compila para multiplas plataformas), aprendemos sobre o frontend, IR e backend do compilador do Kotlin. - [KMP 101: Entendendo como o Kotlin compila para múltiplas plataformas](https://rsicarelli.com/pt-br/blog/kotlin-multiplataforma-101-entendendo-como-o-kotlin-compila-para-multiplas-plataformas): No último post (🔗 KMP 101: Introdução ao paradigma da multiplataforma), exploramos o paradigma multiplataforma e como o KMP se destaca no ecossistema. - [KMP 101: Introdução ao paradigma da Multiplataforma](https://rsicarelli.com/pt-br/blog/kotlin-multiplataforma-101-introducao-ao-paradigma-da-multiplataforma): Usamos diariamente uma variedade de aplicativos em dispositivos como celulares, relógios, TVs e computadores, inseridos em um amplo ecossistema digital. - [Android Plataforma - Parte 0: Introdução à Série](https://rsicarelli.com/pt-br/blog/android-plataforma-parte-0-introducao-a-serie): No mundo do desenvolvimento Android, enfrentamos um fluxo contínuo de novidades: novos dispositivos, atualizações do SDK e uma variedade de bibliotecas e ferramentas que são lançadas todos os dias. - [Android Plataforma - Parte 1: Modularização](https://rsicarelli.com/pt-br/blog/android-plataforma-parte-1-modularizacao): A eficiência no desenvolvimento de software é essencial nos projetos atuais. Neste artigo, discutiremos a modularização em projetos Kotlin/Android, o papel vital do Gradle para otimizar compilações e os desafios de gerir múltiplos módulos. - [Android Plataforma - Parte 10: Customização dos módulos](https://rsicarelli.com/pt-br/blog/android-plataforma-parte-10-customizacao-dos-modulos): No último artigo, exploramos o CommonsExtension para eliminar duplicidades em nossas configurações. - [Android Plataforma - Parte 11: Criando uma DSL para customizar as novas opções](https://rsicarelli.com/pt-br/blog/android-plataforma-parte-11-criando-uma-dsl-para-customizar-as-novas-opcoes): No artigo anterior, parametrizamos os argumentos de applyAndroidApp() e appyAndroidLibary() com modelos. - [Android Plataforma - Parte 12: Otimizando tempo de compilação para bibliotecas Android](https://rsicarelli.com/pt-br/blog/android-plataforma-parte-12-otimizando-tempo-de-compilacao-para-bibliotecas-android): 🌱 Branch: 12/improving-android-library-build-time 🔗 Repositório:... - [Android Plataforma - Parte 13: Incluindo módulos "puro JVM"](https://rsicarelli.com/pt-br/blog/android-plataforma-parte-13-incluindo-modulos-puro-jvm): No último artigo, otimizamos a compilação dos módulos Android desativando diversas funcionalidades do Android Gradle Plugin (AGP). - [Android Plataforma - Parte 14: Aderindo a funcionalidades experimentais do compilador do Kotlin](https://rsicarelli.com/pt-br/blog/android-plataforma-parte-14-aderindo-a-funcionalidades-experimentais-do-compilador-do-kotlin): No último artigo, extendemos nossa plataforma com a capacidade de declarar módulos JVM. - [Android Plataforma - Parte 15: Cuidando do código com Detekt, Klint e Spotless](https://rsicarelli.com/pt-br/blog/android-plataforma-parte-15-cuidando-do-codigo-com-detekt-klint-e-spotless): No último artigo, abordamos a capacidade de nossa plataforma aderir a funcionalidades experimentais em diferentes módulos. - [Android Plataforma - Parte 16: Considerações finais](https://rsicarelli.com/pt-br/blog/android-plataforma-parte-16-consideracoes-finais): Nos últimos artigos, construímos uma plataforma do zero, aprendendo e aplicando diversos conceitos com o objetivo de flexibilizar e escalar aplicações multimodulares em Kotlin. - [Android Plataforma - Parte 2: Início do Projeto](https://rsicarelli.com/pt-br/blog/android-plataforma-parte-2-inicio-do-projeto): Neste post, vamos explorar um projeto inicial, entender os desafios de manter os arquivos build.gradle.kts e descobrir como o conceito de Composite Builds do Gradle pode auxiliar nessa jornada. - [Android Plataforma - Parte 3: Compartilhando scripts do Gradle](https://rsicarelli.com/pt-br/blog/android-plataforma-parte-3-compartilhando-scripts-do-gradle): No artigo anterior, entendemos quais os desafios que um projeto multi-modular traz: a da manutenção e reutilização dos arquivos do Gradle. Vamos entender melhor como resolver esse problema analisando dois conceitos: o buildSrc e os Composite Builds. - [Android Plataforma - Parte 4: Composite Build](https://rsicarelli.com/pt-br/blog/android-plataforma-parte-4-composite-build-lgk): Nos artigos anteriores, compreendemos a importância da modularidade e como os Composite Builds são a escolha certa para escalar projetos Kotlin. - [Android Plataforma - Parte 5: Simplificando Gradle Init](https://rsicarelli.com/pt-br/blog/android-plataforma-parte-5-simplificando-gradle-init): No artigo anterior, estabelecemos nossa plataforma com o build-logic e registramos a task greeting no projeto principal. - [Android Plataforma - Parte 6: Version Catalog](https://rsicarelli.com/pt-br/blog/android-plataforma-parte-6-version-catalog): No post anterior, otimizamos nossa plataforma, deixando-a preparada para mais funcionalidades. - [Android Plataforma - Parte 7: Decorando o módulo 'app'](https://rsicarelli.com/pt-br/blog/android-plataforma-parte-7-decorando-o-modulo-app): No artigo anterior, preparamos nossa plataforma para receber novas funcionalidades. - [Android Plataforma - Parte 8: Decorando os módulos 'library'](https://rsicarelli.com/pt-br/blog/android-plataforma-parte-8-decorando-os-modulo-library): No último post, apresentamos a primeira decoração na Plataforma e fizemos toda a configuração do nosso módulo app usando Kotlin DSL. - [Android Plataforma - Parte 9: Unificando a Application e Library extensions com a Common Extension](https://rsicarelli.com/pt-br/blog/android-plataforma-parte-9-unificando-a-application-e-library-extensions-com-a-common-extension): No último post, conseguimos extrair a lógica de configuração de nossos módulos library/biblioteca. ## Projetos — Português - [fakt](https://rsicarelli.com/pt-br/projects/fakt): Test doubles em tempo de compilação para Kotlin Multiplatform — fakes type-safe gerados de interfaces anotadas, sem boilerplate. - [kmp-native-flavors](https://rsicarelli.com/pt-br/projects/kmp-native-flavors): Um plugin Gradle para gerenciar flavors nativos em projetos Kotlin Multiplatform. - [kmp-targets](https://rsicarelli.com/pt-br/projects/kmp-targets): Um plugin Gradle para simplificar a declaração de targets de Kotlin Multiplatform. ## Palestras — Português - [KotlinConf 2025](https://rsicarelli.com/pt-br/talks/kotlinconf-2025): Palestra na KotlinConf 2025, em Copenhague, sobre Kotlin Multiplatform. - [Explorando as klibs do Kotlin Multiplatform](https://rsicarelli.com/pt-br/talks/kmp-klibs-2024): Sessão ao vivo no GDG Foz do Iguaçu explorando as klibs do Kotlin Multiplatform. - [Estabilidade e Imutabilidade no Compose Multiplatform](https://rsicarelli.com/pt-br/talks/compose-stability-immutability): Como estabilidade e imutabilidade no runtime do Compose impactam o desempenho das telas em múltiplas plataformas. - [Estado do Kotlin Multiplataforma em 2024](https://rsicarelli.com/pt-br/talks/kmp-state-2024): Um panorama do Kotlin Multiplataforma em 2024 — ecossistema, comunidade e o que vem a seguir. - [Painel KotlinConf 2024 — Saiba das novidades](https://rsicarelli.com/pt-br/talks/kotlinconf-2024-panel): Painel recapitulando a KotlinConf 2024 com Ivan Sanchez, Manuel Ernesto e Rodrigo Sicarelli. ## Sobre — Português - [rsicarelli.com — Sobre](https://rsicarelli.com/pt-br/about)