ikon_sdk 1.13.0 copy "ikon_sdk: ^1.13.0" to clipboard
ikon_sdk: ^1.13.0 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.

Changelog #

1.13.0 #

Internal improvements and maintenance.

1.12.0 #

New Features #

  • Deployed Flutter apps can now sign users in with Google, Apple, Microsoft, bank ID or an emailed code, stay signed in across launches, and sign out.

Bug Fixes #

  • On Flutter, motion tracking with Background turned off now pauses while the app is in the background.
  • Flutter uploads now report failure, with the server's reason, when the server rejects or never confirms a file, and selecting many files at once no longer fails the extra ones.
  • Flutter apps keep you signed in through a network drop at launch, fully sign you out, and handle dialogs, scroll-to hints and fast typing more reliably.
  • Links in Flutter apps now work: in-app paths navigate within the app, and web, email and phone links open in the phone's browser, mail or dialer.
  • Dialogs in Flutter apps now work with VoiceOver and TalkBack, and the page behind an open dialog is no longer read out.
  • In Flutter apps, a switch or checkbox's label no longer touches the control.
  • Flutter apps now match the web for icon-button accessibility labels, negative margins, wrapping chips, button badges, dropdown borders, chat inputs clearing after send, tap targets of tall text fields, and chat auto-scroll.
  • On iOS and Android, the areas behind the status bar and home indicator now continue the app's header and footer colours instead of showing a band of another colour.
  • On iOS and Android, the status bar and home-indicator areas now dim with the rest of the screen beside an open drawer or side panel.
  • Flutter apps run locally with ikon app run --flutter-ios/--flutter-android now sign in as the logged-in developer, as the web frontend already did.
  • The Flutter SDK guide's code samples now analyse against the SDK, and its API-key connection sample now works.

1.11.0 #

New Features #

  • Guest connect accepts a test link's secret, so a native build can admit testers the same way the web app does.
  • New IkonPageScaffold wraps the Parallax view so the status-bar and home-indicator areas take the page's own background colour instead of the Material theme's; the colour is also exposed as ikonPageBackground for custom shells.
  • Flutter apps get the built-in feedback button and form by wrapping their view in IkonPlatformOverlay.
  • An unmounted IkonParallaxView now shows the app's default screen only.

Bug Fixes #

  • The feedback button shows, and the app stays tappable, while the feedback sheet is closed.

1.10.0 #

New Features #

  • Flutter apps can now route a tapped notification to the path it carries, via the new IkonNavigation.navigateTo and the newly exported notification-tap stream and push-token hook.
  • Flutter apps can wire the Android back gesture to server-driven navigation: the SDK now tracks the navigation history and reports each back step to the app the way a browser back does.

Bug Fixes #

  • Date, time and colour pickers now render correctly on native Flutter clients, including on light themes where the closed control was previously invisible.
  • Native Flutter clients now open the keyboard a field actually needs (numeric, decimal, email, phone, URL, search) from the type or inputMode the server sends, and dropdowns match the height of text fields beside them.
  • Single-line text inputs now centre their text vertically at every input height.
  • Flutter clients now recover their UI after a reconnect instead of freezing, and no longer boot with unstyled screens when the opening frames race the renderer.
  • A hold-to-talk button whose microphone fails to open now returns to idle instead of showing as recording.
  • A single failed audio frame no longer silently ends microphone capture or leaves the microphone running after it is stopped.
  • A hand-written eight-digit hex colour with an alpha suffix now renders with the right channels instead of a rotated colour.
  • Disposing the media manager now releases the microphone recorder instead of leaving it allocated.
  • A client that joins or reconnects while several audio streams are active no longer sets up its audio device more than once.
  • Calling connect() again on a Flutter client no longer leaves the previous connection open.
  • When several motion sensors stream at once with a reduced live rate, every sensor now reaches the app instead of some being dropped.
  • A client whose WebRTC session is rejected by the server no longer raises an unhandled error while falling back to the standard media path.
  • A video canvas no longer drops out of Picture-in-Picture when the surrounding UI updates.
  • Apps now leave Picture-in-Picture when the video it was showing goes away, instead of leaving the window up and refusing to enter Picture-in-Picture for the rest of the session.
  • Images captured on Flutter clients now report their real pixel width and height instead of zero, matching the browser SDK.
  • Picked videos now stream from disk whatever accept filter selected them, instead of loading into memory for some filters, and HEIF photos upload with the correct image type.
  • Recorded activity is no longer held entirely in memory to upload, so a long recording uploads without risking an out-of-memory crash on the device.
  • Apps no longer risk creating two separate installation identities when two connections start at once on a fresh install, which could strand a guest user's earlier data.
  • Flutter clients now report failure instead of success when the app pushes a theme name the client cannot render.
  • Files picked by std.file-picker now upload when the matching upload node receives its seed selection id after it is already on screen, instead of being silently dropped.
  • Flutter frontends build again against the current Lucide icon package; the icon named circle-euro-sign is now circle-euro, matching Lucide.

