What's New
WLED 8.0.0 unifies the official Android and iOS apps in a single Kotlin Multiplatform codebase while bringing major new features to both platforms:
- Home Screen Widgets, Siri & Shortcuts: Interactive Home Screen widgets on iOS (with Liquid Glass support, Siri, Shortcuts, and Action button integration) and a refreshed Material 3 widget layout on Android featuring live Wi-Fi signal strength indicators and an ambient glow when lights are on.
- What's New Changelog: Automatically view localized release notes after an update or revisit them anytime from Settings on both Android and iOS.
- Feature Parity on iOS: OTA firmware updates for custom QuinLED and MoonModules boards alongside official WLED releases, theme selection, offline device grouping, automatic discovery controls, battery level indicators, and German & Simplified Chinese translations.
- Smoother Discovery & Real-Time Connections: Shared mDNS discovery and WebSocket state management with a 60-second offline grace period, Android 17 local network permission support, a connection progress bar, and fixed WebView file uploads on Android.
🚀 New Features
- Improve iOS widget initial configuration and unconfigured state (#296) @Moustachauve
- Add curated short Google Play release notes and skill workflows (#297) @Moustachauve
- Add /prepare-release skill for beta and production release preparation (#292) @Moustachauve
- Show indeterminate loading bar at top of device WebView (#291) @Moustachauve
- Replace iOS HTML error pages with native SwiftUI error view (#290) @Moustachauve
- Add German and Simplified Chinese localizations to iOS (#289) @Moustachauve
- Support localized What's New changelogs and store release notes (#287) @Moustachauve
- Automate Android and iOS beta and production releases via GitHub Actions and Fastlane (#286) @Moustachauve
- Display WiFi signal strength icon in Android and iOS widgets (#283) @Moustachauve
- Polish Android Home Screen widget layout and Material 3 theme (#282) @Moustachauve
- Polish iOS Home Screen widget layout and Liquid Glass support (#281) @Moustachauve
- Add iOS Home Screen WidgetKit extension and live widget state sync (#272) @Moustachauve
- Add iOS App Intents, widget views, and snapshot tests (#271) @Moustachauve
- Bring iOS device list, edit, and OTA update UI to parity with Android (#269) @Moustachauve
- Respect the automatic discovery setting and add it to iOS (#263) @Moustachauve
- Add What's New changelog sheet on iOS and share version filtering logic. (#262) @Moustachauve
- Style changelog sheet with pixel font, version cards, and floating action. (#261) @Moustachauve
- Adopt shared UserPreferencesRepository and @observable view models on iOS (#257) @Moustachauve
- Adopt shared DeviceConnectionManager in iOS app (#239) @Moustachauve
- Adopt shared DeviceConnectionManager on Android (#246) @Moustachauve
- Add database persistence and firmware update polling to DeviceConnectionManager (#248) @Moustachauve
- Implement core real-time DeviceConnectionManager in shared module (#247) @Moustachauve
- Add multiplatform device connection and partitioning foundations (#237) @Moustachauve
- Tune Gradle JVM options and modernize build performance settings (#240) @Moustachauve
- Fetch device info on iOS through the shared DeviceApi (#234) @Moustachauve
- Migrate iOS app persistence from Core Data to shared Room database (#231) @Moustachauve
- Integrate native iOS application into monorepo and link Shared framework (#229) @Moustachauve, @sqrt0b1000, @gemini-code-assist[bot], @google-labs-jules[bot]
- Export Shared KMP module as an XCFramework for iOS consumption (#227) @Moustachauve
- feat(kmp): migrate DeviceDiscovery (mDNS) to shared module for Android and iOS (#224) @Moustachauve
- feat(kmp): implement IosNetworkConnectivityManager and iOS unit tests (Phase 4.3) (#222) @Moustachauve
- feat(kmp): implement AndroidNetworkConnectivityManager and migrate :app (Phase 4.2) (#221) @Moustachauve
- feat(kmp): define shared NetworkConnectivityManager interface and NetworkStatus model (Phase 4.1) (#220) @Moustachauve
- refactor(kmp): migrate DataStore and UserPreferences to :shared (Step 3.6) (#219) @Moustachauve
- refactor(kmp): migrate Ktor API clients, WebSockets, and ReleaseService to :shared (Step 3.5) (#218) @Moustachauve
- refactor(kmp): migrate Room database, entities, and repositories to :shared (Step 3.4) (#217) @Moustachauve
- feat(kmp): configure SKIE gradle plugin for swift interop in :shared (#216) @Moustachauve
- refactor(kmp): migrate pure network DTOs, models, and utilities to :shared (#215) @Moustachauve
- feat(kmp): scaffold :shared multiplatform module targeting android and ios (#214) @Moustachauve
- feat(room): switch SQLite driver to BundledSQLiteDriver and update migrations for Room KMP (#206) @Moustachauve
- feat(websocket): migrate to Ktor Client WebSockets and modernize state architecture (#205) @Moustachauve
- refactor: migrate HTTP networking from Retrofit to Ktor Client (#200) @Moustachauve
- feat: migrate navigation from Navigation Compose to Navigation 3 (#192) @Moustachauve
- feat: Whats new view (#155) @Moustachauve
🐛 Bug Fixes
- Keep reflective constructors for Glance widget workers and actions in R8 (#301) @Moustachauve
- Request local network permission on Android 17 and prevent NSD picker loop (#293) @Moustachauve
- Avoid blocking the main thread when loading the initial app theme (#294) @Moustachauve
- Seed baseline changelog version when migrating from pre-8.0 installs (#285) @Moustachauve
- Resolve Swift compiler warnings in Xcode across app and test targets (#270) @Moustachauve
- Fix WebView file uploads and retain upload callbacks across configuration changes (#266) @Moustachauve
- Fix iOS build warnings in Xcode (#241) @Moustachauve
- Support unsigned 32-bit values for nightlight remaining time (#235) @Moustachauve
- Merge main into dev (v7.0.1 hotfix sync) (#188) @Moustachauve
- fix(widget): prevent crash when publishing widget previews (#156) @Moustachauve
🧰 Maintenance
- Release 8.0.0 (#306) @Moustachauve
- Record main (v7.0.1) merge ancestry in dev (#307) @Moustachauve
- Prepare 8.0.0 release changelogs and translations (#305) @Moustachauve
- Chore(deps): Bump gradle/actions from 6.4.0 to 6.4.1 (#302) @dependabot[bot]
- Chore(deps): Bump com.google.devtools.ksp from 2.3.12 to 2.3.13 (#304) @dependabot[bot]
- Chore(deps): Bump com.android.tools.screenshot:screenshot-validation-api from 0.0.1-alpha16 to 0.0.1-alpha17 (#303) @dependabot[bot]
- Speed up the iOS CI check (#300) @Moustachauve
- Migrate Compose screenshot testing to AGP 9.5 test suites (#299) @Moustachauve
- Update libs.versions.toml (#298) @Moustachauve
- Improve iOS widget initial configuration and unconfigured state (#296) @Moustachauve
- Add curated short Google Play release notes and skill workflows (#297) @Moustachauve
- Extract local network permission controller and refine retry flow (#295) @Moustachauve
- Request local network permission on Android 17 and prevent NSD picker loop (#293) @Moustachauve
- Avoid blocking the main thread when loading the initial app theme (#294) @Moustachauve
- Add /prepare-release skill for beta and production release preparation (#292) @Moustachauve
- Show indeterminate loading bar at top of device WebView (#291) @Moustachauve
- Replace iOS HTML error pages with native SwiftUI error view (#290) @Moustachauve
- Add German and Simplified Chinese localizations to iOS (#289) @Moustachauve
- Move back changes to dev since we're not quite ready for a release yet. (#288) @Moustachauve
- Support localized What's New changelogs and store release notes (#287) @Moustachauve
- Automate Android and iOS beta and production releases via GitHub Actions and Fastlane (#286) @Moustachauve
- Prepare unified 8.0.0 release for Android and iOS (#284) @Moustachauve
- Display WiFi signal strength icon in Android and iOS widgets (#283) @Moustachauve
- Polish Android Home Screen widget layout and Material 3 theme (#282) @Moustachauve
- Remove unused Gradle dependencies and update Android and iOS packages (#280) @Moustachauve
- Add iOS Home Screen WidgetKit extension and live widget state sync (#272) @Moustachauve
- Add iOS App Intents, widget views, and snapshot tests (#271) @Moustachauve
- Resolve Swift compiler warnings in Xcode across app and test targets (#270) @Moustachauve
- Bring iOS device list, edit, and OTA update UI to parity with Android (#269) @Moustachauve
- Use targeted device updates and markUpdateInstalled on Android (#268) @Moustachauve
- Fix WebView file uploads and retain upload callbacks across configuration changes (#266) @Moustachauve
- Upload failed screenshot diffs as a dedicated CI artifact (#265) @Moustachauve
- Respect the automatic discovery setting and add it to iOS (#263) @Moustachauve
- Add What's New changelog sheet on iOS and share version filtering logic. (#262) @Moustachauve
- Style changelog sheet with pixel font, version cards, and floating action. (#261) @Moustachauve
- Adopt shared UserPreferencesRepository and @observable view models on iOS (#257) @Moustachauve
- Add SwiftUI snapshot testing for the iOS device list screen (#260) @Moustachauve
- Remove unused Android resources and exclude dev-only files from app binaries (#258) @Moustachauve
- Add Compose Preview screenshot testing for the device list screen (#259) @Moustachauve
- Unify device discovery handling and offline grace-period partitioning (#256) @Moustachauve
- Remove stale firmware update strings from iOS String Catalog (#255) @Moustachauve
- Wire iOS shared dependencies through isolated Koin containers (#254) @Moustachauve
- Unify DeviceFirstContactService and address validation in :shared (#253) @Moustachauve
- Migrate iOS firmware updates and releases to shared KMP module (#252) @Moustachauve
- Update Gradle, Android, and iOS dependencies to latest compatible versions (#251) @Moustachauve
- Update agent instructions, skills, and pre-commit guardrails (#250) @Moustachauve
- Bump iOS minimum deployment target to 18.0 (#238) @Moustachauve
- Optimize iOS check workflow and resolve test runner flakiness (#249) @Moustachauve
- Tune Gradle JVM options and modernize build performance settings (#240) @Moustachauve
- Migrate Android dependency injection from Hilt to Koin (#236) @Moustachauve
- Declare thrown exceptions on DeviceApi for Swift callers (#233) @Moustachauve
- Alphabetize String Catalog entries in Localizable.xcstrings (#232) @Moustachauve
- Rename project and documentation references to WLED-App (#230) @Moustachauve
- Integrate native iOS application into monorepo and link Shared framework (#229) @Moustachauve, @sqrt0b1000, @gemini-code-assist[bot], @google-labs-jules[bot]
- Optimize iOS CI workflow execution and cache Kotlin/Native toolchain (#228) @Moustachauve
- Export Shared KMP module as an XCFramework for iOS consumption (#227) @Moustachauve
- Update app dependencies and CI GitHub actions to latest stable versions (#226) @Moustachauve
- ci: test and lint KMP :shared module across Android and iOS (#223) @Moustachauve
- feat(kmp): implement AndroidNetworkConnectivityManager and migrate :app (Phase 4.2) (#221) @Moustachauve
- feat(kmp): define shared NetworkConnectivityManager interface and NetworkStatus model (Phase 4.1) (#220) @Moustachauve
- refactor(kmp): migrate DataStore and UserPreferences to :shared (Step 3.6) (#219) @Moustachauve
- refactor(kmp): migrate Ktor API clients, WebSockets, and ReleaseService to :shared (Step 3.5) (#218) @Moustachauve
- refactor(kmp): migrate Room database, entities, and repositories to :shared (Step 3.4) (#217) @Moustachauve
- feat(kmp): configure SKIE gradle plugin for swift interop in :shared (#216) @Moustachauve
- refactor(kmp): migrate pure network DTOs, models, and utilities to :shared (#215) @Moustachauve
- feat(kmp): scaffold :shared multiplatform module targeting android and ios (#214) @Moustachauve
- refactor(kmp): decouple Dagger Hilt from core repository, service, and domain classes (#213) @Moustachauve
- Chore(deps): Update dependencies to latest stable versions (#212) @Moustachauve
- refactor(kmp): decouple android.util.Log and semver4j using Kermit and KMP semver (#207) @Moustachauve
- feat(room): switch SQLite driver to BundledSQLiteDriver and update migrations for Room KMP (#206) @Moustachauve
- feat(websocket): migrate to Ktor Client WebSockets and modernize state architecture (#205) @Moustachauve
- chore: enable detekt UnusedImports, coroutine, bug, and style rules (#204) @Moustachauve
- refactor(test): modernize test suite to pure JUnit 5 and remove Robolectric (#203) @Moustachauve
- chore: optimize GitHub Actions workflows and remove duplicate PR triggers (#202) @Moustachauve
- Implement Selfie snapshot testing across model, serialization, and migration test suites (#201) @Moustachauve
- refactor: migrate HTTP networking from Retrofit to Ktor Client (#200) @Moustachauve
- chore: remove coderabbit configuration (#199) @Moustachauve
- chore: enable parallel sync for Gradle 9.4+ (#198) @Moustachauve
- refactor: replace DataStore Protobuf with kotlinx.serialization (#196) @Moustachauve
- chore: bump targetSdk to 37 (#195) @Moustachauve
- refactor: replace Moshi with kotlinx.serialization (#194) @Moustachauve
- chore: remove deprecated compose-navigation skill (#193) @Moustachauve
- feat: migrate navigation from Navigation Compose to Navigation 3 (#192) @Moustachauve
- chore: update and reorganize android agent skills into categories (#191) @Moustachauve
- chore(coderabbit): enable automatic reviews on dev branch (#190) @Moustachauve
- Chore(deps): Update all dependencies, Kotlin, and Gradle to latest stable versions (#187) @Moustachauve
- ci: optimize GitHub Actions cache and lint analysis (#189) @Moustachauve
- Merge main into dev (v7.0.1 hotfix sync) (#188) @Moustachauve
- Chore(deps): Bump gradle-wrapper from 9.4.1 to 9.5.0 (#166) @dependabot[bot]
- Chore(deps): Bump kotlin from 2.3.20 to 2.3.21 (#164) @dependabot[bot], @Moustachauve
- Chore(deps): Bump androidx.compose:compose-bom from 2026.03.01 to 2026.04.01 (#162) @dependabot[bot], @Moustachauve
- Chore(deps): Bump navigationCompose from 2.9.7 to 2.9.8 (#163) @dependabot[bot], @Moustachauve
- Chore(deps): Bump com.google.devtools.ksp from 2.3.6 to 2.3.7 (#165) @dependabot[bot], @Moustachauve
- Chore(deps): Bump agp from 9.1.0 to 9.1.1 (#158) @dependabot[bot], @Moustachauve
- Chore(deps): Bump org.jetbrains.kotlinx:kotlinx-serialization-json from 1.10.0 to 1.11.0 (#159) @dependabot[bot], @Moustachauve
- Chore(deps): Bump com.google.protobuf from 0.9.6 to 0.10.0 (#160) @dependabot[bot], @Moustachauve
- feat: Whats new view (#155) @Moustachauve
Contributors
@Moustachauve, @dependabot[bot], @sqrt0b1000, @gemini-code-assist[bot] and @google-labs-jules[bot]