Changelog
Every release of Kapow, newest first.
The current version is 1.3.0. This page is copied from CHANGELOG.md in the repository at build time.
All notable changes to io.github.jantursky:kapow and its companion artifacts are listed here. The format follows Keep a Changelog, and versions follow Semantic Versioning.
Unreleased
1.3.0 - 2026-11-06
Added
loadingDescriptiononModifier.kapowSkeleton: while loading, the element is exposed as one node whose state description is the text, and the dummy content under it is hidden from assistive technology.KapowAnnounceand theannounceparameter ofKapowCounterandKapowTypewriter:KapowAnnounce.Politemakes the text a polite live region. The counter announces its value once, 500 ms after it stops changing; the typewriter announces the full text at once.LocalKapowMaxFlashesPerSecondandKapowWcagMaxFlashesPerSecond(3): an opt-in cap on flashing for a subtree.flash,glitchandrepeatof one of them ignore triggers closer than 1/N seconds,flashlowers its strobes,pingstarts its rings at least 1/N seconds apart andglitchchanges its look at most N times a second. A rate cap, not a WCAG 2.3.1 conformance claim.- An accessibility guide, a JVM desktop section in the reduced-motion guide, and a note on the tilt page that
kapowTiltis decorative and pointer-only, with a focus-driven alternative. - A “Flash safe” switch in the web gallery’s bar.
Changed
kapowSkeleton,KapowCounterandKapowTypewritergain a trailing parameter. The 1.2.0 signatures stay as hidden overloads, so existing binaries and sources keep working.
1.2.0 - 2026-10-28
Added
KapowTriggerandrememberKapowTrigger():Modifier.changeEffect(trigger, effect)plays the effect each timetrigger.fire()is called, from a click or any event, without a value to watch and without recomposing.- Effects that follow an
InteractionSource:Modifier.conditionalEffect(interactionSource, interaction, effect)runs while the element is pressed, hovered, focused or dragged (KapowInteraction), andModifier.changeEffect(interactionSource, interaction, effect)plays each time that interaction starts. Modifier.edgeEffect(condition, edge, effect)plays when a Boolean turns true or false (KapowEdge), andplayOnStartonchangeEffect,edgeEffectand triggers plays the effect on the first composition.
Changed
androidx.compose.foundationis now anapidependency of the core, becauseInteractionSourceis part of the new signatures.changeEffect(value, …)gainedplayOnStart; its 1.1.0 signature stays as a hidden overload.
1.1.0 - 2026-10-26
Added
- New effects:
ChangeEffect.hearts;ConditionalEffect.shimmer,breathe,pingandconfettiRain;Modifier.kapowSkeleton(loading), a shimmering placeholder over always-laid-out content that fades away when loading ends;KapowTypewriter(typed or scrambled text with an optional cursor);KapowCounter(digits that roll, or a number that counts);Modifier.kapowTilt(3D tilt toward the pointer with a light sheen). - Many more options on every existing effect: all 17 change effects, 13 conditional effects, 5 progress effects and the transitions (soft edges, directions, easing, seeds, brushes, counts, sizes and more). The defaults draw what they drew before.
ParticlePhysicsandEmissionAreafor direction, spread, speed, gravity, drag, lifetime, size, spin, fade and where particles start, on the particle effects.- Wrappers that work on any effect:
ChangeEffect.cooldown,times,speed,reducedMotion;ConditionalEffect.fadeIn,fadeOut,startDelay,speed,reducedMotion;ProgressEffect.curve,smoothed,reducedMotion;KapowEnterandKapowExit.delay,.easing,.reducedMotion.ReducedMotionModechooses the reduced-motion behavior of one effect. KapowStagger.delay(index)for cascading entrances and effects in lists.
Changed
- Factories that gained options keep their 1.0.0 signatures as hidden overloads, so code and binaries built against 1.0.0 keep working.
1.0.0 - 2026-10-24
Added
- Change effects that play once when a value changes:
Modifier.changeEffect(value, effect)withChangeEffect.spray(particles in aParticleShape, as text or from a painter),rise(a label that floats up),shine,pulse(a ring or fill in the element’sShape),glow,spin(around the X, Y or Z axis),ripple,flash,burst(a comic star burst),speedLines,sparkle,fireworks,confettiPop,trace(a stroke around the outline),strike,stampandglitch..delay(…)starts any of them later. Shine, and a pulse with more than one ring, ignore changes that arrive while they still play, so quick changes don’t stack up. The first composition plays nothing. - Conditional effects that run while a condition is true:
Modifier.conditionalEffect(condition, effect)withConditionalEffect.glow,pushDown,smoke,borderBeam,marchingAnts,rainbowBorder,sparkles,orbit,bubbles,flame,grayscale,spotlightandrepeat(changeEffect, every). - Progress effects drawn at a progress you supply, such as a scroll offset:
Modifier.progressEffect(effect) { progress }withProgressEffect.shine,glow,iris,fill(a liquid rising with a wave) andtrace(the outline drawn up to the progress). - Transitions for
AnimatedVisibilityandAnimatedContent:KapowEnterandKapowExitwithiris,clock,wipe,glare,blinds,dissolve,curtain,shapeIris,checker,tearandblob, plusanvilandpopto enter andpoof,shatteranddisintegrateto exit.StarShapeis a star or comic-burstShapeforshapeIrisand anywhere else aShapefits. UseKapowAnimatedVisibility, orModifier.kapowTransition(scope, enter, exit)next to Compose’s own transitions. KapowParticleLayer, which draws particles above its content so a clipping parent doesn’t cut them off.- Reduced motion from the platform (animator duration scale on Android, Reduce Motion on iOS,
prefers-reduced-motionin the browser), withLocalKapowMotionto override it. Moving effects become a short brighten or fade. KapowFeedbackandKapowFeedbackEvent: every effect can send an event for haptics or sound throughLocalKapowFeedback.kapow-crease(io.github.jantursky:kapow-crease):Modifier.hingeEffect(effect, angleRange)plays a progress effect at the hinge angle of a foldable.kapow-multihaptic(io.github.jantursky:kapow-multihaptic):rememberMultihapticFeedback()plays feedback events as haptics through multihaptic.- Targets: Android (minSdk 23), iOS, JVM and wasmJs. The core needs only Compose runtime, foundation, UI and animation. Not yet checked on an Android or iOS device, or in Firefox and Safari.