ikon_sdk 1.0.5 copy "ikon_sdk: ^1.0.5" to clipboard
ikon_sdk: ^1.0.5 copied to clipboard

Official Ikon AI client SDK for native Flutter frontends — connect to an Ikon server and render the server-driven Parallax UI with audio streaming.

Ikon SDK for Dart & Flutter #

ikon_sdk is the official client SDK for building native Flutter frontends for Ikon AI apps. It connects to an Ikon server, streams the server-driven Parallax UI tree over the binary Ikon protocol, and renders it as native Flutter widgets — including the platform's own audio streaming, image capture and push-to-talk.

Install #

flutter pub add ikon_sdk

Quickstart #

Connect to a server, wrap the connection in an IkonUiCore, and render it with IkonParallaxView:

import 'package:flutter/material.dart';
import 'package:ikon_sdk/ikon_sdk.dart';

class IkonScreen extends StatefulWidget {
  const IkonScreen({super.key});

  @override
  State<IkonScreen> createState() => _IkonScreenState();
}

class _IkonScreenState extends State<IkonScreen> {
  IkonClient? _client;
  IkonUiCore? _uiCore;

  @override
  void initState() {
    super.initState();
    _connect();
  }

  Future<void> _connect() async {
    // Local dev server (auto-authenticates).
    final client = await IkonClient.connectLocal(host: 'localhost', port: 8443);
    setState(() {
      _client = client;
      _uiCore = IkonUiCore(client);
    });
  }

  @override
  void dispose() {
    _uiCore?.dispose();
    _client?.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    final uiCore = _uiCore;
    if (uiCore == null) {
      return const Center(child: CircularProgressIndicator());
    }
    return IkonParallaxView(uiCore: uiCore, client: _client);
  }
}

Connecting #

IkonClient exposes three connection entry points:

  • IkonClient.connectLocal(...) — local development server, no identity needed.
  • IkonClient.connectGuest(...) — anonymous connection to a deployed space.
  • IkonClient.connectWithToken(...) — authenticated connection with an OAuth / session token.

Subscribe to client.onStateChange (an IkonConnectionState stream) to drive your connecting / connected / error UI.

Highlights #

  • IkonClient — connection, the binary protocol, function registry, reactive state and global state.
  • IkonParallaxView — renders the server-driven Parallax UI as Flutter widgets; supports named mounts via the mount parameter.
  • IkonMediaManager — the platform's own audio streaming (Opus playback and capture over the Ikon protocol), image capture and sharing.
  • IkonWebRtcMedia — live WebRTC audio & video: the Dart client becomes a WebRTC peer to the server SFU, so live audio plays (and keeps playing in the background) and std.video-canvas renders live video — the same as the web client. The Opus playback/capture stack remains the automatic fallback.

Live WebRTC audio & video #

Enable WebRTC once the client is connected, then hand it to the media manager:

final webRtcMedia = enableIkonWebRtcMedia(client);   // audio + video by default
await webRtcMedia.start();                            // negotiates with the server

final mediaManager = IkonMediaManager(
  audioPlayback: enableIkonAudioPlayback(client),     // Opus fallback (kept intact)
  audioCapture: enableIkonAudioCapture(client),
  webRtcMedia: webRtcMedia,                            // live A/V receive path
);

return IkonParallaxView(uiCore: uiCore, client: client, mediaManager: mediaManager);

Remote audio plays automatically through the native WebRTC audio engine, and any std.video-canvas node binds to its stream by streamId.

Required native configuration #

flutter_webrtc needs platform setup in your app (a package can't edit the host app's manifests). Live audio also needs a background-audio capability so it keeps playing when the app is backgrounded.

iOS (ios/Runner/Info.plist), plus set the iOS deployment target to 13.0+:

<key>NSMicrophoneUsageDescription</key><string>Voice input</string>
<key>NSCameraUsageDescription</key><string>Camera capture</string>
<key>UIBackgroundModes</key>
<array>
  <string>audio</string>
  <string>voip</string>
</array>

Android (android/app/src/main/AndroidManifest.xml), with minSdkVersion 23+:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<!-- For background audio, add a foreground service (type mediaPlayback). -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK"/>

The mic/camera capture permissions are the same ones the Opus capture path already requires (via permission_handler), so an app that already streams microphone audio only needs to add the background-audio capability and the camera entries for video.

License #

MIT — see LICENSE.

0
likes
130
points
100
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Official Ikon AI client SDK for native Flutter frontends — connect to an Ikon server and render the server-driven Parallax UI with audio streaming.

Homepage

Topics

#ikon #ai #sdk #flutter

License

MIT (license)

Dependencies

crypto, file_picker, fl_chart, flutter, flutter_local_notifications, flutter_markdown, flutter_pcm_sound, flutter_webrtc, geolocator, http, image_picker, lucide_icons_flutter, opus_dart, opus_flutter, permission_handler, record, rive, url_launcher, wakelock_plus, web, web_socket_channel

More

Packages that depend on ikon_sdk