1.9.0 #

New Features #

  • Flutter apps can now route a tapped notification to the path it carries, via the new IkonNavigation.navigateTo and the newly exported notification-tap stream and push-token hook.
  • Flutter apps can wire the Android back gesture to server-driven navigation: the SDK now tracks the navigation history and reports each back step to the app the way a browser back does.

Bug Fixes #

  • Date, time and colour pickers now render correctly on native Flutter clients, including on light themes where the closed control was previously invisible.
  • Native Flutter clients now open the keyboard a field actually needs (numeric, decimal, email, phone, URL, search) from the type or inputMode the server sends, and dropdowns match the height of text fields beside them.
  • Single-line text inputs on Flutter now centre their text vertically at every input height.
  • Flutter clients now recover their UI after a reconnect instead of freezing, and no longer boot with unstyled screens when the opening frames race the renderer.
  • Calling connect() again on a Flutter client no longer leaves the previous connection open.
  • A hand-written eight-digit hex colour with an alpha suffix now renders with the right channels instead of a rotated colour.
  • Flutter clients now report failure instead of success when the app pushes a theme name the client cannot render.
  • A hold-to-talk button whose microphone fails to open now returns to idle instead of showing as recording.
  • A single failed audio frame no longer silently ends microphone capture on Flutter or leaves the microphone running after it is stopped.
  • Disposing the Flutter media manager now releases the microphone recorder instead of leaving it allocated.
  • A Flutter client that joins or reconnects while several audio streams are active no longer sets up its audio device more than once.
  • A Flutter client whose WebRTC session is rejected by the server no longer raises an unhandled error while falling back to the standard media path.
  • Flutter apps now leave Picture-in-Picture when the video it was showing goes away, and a video canvas no longer drops out of Picture-in-Picture when the surrounding UI updates.
  • When several motion sensors stream at once with a reduced live rate, every sensor now reaches the app instead of some being dropped.
  • Images captured on Flutter clients now report their real pixel width and height instead of zero, matching the browser SDK.
  • Flutter apps now stream a picked video from disk whatever accept filter selected it, instead of loading it into memory for some filters, and upload HEIF photos with the correct image type.
  • Flutter apps no longer hold an entire recorded activity in memory to upload it, so a long recording uploads without risking an out-of-memory crash on the device.
  • Flutter apps no longer risk creating two separate installation identities when two connections start at once on a fresh install.
  • Flutter apps now upload a file picked by std.file-picker when the matching upload node receives its seedSelectionId after it is already on screen, instead of silently dropping the file.
  • Flutter frontends build again against the current Lucide icon package; the icon named circle-euro-sign is now circle-euro, matching Lucide.

1.8.0 #

New Features #

  • Ikon apps can now run as native Flutter (iOS/Android) clients: SVG images, var(--token) theme colours, and theme-correct icons render correctly, connections recover after a dropped socket, and uploads stream from the device.

