Catch runaway recompositions
before they ship
Budget-based recomposition monitoring for Jetpack Compose. A Screen at 3/s. An Animation at 120/s. Zero config. Debug builds only.
plugins {
id("io.github.aldefy.rebound") version "0.2.1"
} See it in action
Five-tab IDE cockpit
Live monitoring, hot spots, timeline heatmap, stability analysis, and session history — all inside Android Studio.
Monitor
Live recomposition tree with per-node detail panel showing rate, budget, skip%, and peak values. Sparkline chart visualizes trends over time. Color-coded violation indicators and a real-time event log keep you informed as you interact with the app.
Your Compose app recomposes 18x/sec
and you don't know it
Without per-composable budgets, you can't tell healthy animation-driven recomposition from pathological state thrashing. Here's what Rebound found in a real production app:
| Composable | Rate | Budget | Skip% | Status |
|---|---|---|---|---|
| ShimmerBox | 18/s | 5/s | 0% | OVER |
| MenuItem | 13/s | 30/s | 0% | NEAR |
| DestinationItem | 9/s | 5/s | 0% | OVER |
| TravelGuideCard | 8/s | 5/s | 0% | OVER |
| AppScaffold | 2/s | 3/s | 68% | OK |
Three layers of defense
Rebound instruments at compile time, monitors at runtime, and reports in your IDE. All automatic.
Compiler Plugin
Instruments every @Composable at the IR level. Infers budget class from call-site heuristics. Zero annotation required. Debug builds only.
Budget Engine
Six budget classes: Screen (3/s), Container (10/s), Interactive (30/s), List Item (60/s), Animated (120/s), Leaf (5/s). Dynamic scaling during scroll, animation, and input.
IDE Cockpit
Five-tab Android Studio tool window: live monitor with sparklines, hot spot ranking, timeline heatmap, parameter stability matrix, and session history with VCS correlation.
Install the IDE plugin → · JetBrains Marketplace listing planned
Every composable gets a budget
Flat thresholds are wrong for most of your composables. Rebound assigns budgets by role.
Android and iOS
Full KMP support. The compiler plugin instruments all targets. Transport adapts per platform.
Android
ADB socket forward
Device + Emulator
iOS Simulator
Direct TCP on :18462
Zero setup
iOS Device
WebSocket relay
Bonjour auto-discovery
JVM / Desktop
In-memory metrics
Transport planned
Get started in 60 seconds
Apply the Gradle plugin
plugins {
id("io.github.aldefy.rebound") version "0.2.1"
} Run your debug build
Rebound instruments every @Composable automatically. No annotations needed.
See violations
$ ./rebound-cli.sh summary
{"composables":[
{"name":"ShimmerBox","rate":18,"budget":5,"class":"LEAF","over":true},
{"name":"MenuItem","rate":13,"budget":30,"class":"INTERACTIVE","over":false}
],"violations":4,"total":127} iOS Physical Device?
Build and start the relay on your Mac. The device discovers it via Bonjour automatically.
./tools/build-relay.sh && ./tools/rebound-relay Try it on a real app
The sample/ module in this repo is a quick-start Compose app with Rebound pre-configured. For a more interesting stress test, try StickerExplode — a particle-effect demo with heavy animation that exercises every budget class.