On this page
Overview
Balloon is a tooltip and popup library for Compose and Kotlin Multiplatform. BalloonStyle describes appearance, BalloonState controls visibility and placement, and Compose slots allow arbitrary tooltip content.
Features and best fit
Based on official documentation; not hands-on tested · Content checked:
Key features
Separate tooltip appearance from visibility and placement
rememberBalloonBuilder defines arrows, spacing, corners, colors, and animations, while rememberBalloonState retains visibility and placement state across recomposition.
Sources: [2]
Attach a balloon with a composable wrapper or Modifier
Teams can wrap an anchor with Balloon or use Modifier.balloon below a BalloonHost. Tooltip content is a normal Compose slot and can contain arbitrary UI.
Sources: [2]
Best fit
Fits onboarding and contextual help in Compose UI
Android and KMP applications can anchor explanatory UI to buttons, images, and other composables while matching product styling and animation.
Sources: [2]
Before adoption
Official sources
- [1]skydoves/Balloon — GitHub repository(2026-10-06)
- [2]Balloon 2.0.1 — Getting Started(2026-10-06)
- [3]Balloon 2.0.1 release(2026-10-06)
- [4]Balloon Apache-2.0 license(2026-10-06)
Supplemental curator note
Balloon is useful for onboarding and contextual help in Compose UI. The 2.0 line is a Compose Multiplatform rewrite, so migrations from 1.x should review the style/state API and minimum SDK.
Try it in 3 steps
- 1
Add Balloon 2.0.1
Pin 2.0.1 in an Android or Compose Multiplatform project. Android requires API 23 or newer.
implementation("com.github.skydoves:balloon:2.0.1") - 2
Create tooltip style and state
Follow the official getting-started guide and separate appearance from visibility state.
val style = rememberBalloonBuilder { setArrowSize(10.dp) setPadding(12.dp) setCornerRadius(8.dp) } val balloonState = rememberBalloonState(style) - 3
Show the tooltip from its anchor
Use the Button as the anchor and confirm placement and visibility behavior.
Balloon( state = balloonState, balloonContent = { Text("Edit your profile") }, ) { Button(onClick = { balloonState.showAlignTop() }) { Text("Edit") } }
Growth
Growth trends · Last 30 days
4,011 Stars
Trend data is still being collected.
Development activity
Last 90 days · weekly
- Commits (last 30 days)
- 9
- Open PRs
- 0
Development activity is still being collected.
Built with
Categories and tags
Categories
GitHub data
GitHub dataView detailed GitHub data
GitHub Topics
- kotlin
- android
- android-library
- popup
- animation
- dsl
- balloon
- tooltip
- tooltips
- android-ui
- skydoves
- compose
- Stars
- 4,011
- Forks
- 310
- Watchers
- 25
- Open issues
- 1
- Contributors
- 31
- Owner type
- User
- Primary language
- Kotlin
- License
- Apache-2.0
- Repository last updated
- Sep 28, 2026
Related information
Write a related articleShare a guide or use case for this OSS in Markdown. Articles are published after administrator approval.
Explore next
- Flutter179,343 Stars
2 shared tag(s) · 2 shared category(s)
build mobile, web, and desktop UI from one Dart codebase
Dart - Expo52,566 Stars
2 shared tag(s) · 2 shared category(s)
build React Native apps for Android, iOS, and web from one project model
TypeScript - Lottie for iOS26,894 Stars
2 shared tag(s) · 2 shared category(s)
render After Effects JSON and .lottie vector animations natively on Apple platforms
Swift - Kotlin53,479 Stars
2 shared tag(s) · 1 shared category(s) · Same language
keep Java interoperability while extending one language from JVM to Android, iOS, desktop, and web
Kotlin - LeakCanary30,005 Stars
2 shared tag(s) · 1 shared category(s) · Same language
trace retained Android objects to the references causing memory leaks
Kotlin - Timber10,853 Stars
2 shared tag(s) · 1 shared category(s) · Same language
Organize Android logging through a small API and replaceable output trees
Kotlin
Report incorrect information
Tell us if any listing information is incorrect or outdated.