jindong

Introduction: Vibe with Jindong, Powered by Compose Runtime
More: Author   ReportBugs   OfficialWebsite   
Tags:

Jindong Banner

Declarative Haptic Feedback Library for Compose Multiplatform

License Maven Central Version Kotlin Weekly Badge


Jindong provides a declarative DSL for haptic feedback in Compose Multiplatform applications(supports Android and iOS). Built on Compose Runtime, it lets you define complex haptic patterns with a simple, intuitive API.

Jindong[tɕindooŋ] (진동) is the Korean word for "vibration". We chose this name to reflect the library's core purpose, as it's a familiar term for the Korean creators of this library.

Jindong(trigger, playOnInitialComposition = false) {
    Haptic(100.ms)
    Delay(50.ms)
    Haptic(50.ms, HapticIntensity.STRONG)
}

Jindong plays on entry by default to preserve existing behavior. Set playOnInitialComposition = false to wait for the first key change, as above. Jindong(Unit) { ... } keeps its existing screen-entry playback.

Features

  • Declarative API - Define haptic patterns like you define UI with Compose
  • Cross-platform based on Compose Multiplatform - Unified APIs for Android and iOS
  • Compose Integration - Works naturally with Compose state and effects
  • Common rich feedback - Transient impacts, continuous events, and normalized intensity and sharpness curves in Kotlin

Installation

Add Jindong to your build.gradle.kts:

kotlin {
    sourceSets {
        commonMain.dependencies {
            implementation("io.github.compose-jindong:jindong-core:<version>")
            implementation("io.github.compose-jindong:jindong-compose:<version>")
        }
    }
}

This checkout targets the 2.0 development line (2.0.0-SNAPSHOT). This change does not publish a 2.0 release. See the 2.0 migration guide for model and timing changes.

Platform Requirements

Platform Minimum Version
Android API 26
iOS iOS 13

Android Setup

Add the vibration permission to your AndroidManifest.xml:

<uses-permission android:name="android.permission.VIBRATE" />

Quick Start

@Composable
fun App() {
    var count by remember { mutableStateOf(0) }

    JindongProvider {
        Jindong(count, playOnInitialComposition = false) {
            Haptic(100.ms)
        }

        Button(onClick = { count++ }) {
            Text("Tap me!")
        }
    }
}

Documentation

For full documentation, visit compose-jindong.github.io/jindong.

License

Copyright 2026 compose-jindong

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Apps
About Me
GitHub: Trinea
Facebook: Dev Tools
AI Daily Digest