Goal
Ship a Kotlin/Android library that embeds the Chativa Web Components widget inside an Android WebView, with a typed bridge so Kotlin/Java host apps can configure the widget, listen to events, and call into it — without a full native UI port.
Background
Same rationale as the iOS SwiftUI WebView wrapper: a WebView embed gives full feature parity with the web build (GenUI, themes, surveys, slash commands) and updates without a Play Store release. A native Compose UI port can come later if there's demand.
Scope
Create a new Gradle module published to Maven Central as com.chativa:chativa-android (or a dedicated repo).
Acceptance
- A fresh Android Studio project can declare the dependency and drop
ChativaView into XML or ChativaComposable() into Compose, and have a working chat.
- All Web Component events surface as Kotlin callbacks / Flows.
- File upload, link clicks, and back navigation feel native, not web-y.
Open questions
- Pure-Kotlin Compose UI port — large enough for its own issue if prioritised later.
- Distribution: Maven Central vs JitPack — Maven Central is the right answer long-term, JitPack is the fast first-cut.
Goal
Ship a Kotlin/Android library that embeds the Chativa Web Components widget inside an Android
WebView, with a typed bridge so Kotlin/Java host apps can configure the widget, listen to events, and call into it — without a full native UI port.Background
Same rationale as the iOS SwiftUI WebView wrapper: a
WebViewembed gives full feature parity with the web build (GenUI, themes, surveys, slash commands) and updates without a Play Store release. A native Compose UI port can come later if there's demand.Scope
Create a new Gradle module published to Maven Central as
com.chativa:chativa-android(or a dedicated repo).ChativaView(regularView) andChativaComposable(Jetpack Compose wrapper). Both internally host aWebView.index.htmlfromassets/that imports@chativa/ui+ connectors locally — no first-paint network call.WebView.addJavascriptInterface(...)andevaluateJavascript(...):configure(settings),sendMessage(...),setAuthToken(...),setLanguage(...).onMessage,onConnect,onDisconnect,onSurveySubmit,onLinkOpen(intercept anchor clicks →Intent.ACTION_VIEWor Custom Tabs).Flow<...>where it makes sense.<input type=file>throughWebChromeClient.onShowFileChooser→ native picker.onBackPressedfirst.Acceptance
ChativaViewinto XML orChativaComposable()into Compose, and have a working chat.Open questions