FAQ
Common questions about Compose HotSwan. Can't find what you're looking for? Ask on Discord.
Yes, and as of 2.0 it is one of the main reasons to use it. One save reloads your Android device, your Compose Desktop window and every booted iOS simulator, from the same build. A shared composable that is right on one platform and wrong on another is the bug Compose Multiplatform is actually prone to, and watching all of them react to the same edit is how you catch it.
Setup is the same idea on every target: apply the HotSwan Gradle plugin to the module that owns the app. That is your Android application module, or the module that declares binaries.framework for iOS. Compose Desktop needs nothing beyond the plugin. See the Kotlin Multiplatform guide for the per-platform details, and Multi-Target Hot Reloading for how the targets are selected.
On iOS the target is the simulator, where shared Kotlin reloads in the already-running app with no Xcode rebuild, no reinstall and no relaunch.
The gap is much smaller than it used to be. Flutter and React Native control their own runtime, which makes hot reload easier to build. A native Android app runs on ART, which treats a loaded class as mostly fixed, so earlier versions of HotSwan had to ask the runtime for permission and lived inside what it would allow.
HotSwan 2.0 stopped asking. It runs its own interpreter inside your app, so adding and removing composables, changing branching, wrapping layout and replacing an entire screen now apply in place, with navigation and state intact.
What is left is a short list rather than a category. Changing a class's supertype or the interfaces it implements restarts the app, which HotSwan detects while building and does for you. A brand new resource identifier needs a reinstall, and build files need a Gradle sync. See Limitations and Supported Changes for the full picture.
No analytics, no telemetry, and your source code never leaves your machine. The entire hot reload pipeline runs locally, between your IDE and whichever target you are reloading. No source code, project data, or personal information is ever sent anywhere.
There is one exception, and it is licence verification rather than data collection. If you activated a GitHub Sponsors lifetime licence, the plugin re-checks it with hotswan.dev about once a week, sending only your GitHub username. A Marketplace licence is verified by the JetBrains IDE itself, and the plugin makes no network call for it. See the Privacy Policy for more details.
Yes. HotSwan works on both physical Android devices and emulators. Connect your device via USB or wireless debugging, and hot reload works exactly the same way. There is no difference in functionality, speed, or supported features between a physical device and an emulator.
The only requirement is that the device runs a debug build of your app (which is the default when you press Run in Android Studio) and has USB debugging enabled. See Requirements for the full list.
HotSwan is a commercial product, not open source. The source code is not publicly available. However, you can report bugs, request features, and track issues on the GitHub issue tracker. The plugin is distributed through the JetBrains Marketplace.
Because it handles a very tricky problem gracefully. Like a swan gliding on water — under the surface there is a lot of work happening, but from the developer's perspective it feels smooth. And of course, it is also a small nod to Hot Reload. Also, "HotDuck" didn't sound as good.