Web and mobile chat

Every surface loads the same authenticated HTTPS page and harness ticket loader. Server keys remain on your backend.

Website

Follow the module mount example and backend contract. Register the page's exact HTTPS origin. A component tag with a token endpoint is not a substitute for this contract.

PWA

Use the website pattern. Exclude session responses from service-worker and application caches. Renew on resume and discard access on logout.

React Native

Serve /chat on an origin you control. The page implements the same mountWidget and getSession flow as the web example. Establish the page's own authenticated application session; WebView loading does not automatically transfer an app sign-in.

JavaScript
import { WebView } from 'react-native-webview';

const CHAT_ORIGIN = 'https://app.example';
export function ChatScreen() {
  return <WebView
    source={{ uri: `${CHAT_ORIGIN}/chat` }}
    originWhitelist={[CHAT_ORIGIN]}
    onShouldStartLoadWithRequest={({ url }) => {
      try { return new URL(url).origin === CHAT_ORIGIN; }
      catch { return false; }
    }}
  />;
}

Register the page origin in Allowed sites. Keep tokens out of URLs. Renew on foreground and unmount on logout or account change. Use a hosted page implementing the current loader. Verify any native bridge adapter against the same ticket-envelope contract; a bridge token provider does not replace your authenticated backend endpoint.

iOS

Load the same HTTPS page in WKWebView and restrict navigation to the approved origin. Verify keyboard, microphone, camera, attachment and resume behavior on an actual device.

Or add the ready-made wrapper, vedika-chat-swift, with Swift Package Manager:

swift
.package(url: "https://github.com/vedika-io/vedika-chat-swift.git", from: "0.1.0")

Android

Use an Android WebView with mixed content and local-file access disabled. Restrict navigation to the hosted page origin and verify permissions and lifecycle on an actual device.

Or add the ready-made wrapper, vedika-chat-android, from JitPack (add maven { url = uri("https://jitpack.io") } to your repositories):

kotlin
implementation("com.github.vedika-io:vedika-chat-android:0.1.0")

Flutter

Load the authenticated page in a restricted WebView. Your application owns login and lifecycle; the hosted page owns the harness ticket flow.

Or use the ready-made wrapper, vedika-chat-flutter. It is installed from GitHub at a release tag, not from pub.dev:

yaml
dependencies:
  vedika_chat:
    git:
      url: https://github.com/vedika-io/vedika-chat-flutter.git
      ref: v0.1.0

Desktop

The Tauri desktop shell is source-only: no signed or notarized installer is published, and its auto-update channel is not active. Build it from the kit source and sign it with your own certificates.

Apply the same origin, authentication and key boundaries in your desktop WebView. Do not use a file URL as an origin workaround.

Source-only components

These parts of the kit are source-only. Nothing is installed for them from a package registry, app store or marketplace.

Release checks

Test Stop, settled receipts, reconnect, expiry, low balance, logout and account switching. Browser screenshots prove layout only; native permission and store-release checks remain part of your own application release.