Sign in

Sebastian Sellmair

@sellmair.dev
548 followers 58 following 148 posts

Software Engineer @ JetBrains Working on all things Kotlin. KMP | Intellij | Compose

PostsRepliesMedia
Sebastian Sellmair @sellmair.dev · 24/11/2025
"It should be easily doable to build a stateful hot reload" - silly me, almost one year ago. After one year of hard work and many people involved, we can finally commit to the user experience and call it done (as in 1.0.0) 🔥 github.com/JetBrains/co... 🧵 What's next?
3230
Sebastian Sellmair @sellmair.dev · 19/11/2025
Say hello to Compose Hot Reload 1.1 🔥 Please give it a try and provide feedback: github.com/JetBrains/co... ☕️ JBR 25 support ⚡️ Recompilation Speed optimizations 😎 New visuals, New DevTools UX 📦 Faster, more lightweight protocol under the hood
0315
Sebastian Sellmair @sellmair.dev · 17/09/2025
Say hello to hot reloading compose resources, supported from CMP 1.10.0-alpha01 🔥 Initially requested by @zsmb.co and @rakhman.info Thanks to Nikita Lipsky 😇
1155
Sebastian Sellmair @sellmair.dev · 03/09/2025
Oh, I did not expect to have so much fun building the IDE tooling/integration for Compose Hot Reload 😍 See the small floating toolbar when a session is present, even allowing you to reset your UI state!
0100
Sebastian Sellmair @sellmair.dev · 20/05/2025
See you at KotlinConf 🤪🎇
140
Sebastian Sellmair @sellmair.dev · 10/04/2025
Things getting serious #compose #hotreload
1140
Sebastian Sellmair @sellmair.dev · 27/02/2025
github.com/JetBrains/compose-hot-reload/releases/tag/v1.0.0-dev-65: Compose Hot Reload now supports even more complex environments. Happy to announce: Hot Reloading UI now works when building and working on the IntelliJ IDE.
0160
Sebastian Sellmair @sellmair.dev · 13/02/2025
Everyone, it is with great pleasure to inform you that the project 'Compose Hot Reload' is now bootstrapped and one can develop 'Compose Hot Reload' by 'Hot Reloading' the project 🥳
2356
Sebastian Sellmair @sellmair.dev · 29/01/2025
Building Hot Reload for Compose is challenging. One of the bigger challenges is testing. I did not use JUnit but built a custom test framework for building Hot Reload Tests. I especially like that test methods can just be top-level functions ☺️
0111
Sebastian Sellmair @sellmair.dev · 28/01/2025
Mocking?! Who the hell needs mocking if you can just recompile the code withing your tests directly... 🤯😎
Screenshot of code & corresponding 'HotReloadTest'
1204
Sebastian Sellmair @sellmair.dev · 10/01/2025
Therefore, statics are 're-initialized' significantly less often and in a much more reasonable order! The topological sort even resolves circles by breaking the fewest possible dependencies between classes.
000
Sebastian Sellmair @sellmair.dev · 18/12/2024
And here is the final goodie: There is a tooling window placed next to your application. In this example, the tooling window is used to 'clean the composition', leading to all remembered states to be reset.
0100
Sebastian Sellmair @sellmair.dev · 18/12/2024
I know that we all once got burned, wondering why our code did not work, only to find out that our code was not even running at all. See how the hot-reload renders a red bar next to your application if something went wrong. Also, see how it recovers once reloaded again.
190
Sebastian Sellmair @sellmair.dev · 18/12/2024
I am really proud of this one, but you'll need to look close to see what is going on here: The remembered value will get invalidated when bytecode, used to produce this value, is changed. If the static 'calculateMagic' is changed, the using composable is invalidated.
130
Sebastian Sellmair @sellmair.dev · 18/12/2024
I know what you're thinking. Surely it breaks if you try to add properties to an existing class, right? Again, a huge recommendation for reading the previous paper about DCEVM
130
Sebastian Sellmair @sellmair.dev · 18/12/2024
You want even more? Fine: Let's add new classes. No Problem.
150
Sebastian Sellmair @sellmair.dev · 18/12/2024
More tricks? You can remove functions or even refactor and do some ABI incompatible changes. Look how the function here is renamed, but the reload still works fine.
240
Sebastian Sellmair @sellmair.dev · 18/12/2024
You ready for lifting typical 'Hot Reload' restrictions? Look Ma, I am adding a new function, and it reloads! This is a unique feature of the JetBrains Runtime. Read this paper if you're interested on how this works: sciencedirect.com/science/arti...
380
Sebastian Sellmair @sellmair.dev · 18/12/2024
Let's look into more serious demos. Hot Reload without a retained state would just be a Preview. This demo will add a state and a Button interacting with this state. Hot Reloading the 'onClick' to suddenly decrement the counter is possible.
160
Sebastian Sellmair @sellmair.dev · 18/12/2024
We can continue simple. Obviously, arbitrary changes to compose code are allowed. Here is an example switching a layout from Row to Column and back.
160
Sebastian Sellmair @sellmair.dev · 18/12/2024
Let's start simple: Obviously you can just swap out some literals. Notice the floating button and status indicator next to the app.
140
Sebastian Sellmair @sellmair.dev · 25/11/2024
🆘 ❌🤬
190
Sebastian Sellmair @sellmair.dev · 19/11/2024
🔥 🎇 Demo showing that Compose Hot Reload (Firework) only invalidates remembered state if you change code affecting the slot table (e.g. changing code inside 'remember {}')
2273