Bug Fixes #

  • Microphone buttons now ask for permission as their own step instead of during a push-to-talk hold, which used to cancel the hold and capture nothing. They show an "Enable microphone" affordance until permission is granted, confirm when it is, and surface a blocked microphone instead of silently doing nothing. New onPermissionChanged callback, permissionText/permissionDeniedText wording, and a Theming.MicButton.States token covering every capture state.
  • Starting microphone capture on a device with no microphone now fails immediately instead of streaming silence (new hasMicrophoneHardware() helper).
  • Flutter apps now load images given as root-relative paths (for example src="/logo.png"), which previously failed and showed their alt text.
  • A horizontally scrollable row now scrolls on Flutter clients instead of overflowing when it carries no other styling.

1.7.0 #

New Features #

  • Notifications can now carry inline action buttons; tapping a button opens the in-app path set for it on both Android and iOS, with the tapped action reported through the new ikonNotificationTaps stream.
  • High-priority notifications now arrive as a prominent heads-up (raised Android importance and time-sensitive on iOS), while low-priority ones arrive quietly.

1.6.0 #

Bug Fixes #

  • Fixed Flutter apps failing to build for Android ("cannot find symbol FilePickerPlugin") on Android Gradle Plugin 9 templates by upgrading file_picker to 12.0.0 and pinning wakelock_plus below 1.7.0.

1.5.0 #

Breaking Changes #

  • IkonClient.connectGuest and IkonAuthenticator.authenticateGuest no longer take an orgId parameter — it had no effect, since a guest session's organisation comes from its space.

1.4.2 #

Internal improvements and maintenance.

1.4.1 #

Bug Fixes #

  • Flutter web builds can now connect: 64-bit protocol fields no longer fail to decode on the web, where Dart has no 64-bit integer type.
  • Flutter clients now decode protocol messages containing a dictionary or array nested inside another container, instead of discarding them.
  • Flutter clients now report their real theme, locale and timezone, and apply the theme the app selects — a light-themed app no longer renders dark, and in-app theme toggles take effect.
  • Flutter clients no longer render unstyled text invisibly on light themes.
  • Scrollable panels sized with overflow-y-auto and a max height now scroll on Flutter clients instead of clipping their content, with overflow-x-* and overflow-y-* now honoured per axis.
  • Flutter clients now render toolbars, menu bars, navigation menus, virtualized lists, OTP and password fields, and drag-and-drop content instead of falling back to placeholders.

1.4.0 #

Bug Fixes #

  • Email sign-in can now be completed from the Flutter SDK: send a code with startEmailLogin and exchange it with the new verifyEmailCode.
  • Fixed email sign-in requests being sent to an address that did not exist.

1.3.0 #

Internal improvements and maintenance.

1.2.0 #

Internal improvements and maintenance.

1.1.0 #

New Features #

  • The Flutter SDK now exposes IkonLog and IkonLogger, so apps can set a minimum level and route SDK diagnostics anywhere. Protocol messages that fail to decode are now reported instead of being discarded silently in release builds.
  • Client contexts now carry an explicit IsAnonymous flag that marks anonymous (guest) users, available to apps via Context.IsAnonymous.

Bug Fixes #

  • A Flutter app calling a server function whose result could not be parsed now receives an error instead of waiting forever.

Breaking Changes #

  • Flutter apps can now build and send protocol messages through the generated classes (toTeleport / toProtocolMessage) instead of writing Teleport fields by hand, and the full GlobalState — clients, streams, app session id, Ikon server id — is exposed in place of the previous nine-field IkonGlobalState. Numeric protocol enums are now int-backed extension types so flag combinations survive a round trip.
  • The channel layer is gone: a space's app now runs as AppSessions keyed by space and session identity. Removed protocol fields ChannelId/ChannelName/ChannelLocale; ChannelInstanceId, ChannelUrl, and SessionChannelUrl are now AppSessionId, SpaceUrl, and SessionUrl. SDK configs no longer take a channel key and asset URIs no longer carry a channel segment.

