[
  {
    "id": "2026-10-20-flutter-sdk-3.0.3",
    "date": "2026-10-20",
    "type": "new",
    "products": [
      "live"
    ],
    "version": "",
    "title": "Flutter SDK 3.0.3 — streamer web page · drag PIP out to close",
    "summary": "- Built on Shoplive iOS and Android SDK 3.0.3. There is no Dart breaking change from 3.0.2; update all three packages to the same version\n- Use `ShopliveStreamer.instance.start(campaignKey, webPageUrl: …)` to attach a web page next to the broadcast screen. An invalid URL fails with `INVALID_ARGUMENT`\n- Use `ShoplivePipOptions.isDragOutToCloseEnabled` to set whether dragging the in-app PIP window off the screen closes it\n- Calling `start` again while a session is open now opens a new player with the new configuration. To change the campaign and keep the current settings, use `play`\n- If you omit `alertType` in a coupon or custom-action response, both platforms now use `toast`\n- `ShopliveConfiguration.appVersion` is ignored (the SDK reads the app version itself). `ShopliveError.rawCode` is now set on both platforms",
    "links": [
      {
        "label": "Release notes",
        "url": "https://github.com/shoplive/shoplive-sdk-flutter/releases/tag/3.0.3"
      },
      {
        "label": "pub.dev",
        "url": "https://pub.dev/packages/shoplive_player"
      }
    ]
  },
  {
    "id": "2026-10-20-flutter-sdk-1.9.0",
    "date": "2026-10-20",
    "type": "breaking",
    "products": [
      "legacy"
    ],
    "version": "",
    "title": "Flutter SDK 1.9.0 — shortform API removed · iOS 15 minimum",
    "summary": "**The shortform API (`ShopLiveShortform`) is removed, and the minimum iOS version is now 15.0.** Remove your shortform code before you upgrade (or stay on 1.8.14), and set `platform :ios, '15.0'` in `ios/Podfile`.\n\n- Updated the bundled Shoplive iOS and Android SDKs to 1.9.0\n- On Android, the SDK now comes from `https://sdk.shoplive.cloud/maven-repo`. If your project declares repositories itself, add this repository\n- This is a maintenance release of the 1.x line. For a new integration, use 3.0.3",
    "links": [
      {
        "label": "Release notes",
        "url": "https://github.com/shoplive/shoplive-sdk-flutter/releases/tag/1.9.0"
      },
      {
        "label": "pub.dev",
        "url": "https://pub.dev/packages/shoplive_player/versions/1.9.0"
      }
    ]
  },
  {
    "id": "2026-10-16-ios-sdk-3.0.3",
    "date": "2026-10-16",
    "type": "new",
    "products": [
      "live"
    ],
    "version": "",
    "title": "iOS SDK 3.0.3 — preview stream · web page on the broadcast screen",
    "summary": "- Set `ShoplivePlayerConfiguration.type` to `.preview` to play the campaign's low-resolution preview stream. The `ShoplivePlayerConfiguration.preview` preset now uses it\n- `pip.isDragOutToCloseEnabled` (default `true`) controls whether dragging the in-App PIP window off screen closes it. With `false` it snaps back, and only the close button or `close()` ends it\n- `ShopliveStreamerViewController(campaignKey:webPageURL:)` adds your own web page next to the broadcast screen\n- `ShopliveError.rawCode` returns the original numeric error code. Coupon and custom-action results now default `status` to `.hide` and `alertType` to `.alert`\n- Playback that starts muted no longer interrupts other apps' audio, and `reload()` during in-App PIP keeps the PIP window",
    "links": [
      {
        "label": "Release notes",
        "url": "https://github.com/shoplive/shoplive-sdk-ios/releases/tag/3.0.3"
      },
      {
        "label": "Integration guide",
        "url": "https://developer.shoplive.cloud/mobile/"
      }
    ]
  },
  {
    "id": "2026-10-16-android-sdk-3.0.3",
    "date": "2026-10-16",
    "type": "breaking",
    "products": [
      "live"
    ],
    "version": "",
    "title": "Android SDK 3.0.3 — presets · web page on the broadcast screen",
    "summary": "**`ShopliveConfiguration.appVersion` is removed, and `ShopliveError` and its error codes moved to the core package (`cloud.shoplive.core.publicsurface`).** Delete the `appVersion` argument and update your imports. Recompile code built against 3.0.2.\n\n- Added `DEFAULT` and `PREVIEW` presets to `ShoplivePlayerConfiguration` and `ShoplivePlayOptions`\n- `PipOptions.isDragOutToCloseEnabled` (default `true`) controls whether dragging the in-App PIP window off screen closes it\n- Pass `webPageUrl` to `ShopliveStreamer.start` to add your own web page next to the broadcast screen. The web player's user-action logs arrive as `WebCommandReceived` (`EVENT_LOG`)\n- Coupon and custom-action results now default `alertType` to `ALERT`. Pass `null` to follow the web default\n- The separate WebRTC, RTMP, ExoPlayer and media3 artifacts are no longer published, and ExoPlayer 2 is no longer supported",
    "links": [
      {
        "label": "Release notes",
        "url": "https://github.com/shoplive/shoplive-sdk-android/releases/tag/3.0.3"
      },
      {
        "label": "Integration guide",
        "url": "https://developer.shoplive.cloud/mobile/"
      }
    ]
  },
  {
    "id": "2026-10-15-flutter-sdk-3.0.2",
    "date": "2026-10-15",
    "type": "breaking",
    "products": [
      "live"
    ],
    "version": "",
    "title": "Flutter SDK 3.0.2 — rebuilt on Shoplive SDK 3.0.2",
    "summary": "**The 1.x Dart API is removed.** Read the migration guide in the release notes before you upgrade.\n\n- Split into three packages: `shoplive_core` · `shoplive_player` · `shoplive_streamer` (keep all three on the same version)\n- Every method returns a `Future`, and failures arrive as a `PlatformException` with an error code\n- Answer coupon and custom-action requests with `respond`\n- Fixed playback stopping when the player switched to in-app PIP on Android\n- Requirements: Flutter 3.22 · Dart 3.4 · iOS 15 · Android minSdk 23",
    "links": [
      {
        "label": "Release notes",
        "url": "https://github.com/shoplive/shoplive-sdk-flutter/releases/tag/3.0.2"
      },
      {
        "label": "pub.dev",
        "url": "https://pub.dev/packages/shoplive_player"
      }
    ]
  },
  {
    "id": "2026-10-12-web-live-2026-10",
    "date": "2026-10-12",
    "type": "improve",
    "products": [
      "live"
    ],
    "version": "",
    "title": "Web live player — October update",
    "summary": "- Completing an attendance check (Streak) now shows a completion toast with an entrance effect\n- The default desktop size of live captions on landscape broadcasts is smaller (2× → 1.25×), so they cover less of the video",
    "links": [
      {
        "label": "Guide",
        "url": "https://developer.shoplive.cloud/web/live/"
      }
    ]
  },
  {
    "id": "2026-10-08-android-sdk-1.9.0",
    "date": "2026-10-08",
    "type": "improve",
    "products": [
      "legacy",
      "shortform"
    ],
    "version": "",
    "title": "Android SDK 1.9.0 (V1 · Shortform)",
    "summary": "- A popup preview now closes as soon as the broadcast ends, with `ON_BROADCAST_ENDED` as the reason — the same as iOS\n- The preview bottom margin is now measured from the top of the navigation bar on every device. If you added the status bar height to the margin, remove it\n- The shortform preview opens at 9:16 instead of square\n- Fixed your app coming back to the front with OS PIP when leaving with the Home button or gesture",
    "links": [
      {
        "label": "Release notes",
        "url": "https://github.com/shoplive/shoplive-sdk-android/releases/tag/1.9.0"
      }
    ]
  },
  {
    "id": "2026-10-06-web-shortform-2026-10",
    "date": "2026-10-06",
    "type": "fix",
    "products": [
      "shortform"
    ],
    "version": "",
    "title": "Web shortform — October update",
    "summary": "- Fixed a flicker when opening a shortform detail for the first time in iOS and macOS Safari",
    "links": [
      {
        "label": "Guide",
        "url": "https://developer.shoplive.cloud/web/shortform/"
      }
    ]
  },
  {
    "id": "2026-10-01-ios-sdk-3.0.2",
    "date": "2026-10-01",
    "type": "improve",
    "products": [
      "live"
    ],
    "version": "",
    "title": "iOS SDK 3.0.2",
    "summary": "- Added `ShoplivePlayerEvent.webCommand(name:payload:)` for commands sent by the web overlay. If you switch over every case, add this one\n- In the WebView, SDK features work only on Shoplive pages (no code change)\n- A malformed access key is not used, and an error is logged\n- The screen stays awake while the broadcast screen is shown\n- Removed repeated `stateChanged` notifications, `stop()` now reports `closed`, and closing system PIP no longer leaves a black screen",
    "links": [
      {
        "label": "Release notes",
        "url": "https://github.com/shoplive/shoplive-sdk-ios/releases/tag/3.0.2"
      }
    ]
  },
  {
    "id": "2026-10-01-android-sdk-3.0.2",
    "date": "2026-10-01",
    "type": "breaking",
    "products": [
      "live"
    ],
    "version": "",
    "title": "Android SDK 3.0.2",
    "summary": "**`ShopliveStreamer.intent(...)` is removed.** Switch to `prepareIntent` and start the `Intent` passed to its callback.\n\n- Leaving the app no longer destroys the player — HLS pauses and resumes, WebRTC reconnects on return\n- Volume-key and audio-focus options (`sound.isVolumeKeyEnabled` · `sound.autoResumeOnFocusGained`) now take effect\n- Ending a broadcast stays on the same screen, and a fatal error offers retry or exit\n- The WebView native bridge works only on Shoplive pages",
    "links": [
      {
        "label": "Release notes",
        "url": "https://github.com/shoplive/shoplive-sdk-android/releases/tag/3.0.2"
      }
    ]
  },
  {
    "id": "2026-09-30-web-live-2026-09",
    "date": "2026-09-30",
    "type": "new",
    "products": [
      "live"
    ],
    "version": "",
    "title": "Web live player — September update",
    "summary": "- **Co-hosted broadcasts:** when several hosts broadcast together, the player marks who is speaking\n- **Live Streak:** viewers can check in for attendance during a broadcast\n- Broadcasts with live captions can show them as soon as the viewer enters (admin setting). Caption size on landscape broadcasts follows the screen orientation and device\n- The ready screen shows a countdown to the start of the broadcast\n- Where the browser has no PIP support, the player falls back to web PIP\n- Fixed banners not navigating in the Instagram in-app browser, the replay seek bar misbehaving, and the caption button showing on replays of broadcasts without captions",
    "links": [
      {
        "label": "Guide",
        "url": "https://developer.shoplive.cloud/web/live/"
      }
    ]
  },
  {
    "id": "2026-09-23-web-shortform-2026-09",
    "date": "2026-09-23",
    "type": "new",
    "products": [
      "shortform"
    ],
    "version": "",
    "title": "Web shortform — September update",
    "summary": "- **Story:** new `setShortformStory` shows shortforms in an Instagram-style round tray. A story is marked as seen when its card is tapped\n- Shortform details now show the viewer count\n- Fixed a gray screen when returning to a collection preview, and showcases not attaching to products added later by \"load more\"",
    "links": [
      {
        "label": "Guide",
        "url": "https://developer.shoplive.cloud/web/shortform/"
      }
    ]
  },
  {
    "id": "2026-09-14-ios-sdk-1.9.0",
    "date": "2026-09-14",
    "type": "breaking",
    "products": [
      "legacy"
    ],
    "version": "",
    "title": "iOS SDK 1.9.0 (V1)",
    "summary": "**The minimum iOS version is now 15.0** (was 11.0).\n\n- Player and Common now ship from one repository (`shoplive-sdk-ios`). `ios-sdk` and `common-ios` stay at 1.8.15\n- The Swift Package Manager product is renamed from `ShopLive` to `ShopLiveSDK` (the CocoaPods pod is still `ShopLive`)\n- No API changes — on 1.8.11 or later, bumping the version is the whole migration\n- Fixed custom-action `SHOW` and `KEEP` responses being ignored",
    "links": [
      {
        "label": "Release notes",
        "url": "https://github.com/shoplive/shoplive-sdk-ios/releases/tag/1.9.0"
      }
    ]
  },
  {
    "id": "2026-09-07-android-sdk-3.0.1",
    "date": "2026-09-07",
    "type": "breaking",
    "products": [
      "live"
    ],
    "version": "",
    "title": "Android SDK 3.0.1 — in-app PIP · private broadcasts",
    "summary": "**In fullscreen, the back button now shrinks the player to in-app PIP instead of closing it.** Set `pip.isInAppPipEnabled = false` to restore close-on-back.\n\n- In-app PIP: playback continues in a draggable mini window over your screens. Start straight into it with `ShoplivePlayOptions(presentationStyle = ShoplivePlayerPresentationStyle.PIP)`\n- Private broadcasts: playback and PIP stay blocked until the entry code is accepted\n- AndroidX Media3 is now the default HLS engine (ExoPlayer 2 is still available — pick one)\n- New error codes (9510–9514) tell you why OS PIP is unavailable\n- Fixed `appearance.allowScreenCapture = false` not blocking screen capture, and `navigation.actionOnNavigation` having no effect",
    "links": [
      {
        "label": "Release notes",
        "url": "https://github.com/shoplive/shoplive-sdk-android/releases/tag/3.0.1"
      }
    ]
  },
  {
    "id": "2026-08-31-android-sdk-1.8.14",
    "date": "2026-08-31",
    "type": "breaking",
    "products": [
      "legacy"
    ],
    "version": "",
    "title": "Android SDK 1.8.14 (V1)",
    "summary": "**The SDK is distributed from the Shoplive Maven repository (`https://sdk.shoplive.cloud/maven-repo`), since 1.8.13.** Add the repository, and declare each artifact you use because the POMs carry no transitive dependencies (`shoplive-common`, `shoplive-network`, `shoplive-sdk-core`, and so on).\n\n- Added the campaign list API `ShopLiveCampaigns.getCampaigns`. Query campaigns and their progress state from the app with no server integration (status filter, pagination, sorting, cancellation) — use it for a live badge on your home screen\n- A single `onClose` handler now receives both preview and OS PIP close events, with the reason, exactly once per screen\n- Fixed playback stalling near the end of a replay, swipe-to-close not delivering the close callback, and the close callback firing twice",
    "links": [
      {
        "label": "Release notes",
        "url": "https://github.com/shoplive/shoplive-sdk-android/releases/tag/1.8.14"
      }
    ]
  },
  {
    "id": "2026-08-27-web-live-2026-08",
    "date": "2026-08-27",
    "type": "new",
    "products": [
      "live"
    ],
    "version": "",
    "title": "Web live player — August update",
    "summary": "- **Join notices:** chat announces viewers as they join, and shows a notice when a prize draw starts\n- **Winner results:** anonymous winner totals, an option to hide the winner list, and winner name masking\n- Coupon popups can copy a code to the clipboard\n- **Captions:** two-line replay captions and SRT captions for recorded-video broadcasts, long captions split and paced in order, a \"caption\" icon instead of CC in the Korean UI, and captions shown automatically while muted (admin setting)\n- Switching product groups now scrolls the product list to the top, and fixed the resolution option missing on some replays",
    "links": [
      {
        "label": "Guide",
        "url": "https://developer.shoplive.cloud/web/live/"
      }
    ]
  },
  {
    "id": "2026-08-26-ios-sdk-3.0.1",
    "date": "2026-08-26",
    "type": "new",
    "products": [
      "live"
    ],
    "version": "",
    "title": "iOS SDK 3.0.1 — start previews in in-app PIP",
    "summary": "- Set `ShoplivePlayOptions.presentationStyle = .pip` to open playback straight in the floating in-app PIP window. The `preview` presets (PIP start, muted, overlays hidden) replace the 2.x preview popup. `.fullScreen` stays the default\n- Swipe an in-app PIP window off screen to close it\n- The campaign's live badge is drawn over in-app PIP\n- Private broadcasts with an entrance code play on both HLS and WebRTC\n- Fixed a crash when the player's WebSocket was torn down while a message was being delivered",
    "links": [
      {
        "label": "Release notes",
        "url": "https://github.com/shoplive/shoplive-sdk-ios/releases/tag/3.0.1"
      }
    ]
  },
  {
    "id": "2026-08-19-android-sdk-3.0.0",
    "date": "2026-08-19",
    "type": "breaking",
    "products": [
      "live"
    ],
    "version": "",
    "title": "Android SDK 3.0.0 — first unified SDK release",
    "summary": "**Artifact coordinates and the public API changed.** Declare `cloud.shoplive:shoplive-player-sdk` and/or `shoplive-streamer-sdk`; everything else comes transitively.\n\n- Player settings now go in one `ShoplivePlayerConfiguration` value instead of individual setters\n- `sound.mixWithOthers` now defaults to `false`, so playback interrupts other apps' audio. Set it to `true` to keep mixing\n- The streamer can broadcast over RTMP, chosen by the campaign configuration\n- Fixed `sound.muteOnStart` being ignored and a black screen instead of the background image when a broadcast ended, among others",
    "links": [
      {
        "label": "Release notes",
        "url": "https://github.com/shoplive/shoplive-sdk-android/releases/tag/3.0.0"
      },
      {
        "label": "Integration guide",
        "url": "https://developer.shoplive.cloud/mobile/"
      }
    ]
  },
  {
    "id": "2026-08-14-flutter-sdk-1.8.14",
    "date": "2026-08-14",
    "type": "new",
    "products": [
      "legacy"
    ],
    "version": "",
    "title": "Flutter SDK 1.8.14",
    "summary": "- Added `ShopLivePlayer.setResizeMode()` to set how the live player fits the screen (`auto` · `centerCrop` · `fit`)\n- Updated the bundled Shoplive iOS and Android SDKs to 1.8.13",
    "links": [
      {
        "label": "Release notes",
        "url": "https://github.com/shoplive/shoplive-sdk-flutter/releases/tag/1.8.14"
      },
      {
        "label": "pub.dev",
        "url": "https://pub.dev/packages/shoplive_player/versions/1.8.14"
      }
    ]
  },
  {
    "id": "2026-08-11-web-shortform-2026-08",
    "date": "2026-08-11",
    "type": "improve",
    "products": [
      "shortform"
    ],
    "version": "",
    "title": "Web shortform — August update",
    "summary": "- Added a URL mode that links showcases by product URL, with UX improvements\n- Initialization is refused for an expired access key",
    "links": [
      {
        "label": "Guide",
        "url": "https://developer.shoplive.cloud/web/shortform/"
      }
    ]
  },
  {
    "id": "2026-08-07-ios-sdk-3.0.0",
    "date": "2026-08-07",
    "type": "breaking",
    "products": [
      "live"
    ],
    "version": "",
    "title": "iOS SDK 3.0.0 — first unified SDK release",
    "summary": "**The 2.x public API is replaced, and the minimum iOS is 15.0.** Declare only the Swift Package Manager products `ShoplivePlayerSDK` and/or `ShopliveStreamerSDK`.\n\n- Present `ShoplivePlayerViewController` or embed `ShoplivePlayerView`, configured with one `ShoplivePlayerConfiguration`\n- The delegate is down to two methods (`didReceive` for notifications, `didRequest` for requests), and the entry point is one `Shoplive.initialize` · `setUser` … surface (Swift only)\n- Errors arrive as `ShopliveError` with a `ShopliveErrorCode`\n- The streamer also broadcasts over RTMP and asks for camera and microphone permission when the broadcast screen opens",
    "links": [
      {
        "label": "Release notes",
        "url": "https://github.com/shoplive/shoplive-sdk-ios/releases/tag/3.0.0"
      },
      {
        "label": "Integration guide",
        "url": "https://developer.shoplive.cloud/mobile/"
      }
    ]
  },
  {
    "id": "2026-07-31-web-live-2026-07",
    "date": "2026-07-31",
    "type": "new",
    "products": [
      "live"
    ],
    "version": "",
    "title": "Web live player — July update",
    "summary": "- **Emoji button:** viewers can react with emoji\n- URLs in popup text and in operator chat messages now open the linked page\n- New option to show live Q&A replies inside the chat list\n- Chats hidden by AI chat moderation can be restored, and image clicks in the winner-results replay sheet are reported as events\n- Winner announcements now work on every theme, with more languages\n- Fixed captions drifting after switching tabs, long captions without spaces overflowing, and the winner announcement misfiring for viewers who join mid-broadcast",
    "links": [
      {
        "label": "Guide",
        "url": "https://developer.shoplive.cloud/web/live/"
      }
    ]
  },
  {
    "id": "2026-07-30-web-shortform-2026-07",
    "date": "2026-07-30",
    "type": "new",
    "products": [
      "shortform"
    ],
    "version": "",
    "title": "Web shortform — July update",
    "summary": "- **Showcase:** new embedded showcase player for product pages (`setShortformShowcase`)\n- Fixed collection details always playing the first video, and the cover thumbnail disappearing on collections with preview playback turned off",
    "links": [
      {
        "label": "Guide",
        "url": "https://developer.shoplive.cloud/web/shortform/"
      }
    ]
  },
  {
    "id": "2026-07-09-flutter-sdk-1.8.13",
    "date": "2026-07-09",
    "type": "improve",
    "products": [
      "legacy"
    ],
    "version": "",
    "title": "Flutter SDK 1.8.13",
    "summary": "- Updated the bundled Shoplive iOS and Android SDKs to 1.8.11. No Dart API changes",
    "links": [
      {
        "label": "Release notes",
        "url": "https://github.com/shoplive/shoplive-sdk-flutter/releases/tag/1.8.13"
      },
      {
        "label": "pub.dev",
        "url": "https://pub.dev/packages/shoplive_player/versions/1.8.13"
      }
    ]
  }
]
