Shelly Wall Display
Shelly sells the Wall Display as five named models on two unrelated hardware platforms: the original and X2 on an armeabi-v7a legacy track, and X1i, X2i and XL on an arm64-v8a modern track. Firmware, OTA mechanism, access model and security are shared within each track, and mostly shared across both, so this page covers them once; each model’s own page carries only its clean specification, alias list and photo.
- Wall Display (original): 4 in, 480×480, Android 7
- Wall Display X2: 6.9 in, 1440×720, Android 8.1
- Wall Display X1i: 4 in, 720×720, Android 11
- Wall Display X2i: 6.9 in, 1440×720, Android 11
- Wall Display XL: 10.1 in, Android 11
Also sold as
Section titled “Also sold as”Shelly Wall Display, Shelly Wall Display X2, Shelly Wall Display X1i, Shelly Wall Display X2i, Shelly Wall Display XL, Wall Display U1, Wall Display D1, SAWD-0A1XX10EU1, SAWD-2A1XX10EU1, firmware codenames Stargate, Pegasus, Cally, Jenna, Blake, Maverick, Dayna and Atlantis, OTA tracks WallDisplay and WallDisplayV2, device IDs k400_mt6580_32_n and e500_7731e_32u_o, launcher package cloud.shelly.stargate.
Product family
Section titled “Product family”Firmware codenames are useful when inspecting an OTA, but are not a substitute for the retail model name.
| Firmware codename | Market name | Display | Platform | Relay hardware |
|---|---|---|---|---|
| Stargate | Wall Display (original) | 4 in, 480×480 | MT6580, Android 7 | 1 output |
| Pegasus | Wall Display X2 | 6.9 in, 1440×720 | SC7731E, Cortex-A7, Android 8.1 | 1 output |
| Cally | Wall Display X1i | 4 in, 720×720 | RK3326-S, Cortex-A35, Android 11 | interchangeable base: 1 output as standard, optional 2-output base |
| Jenna | Wall Display X2i | 6.9 in, 1440×720 | RK3326-S per Shelly’s specification; the chip reports the RK3326 family, Cortex-A35, Android 11 | interchangeable base: 1 output as standard, optional 2-output base |
| Blake | Wall Display XL | 10.1 in | RK3566, Cortex-A55, Android 11 | 1 output |
| Maverick | Wall Display U1 (US) | not established | not established | not established |
| Dayna | Wall Display D1 | not established | not established | not established |
Hardware platform
Section titled “Hardware platform”The Wall Display is an Android device, not an ESP-based embedded product like Shelly’s Gen1 and Gen2 switches. It runs a custom Android launcher app called Stargate.
The original Wall Display, X2, X1i and X2i, and XL are not one interchangeable hardware class: they use MT6580, SC7731E, RK3326-S and RK3566 respectively. The shared OTA channels describe package compatibility, not a shared SoC. The legacy image targets a userdebug base build, so adb root may be possible there if an adb connection can be established, but no user-facing route has been verified. The modern image carries no OTA metadata fingerprint and shows no build type, and an X2i on factory firmware reports a user build, so that unit at least offers no vendor route to root. See Access model.
Shelly documents temperature and humidity sensing on the original and X2, and ambient light sensing on the original, X2, X1i, X2i and XL. The X2, X1i and X2i have documented proximity sensing; the XL has a motion sensor. On the X2i both are ordinary Android sensors and the parts are Sensortek STK3A5x; on every other model the components and access paths are still unestablished. Relay count depends on the model and base, and outside the X2i no app-accessible Android relay interface has been established.
Home Assistant dashboards on the vendor firmware
Section titled “Home Assistant dashboards on the vendor firmware”Two modes (firmware 2.7.0 and later)
Section titled “Two modes (firmware 2.7.0 and later)”Built-in WebView browser (all models): Settings, Home Assistant (Settings, Network, Home Assistant on older firmware) opens a WebView at a configured Home Assistant URL. From 2.7.0 it is fully supported again and includes a Clear WebView cache option.
An app from the built-in AppStore (modern AppStore devices only: Blake, Jenna, Cally, Maverick, Dayna). Apps installed this way run in the system WebView, and have rendered correctly where the built-in browser had problems.
Built-in browser by firmware
Section titled “Built-in browser by firmware”| Firmware | Status |
|---|---|
| before 2.3.0 | Feature does not exist |
| 2.3.0 pre-release | Introduced under Settings, Network, Home Assistant |
| 2.6.0 | Deprecated on AppStore devices in favour of AppStore apps |
| 2.7.0 | Supported again, alongside AppStore apps |
Known compatibility issues
Section titled “Known compatibility issues”The built-in browser on the Wall Display XL had rendering and layout problems with Home Assistant frontend 2025.12 and a 2026.1 pre-release (tracked in home-assistant/frontend#28755 and #28746; core compatibility in home-assistant/core#162665). An app using the system WebView on the same device rendered correctly, which shows the issue was specific to the built-in browser’s WebView rather than the hardware.
WebView
Section titled “WebView”Original Wall Display (SAWD-0A1XX10EU1, Android 7): the stock system WebView is not included in the standard OTA package. Shelly publishes a separate update ZIP that installs com.google.android.webview 119.0.6045.194. No equivalent package has been established for the other models.
WallDisplayV2 track (arm64, Android 11): the standard OTA does not include a WebView package, so the stock WebView version cannot be read from the firmware. An X2i on factory firmware 2.5.4 ships Chromium 131.0.6778.200, which is well above Panel Assistant’s minimum and needs no update. Whether the other modern models ship the same build is unconfirmed.
See Updating the system WebView.
Access model
Section titled “Access model”Most of what follows was established before any Shelly unit could be examined, and describes the family as closed. Where the X2i differs, its own page is authoritative for the X2i, and only for the X2i.
A caveat worth probing, but only on legacy hardware. The legacy OTA declares its target build in META-INF/com/android/metadata, and at firmware 2.7.3 that is still alps/full_k400_mt6580_32_n/k400_mt6580_32_n:7.0/NRD90M/vXD100008:userdebug/test-keys. On a userdebug build adb root succeeds, so if an adb connection can be established, root and the helper daemon become available. That evidence has two limits: the fingerprint describes the device’s base OS image, whose timestamp is 2022-11-14 and which the app-only OTA does not change, and no adb route has been verified on a unit.
It does not extend to the modern track. The WallDisplayV2 package declares no build type. It has no META-INF/com/android/metadata fingerprint, and none of the markers userdebug, test-keys, release-keys or ro.build.fingerprint appears in any entry outside the bundled APKs (checked at 2.7.3; the APK payloads themselves were not searched). Its updater script reads ro.build.product only to log the device, and reads ro.build.version.incremental into HW_VERSION, which gates one conditional step: Camera2.apk is installed only when that value starts with vBlake and no camera package is already present. Neither value is asserted, so one ZIP installs on every modern model, and the retail modern OTA shows no build type either way. Shelly’s own security posture note, published in the same repository as the official changelog and scoped to current-generation hardware, states that “production devices ship with the Android user build type, on which ADB and developer/debug facilities are disabled by default”.
One qualification keeps the scope exact: an archived partition image, not part of either retail OTA track, identifies itself as Android 11 userdebug. Its SKU-to-codename filing is unreliable and its display platform contradicts the current retail specification, so it is evidence about that image, not about what modern retail units run. Treat modern hardware as closed unless a live unit shows otherwise.
What the absence of root means for the panel app:
- The helper daemon (
hapaneld-helper) needs a privileged path to/system, and without an adb foothold that carries root there is none, so every profile declaresplatform.app_can_su: false. Whether the legacyuserdebugbase build changes that is listed below as unknown. - Actions that genuinely need
suor Shizuku are therefore unavailable. On the X2i the everyday ones are not among them: brightness goes through Android’s own setting, the sensors are ordinary Android sensors, and the app installs and grants its own permissions over adb. What is lost is the privileged set, which on any panel without root means screenshots, tap-and-capture remote control, verified app and Companion updates, display density and text size, and rebooting or switching back to the vendor launcher. - The modern built-in AppStore shows that Shelly can distribute approved applications, but the panel app is not one of them. Installation is by sideload, on the X2i after the developer-mode unlock described above. Legacy devices still have no confirmed installation path.
- Device-owner behaviour depends on the firmware. On the X2i’s factory 2.5.4 there is no device owner and no device administrator at all, and the Stargate launcher can be disabled and re-enabled with ordinary package commands. The 2.7.3 update payload does carry the device-owner policy files, and the protected-package refusal is reported against 2.7.x by the ShellyElevate project rather than observed here. Which release in between introduced it is unexamined. On that 2.5.4 unit, making Panel Assistant the home app worked without root and held, so the launcher chooser was not the obstacle it had been assumed to be there. What a device owner does to that on later firmware is untested. Wall Display updates are one-way, so a panel that has already updated behaves as the later firmware does.
Connecting a panel to a computer
Section titled “Connecting a panel to a computer”The X2i additionally needs a USB-A to USB-C cable rather than USB-C to USB-C, and its page explains why. Whether the other models share that constraint is untested here.
Built-in sensors and relay
Section titled “Built-in sensors and relay”Sensor and relay details vary by model. From firmware and product pages:
| Component | Notes |
|---|---|
| Temperature and humidity | Documented on the original and X2. The X1i, X2i and XL have no built-in temperature or humidity sensor. Android API visibility is unverified. |
| Ambient light | Documented on the original, X2, X1i, X2i and XL. Measured on the X2i as an ordinary Android sensor needing no permission; unverified on every other model. |
| Motion and proximity | Proximity is documented on the X2, X1i and X2i; the XL has an official motion sensor. Measured on the X2i as an ordinary Android wake-up sensor needing no permission; unverified elsewhere. |
| Relay | One output on the original, X2 and XL. The X1i and X2i ship with a one-output base and support a separately sold two-output base. An unprivileged sysfs control path exists on the X2i but is not used; see Relays. No path is established on any other model. |
Handle relay entities through Home Assistant’s Shelly integration rather than assuming the panel app can control them directly. Outside the X2i, whether ordinary Android apps can see the sensors remains unverified.
What the X2i suggests about the rest of the line
Section titled “What the X2i suggests about the rest of the line”One X2i has been examined on a bench. The X1i, XL, Maverick and Dayna share its OTA track and its vendor, and the X1i shares its processor family, so some of what was measured may hold for them. None of it has been checked on any other model. Each point below is a thing to test, not a thing to rely on, and the findings themselves are on the X2i’s page.
- Recents may not work on any of them. The X2i ignores the Recents key and Android’s accessibility Recents action alike, because that firmware has no recents task directory. That cause is an operating-system fact rather than a board one, so it is worth checking on any model rather than assuming the board decides it. Both bundled profiles currently declare that these panels have Recents, which is measurably wrong for the X2i and untested for the rest.
- Proximity may be better than binary. Panel Assistant reads the X2i’s proximity part as a ranged signal rather than a near or far flag. The X1i also documents proximity and may share the part. The XL is the likeliest to differ, since Shelly documents it as a motion sensor rather than proximity.
- The relays may be reachable in principle. The X2i exposes them through a world-writable sysfs class. Panel Assistant does not use it, and two conditions travel with the finding: the relay terminals are inert on USB power, and the write succeeded only because that firmware runs SELinux permissive.
- A hidden developer-mode unlock is what makes any of this measurable, and it is confirmed only on the X2i, whose page carries the exact sequence and the correction that you must tap the line’s title rather than its value. Shelly does not advertise it there.
Firmware OTA mechanism
Section titled “Firmware OTA mechanism”What the firmware is
Section titled “What the firmware is”Wall Display firmware is an Android APK (the Stargate launcher app) packaged as a signed Android OTA ZIP. It is nothing like Shelly Gen1 firmware (ESP8266 .zip) or Gen2 switch firmware (EFR32 .gbl): it is an Android application update applied by Shelly’s in-app OTA downloader, not a partition-level flash.
OTA API
Section titled “OTA API”Wall Display devices use the Shelly Gen2 RPC API for update management:
Shelly.CheckForUpdate → { "stable": {"version": "2.7.1", "build_id": "..."}, ... }Shelly.Update { "stage": "stable" } // pull from the update manifestShelly.Update { "url": "..." } // install from a custom URLAn hourly check (from 2.6.0) and a startup check run automatically. From 2.7.0 an OTA sanity check verifies that the downloaded update is built for the correct hardware before applying it.
Update manifest endpoints (verified)
Section titled “Update manifest endpoints (verified)”There are two firmware tracks, divided by package ABI rather than by one uniform hardware generation.
Track 1: WallDisplay (armeabi-v7a, original and X2)
Section titled “Track 1: WallDisplay (armeabi-v7a, original and X2)”GET https://updates.shelly.cloud/update/WallDisplayCovers SAWD-0A1XX10EU1 (Stargate) and SAWD-2A1XX10EU1 (Pegasus). The OTA updater script asserts that ro.product.device is k400_mt6580_32_n (Stargate) or e500_7731e_32u_o (Pegasus) before applying.
Example response, captured at 2.7.1: stable.version 2.7.1, build_id 20260609-205046/2.7.1-857d7175, and a CDN URL that is a blob named by its SHA-256 (see the note below). For what is current, read the index rather than this example.
Track 2: WallDisplayV2 (arm64-v8a, Android 11 models)
Section titled “Track 2: WallDisplayV2 (arm64-v8a, Android 11 models)”GET https://updates.shelly.cloud/update/WallDisplayV2Covers Blake, Jenna, Cally, Maverick and Dayna. The OTA updater script reads ro.build.product for logging only, with no per-product assertion, so one ZIP installs on all modern models.
The response has the same version and build ID as Track 1 (2.7.1 in the example above), compiled for arm64-v8a. Both tracks share version numbers and build IDs: they are compiled together from the same codebase for different ABIs.
Static legacy CDN (SAWD-0A1XX10EU1 only)
Section titled “Static legacy CDN (SAWD-0A1XX10EU1 only)”https://repo.shelly.cloud/firmware/SAWD-0A1XX10EU1/stable/SAWD-0A1XX10EU1.ziphttps://repo.shelly.cloud/firmware/SAWD-0A1XX10EU1/stable/SAWD-0A1XX10EU1-WebViewUpdate.zipFrozen at version 1.2.1 (2023-08-15). The WebView update ZIP (107.5 MB) contains the system WebView APK for the legacy Android 7 device. The directory listing returns 403.
OTA file format
Section titled “OTA file format”Verified from both tracks. Every OTA ZIP contains:
META-INF/com/google/android/updater-script, a custom shell-script OTA applier (not Edify)manifest.json:{"name":"WallDisplay[V2]","version":"X.Y.Z","build_id":"...","build_timestamp":"..."}system/priv-app/Stargate/Stargate.apk, the Shelly launcher (31 MB for arm64, about 10 MB for armeabi-v7a)META-INF/MANIFEST.MF,CERT.SFandCERT.RSA, signed with SignApk
Legacy additions: scatter.txt (the MediaTek MT6580 partition layout) and META-INF/com/android/metadata (build fingerprint alps/full_k400_mt6580_32_n/..., Android 7.0); the updater script asserts the product device before proceeding.
Modern additions: device_owner_2.xml, device_admins.xml and tzdata/ updates; no scatter.txt, because it is not a partition-level flash.
The Stargate APK’s native library path confirms the ABI: lib/armeabi-v7a/libstargate_input.so (legacy) and lib/arm64-v8a/libstargate_input.so (modern).
Known firmware files
Section titled “Known firmware files”| File | Track | Version | ABI | Size |
|---|---|---|---|---|
WallDisplay-2.7.1-stable.bin |
WallDisplay |
2.7.1 | armeabi-v7a | 28.6 MB |
WallDisplayV2-2.7.1-stable.bin |
WallDisplayV2 |
2.7.1 | arm64-v8a | 38 MB |
SAWD-0A1XX10EU1-stable-firmware.zip |
repo.shelly.cloud (static) | 1.2.1 (2023-08-15) | armeabi-v7a | 12.5 MB |
SAWD-0A1XX10EU1-stable-WebViewUpdate.zip |
repo.shelly.cloud (static) | WebView for Android 7 | armeabi-v7a | 107.5 MB |
Security
Section titled “Security”Firmware 2.6.0 disclosed that RPC over BLE was open to any BLE connection without authentication (reported by Pen Test Partners). It was fixed in stages:
- 2.6.0: a BLE connection confirmation dialog, which the user must acknowledge before an RPC session opens.
- 2.7.0: the GATT server is non-connectable when Enable Bluetooth RPC is off, and BLE scan matching is stricter to reduce unintended connections.
Firmware versions that affect third-party apps
Section titled “Firmware versions that affect third-party apps”Stable track, most recent first. The full product changelog is at ShellyGroup/Wall-Display-Changelog, which covers 2.4.0 and later; earlier releases are on community.shelly.cloud, which needs a login.
| Version | Date | Relevant change |
|---|---|---|
| 2.7.3 | 2026-07-29 | Latest analysed release; the legacy OTA still declares the userdebug base build |
| 2.7.2 | 2026-07-16 | Third-party apps are uninstalled on factory reset |
| 2.7.0 | 2026-06-03 | Built-in Home Assistant browser supported again, with a cache clear option; OTA hardware sanity check; GATT non-connectable when RPC over BLE is off |
| 2.6.0 | 2026-05-12 | AppStore (modern models only); hourly OTA check; BLE authentication dialog; built-in Home Assistant browser deprecated on AppStore models |
| 2.5.6 | 2026-02-04 | WebView paused in the background on heavy Home Assistant dashboards to avoid crashes, which also reloads WebRTC streams |
| 2.5.3 | about 2025-10 | WebView version check on the old X1 |
| 2.5.1 | 2025-10-27 | Android Accessibility settings exposed |
| 2.3.4 | 2025-02-23 | Emergency fix for an OTA update channel failure that left devices stuck on old firmware |
| 1.2.1 | 2023-08-15 | Oldest confirmed downloadable version (static CDN) |
Device profiles: known and unknown
Section titled “Device profiles: known and unknown”Two bundled profiles follow the two OTA tracks: shelly-wall-display.yaml and shelly-wall-display-v2.yaml. An OTA track is too broad to represent model-specific SoC, display and relay facts, so both stay deliberately generic and their fields remain preliminary. The table below describes them. For what an X2i actually reports, read its own page.
Known or derivable from firmware
Section titled “Known or derivable from firmware”| Field | shelly-wall-display (legacy) |
shelly-wall-display-v2 (modern) |
Source |
|---|---|---|---|
soc_class |
model-dependent; the original is MT6580 and the X2 is SC7731E | model-dependent; the X1i is RK3326-S and the XL is RK3566 | official model pages; OTA fingerprints |
platform.su_form / app_can_su |
none / false |
none / false |
no user-exposed root (legacy targets a userdebug base build; modern shows no build type; see Access model) |
hardware.led.mechanism |
none |
none |
current profile declaration; not verified on every model |
hardware.screen_off |
brightness-zero |
brightness-zero |
no privileged screen-off path |
platform.has_recents |
true |
true |
declared by both profiles, and wrong on the X2i, which has no working Recents by any route |
hardware.relay_base |
absent | absent | relays are operated through the Home Assistant Shelly integration; no app-accessible standard path established |
hardware.zigbee_gateway_dir |
absent | absent | no Zigbee or Thread radio |
sensors.proximity_technology |
absent | absent | needs live hardware evidence on each remaining model |
sensors.light_technology |
Ambient light |
Ambient light |
official model pages; Android API exposure unverified outside the X2i |
| App package | cloud.shelly.stargate (home launcher) |
same | Stargate APK manifest; the 2.7.3 payload additionally installs device-owner policy files |
Unknown until a live unit is examined
Section titled “Unknown until a live unit is examined”- The exact runtime identifiers needed to tell the X2, X1i and XL apart without false profile matches. An X2i reports its firmware codename consistently across every identifier, so that is the first thing to try on each of the others.
- Whether Android
SensorManagerexposes each documented ambient light, motion or proximity sensor on the models other than the X2i. platform.has_recentson the models other than the X2i. Both profiles declaretrue, and on the X2i that is measurably wrong: neither the Recents key nor Android’s accessibility Recents action does anything, because the firmware has no recents task directory.- Default display density and an appropriate
provisioning.display.densityper model. - Whether an adb foothold and
adb rootare reachable on the legacyuserdebugbase build, which would allow the helper daemon. One X2i ships auserbuild, so there is no vendor route to root on that unit; whether the other modern models do the same is untested. - Whether the panel app’s HTTP service on port 8888 is reachable from the LAN, which depends on the device’s firewall.
Sources
Section titled “Sources”- ShellyGroup/Wall-Display-Changelog: the official firmware changelog.
- SECURITY_POSTURE.md: Shelly’s own statement on build type, adb, sideloading and update signing for current-generation hardware.
- Shelly Wall Display knowledge base: the original 4 in model.
- Shelly Wall Display X2 knowledge base
- Shelly Wall Display X1i knowledge base
- Shelly Wall Display X2i knowledge base
- Shelly Wall Display XL knowledge base
- Shelly Gen2 RPC API:
Shelly.CheckForUpdateandShelly.Update. - home-assistant/frontend#28755: the built-in browser rendering issue on the XL.
- home-assistant/core#162665: Home Assistant integration compatibility.
- Pen Test Partners: the BLE RPC authentication issue, fixed in 2.6.0 and 2.7.0.
Comments
Comments are kept in this page's discussion on GitHub, so loading them connects your browser to GitHub. This browser remembers the choice and loads comments on other pages when you scroll down to them.
Comment without a GitHub account