1.0.5 #

Breaking Changes #

  • The old ActionKind.ShowNotification UI action has been removed — show notifications with app.Notifications instead.

New Features #

  • Flutter apps can now receive and play live WebRTC audio and video — video streams render in the video canvas and audio continues in the background, matching the web client.
  • Flutter apps can now capture and send camera/screen over WebRTC and keep live video in a Picture-in-Picture window when backgrounded.
  • Flutter apps can now pick and upload files natively — file upload, drop-zone, and file-picker components work on mobile through the same upload pipeline as the web.
  • The Flutter SDK can now capture the microphone and stream it to the server (Opus), powering CaptureButton and push-to-talk.
  • Flutter native clients now play server-streamed audio (Opus-decoded) through the device speaker.
  • The Flutter SDK now automatically recovers dropped connections through a soft → medium → hard reconnect ladder (reuse tickets, refresh tickets, then full re-auth), and no longer flashes a connecting spinner for brief reconnects.
  • Flutter clients render styles consistently with the web: styles merge like the CSS cascade, percent/viewport units and responsive breakpoints work, custom app themes reach native clients, and dark: follows the app theme toggle.
  • flex-grow utilities (grow, flex-1, flex-auto) are now carried through to native clients so flex children can fill their row.
  • Images respect object-fit, children respect align-self, and dashed/dotted borders render correctly.
  • Flutter frontends now render the full Lucide icon set, matching the web renderer, instead of a small curated subset.
  • Apps can now show notifications via app.Notifications (browser and Flutter native, with lazy permission).

Bug Fixes #

  • Flutter clients no longer corrupt streamed text on mid-string insertions, and all SDK clients now handle property removal and out-of-order UI updates consistently with the server.
  • Flutter apps no longer hit an undismissable popover, get invisible text on light themes, or render charts with the wrong orientation/interactivity.
  • Flutter apps now render charts, data tables, submit-on-Enter, password fields, floating popovers, and theme-correct chrome that previously broke or rendered with the wrong colors.
  • The Flutter SDK now reports its SDK type correctly and subscribes to all server opcode groups during connection, fixing missed messages from the two most recently added groups.
  • The Flutter SDK now opens a dedicated WebSocket channel for audio frames, fixing server-streamed audio that previously never arrived.
  • An image (or other fill child) inside a centered aspect-ratio container now fits the box instead of overflowing.
  • Containers, grids, wraps, selects, carousels, scroll areas, and tab panels no longer crash with infinite-width/unbounded-height layout errors when nested in rows or scrolling contexts.
  • flex-wrap containers now wrap into a grid instead of stacking, and tooltips render their text (shown on hover or long-press) instead of crashing the surrounding layout.
  • Legacy and shorthand icon names (home, trash, warning, dashboard, …) now resolve to the same glyph as the web renderer instead of rendering blank.
  • The inline Calendar renders a native month-grid date selector instead of an empty box.
  • Popover and HoverCard content stays hidden until opened instead of always rendering inline.
  • Nested Tabs no longer leak their triggers into an outer Tabs' tab bar; each Tabs renders only its own tabs.
  • Fixed two renderer crashes — a tri-state checkbox and baseline-aligned rows/columns — that could blank the entire app UI.

1.0.4 #

Internal improvements and maintenance.

1.0.3 #

Internal improvements and maintenance.

1.0.2 #

Internal improvements and maintenance.

1.0.1 #

New Features #

  • The Ikon Dart/Flutter SDK (ikon_sdk) is now published on pub.dev; ikon app new Flutter frontends depend on the published package by version instead of bundling a vendored copy.

1.0.0 #

New Features #

  • Initial release of the Ikon Dart/Flutter SDK (ikon_sdk) for building native Flutter frontends for Ikon AI apps.