NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev
A Flutter plugin for playing advanced, custom haptic feedback patterns on Android and iOS, including waveforms and Core Haptics .ahap files.
Last release 25 days ago
12 Sep 2026
Ships fairly regularly
a new release about every 4 months
Nearly every release is documented
notes for 19 of 19 stable releases
Nothing withdrawn
no release was ever pulled
1 years old
19 releases · first in 2025
One column per month.
NEW: AGP 9 built-in Kotlin support, following Flutter's plugin migration guide. The Android build file no longer applies the Kotlin Gradle plugin (KGP
android.builtInKotlin=true), configures jvmTarget through the kotlin.compilerOptions DSL, and declares kotlin-test-junit5 explicitly for its unit tests (only KGP swaps a bare kotlin-test for the JUnit 5 variant).android.builtInKotlin. Keep the org.jetbrains.kotlin.android ... apply false declaration (2.2.20+) in settings.gradle(.kts), since Flutter's version check reads it even though it is never applied.android.builtInKotlin=false); the README explains how to switch.Design one pattern, play it everywhere.
Design one pattern, play it everywhere.
HapticPattern, HapticTransient, HapticContinuous and HapticPatternBuilder: a platform-independent pattern model with intensity and sharpness per event. AdvancedHaptics.playPattern() renders it as Core Haptics events on iOS, as VibrationEffect.Composition primitives on Android 11+ (tap-only patterns, TICK/CLICK/THUD chosen by sharpness), and as a waveform everywhere else. HapticPattern.toWaveform() exposes the flattening for callers who want the raw waveform.AndroidHapticPrimitive, AndroidPrimitiveEvent and AdvancedHaptics.playComposition(): direct access to Android's composition primitives (click, tick, thud, spin, quickRise, slowRise, quickFall, lowTick). Unsupported devices and Android below API 30 get a waveform approximation; iOS renders the closest Core Haptics events, so the call is safe on every platform.AdvancedHaptics.supportsAndroidPrimitives() reports native primitive support (API 30+ and hardware).CHORE: Bumped flutter_lints to ^6.0.0 (dev dependency only; no runtime changes). The package and example analyze cleanly under the current lint set.
flutter_lints to ^6.0.0 (dev dependency only; no runtime changes). The package and example analyze cleanly under the current lint set.Robustness release: every method is now safe to call on any platform and device.
Robustness release: every method is now safe to call on any platform and device.
AndroidPredefinedHaptic used wrong effect IDs (pop/thud/ringtone1 mapped to ringtone effects). IDs now match android.os.VibrationEffect; added textureTick. Unsupported effects fall back to click (API 30+).cancel(), pause(), resume() and seek() threw MissingPluginException on Android.pause(), resume() and seek() now work on Android. The vibrator has no native pause, so the plugin tracks the position inside the playing waveform, cancels on pause and replays the remainder (looping included) on resume or seek. PLAYER_NIL is thrown when nothing is playing, matching iOS.stop() and cancel() on iOS threw PLAYER_NIL when nothing was playing. They are now idempotent.atTime on iOS was passed as an absolute engine time, so scheduled playback/pause/resume/stop never worked. It is now a delay in seconds from now.UNSUPPORTED on every call. They now fall back to UIFeedbackGenerator.loopEnd was never set).ClassCastException when timings exceeded 32 bits, and SecurityException (missing VIBRATE permission) was not caught.hasCustomHapticsSupport() could throw on platforms without a native implementation or when the native side returned null.playWaveform(repeat: ...) is now a real parameter (it was documented but ignored).ArgumentErrors (empty lists, mismatched lengths, negative timings, amplitudes outside 0-255, bad repeat, negative times).playPredefined plays an approximation below API 29 instead of erroring. Uses VibratorManager on API 31+.playAhap accepts absolute file paths in addition to Flutter asset paths.AdvancedHapticsPlatform is now a real platform interface: replace AdvancedHapticsPlatform.instance with a mock in tests.ios/advanced_haptics/Package.swift) with a privacy manifest, so apps built with Swift Package Manager (default since Flutter 3.44) no longer fall back to CocoaPods. The podspec is kept for CocoaPods users.build.gradle moved to Java 17 / compileSdk 36 and no longer double-applies the Kotlin plugin under AGP 9.Updated ReadMe ---
Updated ReadMe
Contributor: @rdeekshitha-scapia — #4
Contributor: @rdeekshitha-scapia — #4
minSdkVersion from 26 to 21, allowing the plugin to be used in apps targeting Android 5.0+. API 26 (Oreo) haptic requirements are now enforced at runtime via a centralized hasOreoHaptics() check rather than at the build level.Contributor: @kvenn — kvenn/bug-foreground-restart
FIX: Resolved a build error on iOS versions below 16 caused by use of CHHapticPattern(contentsOf:), which is only available in iOS 16+. Implemented a
CHHapticPattern(contentsOf:), which is only available in iOS 16+. Implemented a fallback using manual AHAP JSON decoding and CHHapticPattern(dictionary:) for compatibility with iOS 13–15.- Updated README. ---
Added platform-specific methods for iOS.
Added platform-specific methods for Android.
- Updated README. ---
Proper launch of advanced_haptics.
advanced_haptics.FIX: Resolved a build error on iOS (Cannot find type 'CHHapticPlayer' in scope) by adding the necessary CoreHaptics framework import.
Cannot find type 'CHHapticPlayer' in scope) by adding the necessary CoreHaptics framework import.Fixed playback issues on iOS in the waveform method.
waveform method.Fixed playback issues on iOS in the waveform method.
waveform method.- Fixed bug in iOS. ---
- Updated README. ---
Initial release of the advanced_haptics package.
advanced_haptics package..ahap files.Your coding agent can read these notes before it upgrades. Set up the MCP server →