<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/">
  <channel>
    
    <title>GitHub Kotlin Daily Trending Repositories</title>
    <description>Daily Trending Repositories of Kotlin on GitHub</description>
    
    <pubDate>Sun, 11 Oct 2026 06:47:56 GMT</pubDate>
    <link>https://mshibanami.github.io/GitHubTrendingRSS</link>
    
    <item>
      <title>HuangZhuoRui/LocationSpoofer</title>
      <link>https://github.com/HuangZhuoRui/LocationSpoofer</link>
      <description>&lt;p&gt;虚拟定位软件，主要是定位，集成了 WiFi、蓝牙、基站等方案，主要有定点模拟和路线模拟。非全局方案，需要单独 hook 对应的软件(因为不想单独去适配各大手机厂商的系统)，&lt;/p&gt;&lt;hr&gt;&lt;div align=&quot;center&quot;&gt; 
 &lt;h1&gt;LocationSpoofer&lt;/h1&gt; 
 &lt;p&gt;基于 KernelSU + LSPosed 的 Android 系统级虚拟定位与无线环境伪装框架&lt;/p&gt; 
 &lt;p&gt;Android system-level location spoofing and wireless environment simulation framework based on KernelSU + LSPosed&lt;/p&gt; 
 &lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/HuangZhuoRui/LocationSpoofer/main/LICENSE&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/License-GPL%20v3-blue.svg?sanitize=true&quot; alt=&quot;License: GPL-3.0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://developer.android.com&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Android-8.0%2B-green.svg?sanitize=true&quot; alt=&quot;Android&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://kotlinlang.org&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Kotlin-2.0%2B-purple.svg?sanitize=true&quot; alt=&quot;Kotlin&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://developer.android.com/jetpack/compose&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Jetpack-Compose-4285F4.svg?sanitize=true&quot; alt=&quot;Compose&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://kernelsu.org&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Root-KernelSU-orange.svg?sanitize=true&quot; alt=&quot;KernelSU&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/LSPosed/LSPosed&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/LSPosed-API%20101%2B-purple.svg?sanitize=true&quot; alt=&quot;LSPosed&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://t.me/+CsxZGItXdW40ZWVl&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Telegram-%E4%BA%A4%E6%B5%81%E7%BE%A4-blue.svg?sanitize=true&quot; alt=&quot;Telegram&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/HuangZhuoRui/LocationSpoofer/main/README.md&quot;&gt;简体中文&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/HuangZhuoRui/LocationSpoofer/main/README_EN.md&quot;&gt;English&lt;/a&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;hr /&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;📢 加入我们的 &lt;a href=&quot;https://t.me/+CsxZGItXdW40ZWVl&quot;&gt;Telegram 交流群&lt;/a&gt; 进行&lt;/strong&gt;&lt;s&gt;技术探讨、催更、&lt;/s&gt;&lt;strong&gt;吹牛逼、搞抽象。&lt;/strong&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;strong&gt;📖 查看 &lt;a href=&quot;https://docs.google.com/document/d/1fFEz3k7ATdN2dwY1L3RJn1QuzgokIsslNa88-vUPxPk/edit?usp=sharing&quot;&gt;LocationSpoofer 详细使用教程&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;hr /&gt; 
&lt;h2&gt;项目简介&lt;/h2&gt; 
&lt;p&gt;在现代 Android 系统的风控与反作弊环境中，传统的“模拟位置（Mock Location）”开发者选项已被商业 SDK（如高德风控、腾讯安全、百度定位、网易易盾、各类考勤及打卡风控系统）列为高风险特征。这类检测机制不仅验证 &lt;code&gt;isFromMockProvider&lt;/code&gt; / &lt;code&gt;isMock&lt;/code&gt; 标志位，还会主动采集并交叉比对设备所处的周围物理环境：&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Wi-Fi 接入点与 BSSID 列表&lt;/strong&gt;（比对 Wi-Fi 信号指纹库）&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;移动蜂窝基站数据&lt;/strong&gt;（GSM / WCDMA / LTE / 5G NR 小区指纹与运营商信息）&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;周围 BLE 蓝牙信标&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;底层 GNSS 卫星分布与可见卫星星历&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;加速度计与计步器传感器联动状态&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;对连续定位坐标序列进行傅里叶变换（FFT）或离散度分析，识别非自然的静态固定点或机械式等速直线轨迹。&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;LocationSpoofer&lt;/strong&gt; 是专为应对深度风控检测而设计的&lt;strong&gt;系统级虚拟定位与无线环境模拟方案&lt;/strong&gt;。 项目基于 &lt;strong&gt;KernelSU / APatch / Magisk&lt;/strong&gt; 获取底层 Root 权限，并利用 &lt;strong&gt;LSPosed (libxposed API 101+)&lt;/strong&gt; 框架在 Zygote 阶段注入目标应用进程，以高物理契合度拦截并伪造所有与位置、卫星、基站、Wi-Fi、蓝牙、传感器相关的底层 API 响应，确保应用获取自洽且真实的虚假环境指纹。&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;功能特性&lt;/h2&gt; 
&lt;pre&gt;&lt;code&gt;┌─────────────────────────────────────────────────────────────────────────┐
│                             LocationSpoofer                             │
│                    系统级虚拟定位与无线环境模拟                         │
└─────────────────────────────────────────────────────────────────────────┘
        │                            │                            │
        ▼                            ▼                            ▼
  【空间定位与物理仿真】       【无线电与传感器模拟】         【反检测套件】
  • 三地图引擎自由切换         • Wi-Fi 扫描与连接态伪装       • Xposed 堆栈调用帧清洗
  • WGS-84/GCJ-02/BD-09 自适应 • 2G-5G NR 蜂窝基站小区模拟   • ClassLoader 探测隔离
  • Ornstein-Uhlenbeck 抖动    • BLE 蓝牙信标扫描过滤         • isFromMockProvider 抹除
  • 步态横向摇摆与高斯噪声     • WiGLE / OpenCellID 云端导入  • AppOps OP_MOCK_LOCATION 隐藏
  • 真实路网拟合与红绿灯停候   • 空间反距离加权 (IDW) 插值    • Settings.Secure 开关覆写
  • 悬浮窗遥控阻尼摇杆         • 步频与计步传感器联动         • MultiDex 动态 Class 拦截
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;1. 多地图引擎与坐标系适配&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;三引擎自由切换&lt;/strong&gt;：集成高德 3D 地图 (AMap)、百度地图 (BaiduMap) 与 Google Maps，满足境内外不同场景下的路网检索与 POI 选点需求。&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;开箱即用与全语言支持&lt;/strong&gt;：默认“自动匹配”在所有语言（包括中文、英文、阿拉伯语等）环境下均稳定选用高德地图，无需 Google 服务或特殊网络即可顺畅使用。&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Google 地图自定义 Key&lt;/strong&gt;：App 不内置任何 Google Maps 默认密钥；如需使用 Google 地图渲染与 Places 全球搜索，只需在“设置”中填入您自行申请的 Google API Key 即可。&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;智能坐标系自适应（Smart Auto）&lt;/strong&gt;： 
  &lt;ul&gt; 
   &lt;li&gt;系统原生接口统一输出标准 &lt;code&gt;WGS-84&lt;/code&gt; 物理坐标与卫星数据；&lt;/li&gt; 
   &lt;li&gt;各大地图定位 SDK（高德/腾讯/百度）及视图渲染层（如百度地图蓝点 &lt;code&gt;MyLocationData&lt;/code&gt;）自动映射对应坐标系（&lt;code&gt;GCJ-02&lt;/code&gt; / &lt;code&gt;BD-09&lt;/code&gt;），规避坐标偏移与 &lt;code&gt;(0.0, 0.0)&lt;/code&gt; 兜底问题；&lt;/li&gt; 
   &lt;li&gt;支持在“配置应用坐标系”中为目标应用强制指定 &lt;code&gt;WGS-84&lt;/code&gt;、&lt;code&gt;GCJ-02&lt;/code&gt; 或 &lt;code&gt;BD-09&lt;/code&gt;。&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;零延迟计算&lt;/strong&gt;：Hook 阶段直接从预计算的内存数据读取坐标，避免高频回调中的重复三角函数开销。&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;2. GPS 物理抖动与步态模拟&lt;/h3&gt; 
&lt;p&gt;真实 GPS 芯片输出的坐标因电离层延迟、多径效应及接收机热噪声，天然具有高斯分布的白噪声特征。&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Ornstein-Uhlenbeck 随机过程&lt;/strong&gt;：引入物理学均值回归随机过程模型来生成自然位置抖动，其状态随机微分方程定义为：&lt;/p&gt; &lt;p&gt;$$\mathrm{d}X_t = -\alpha X_t \mathrm{d}t + \sigma \mathrm{d}W_t$$&lt;/p&gt; &lt;p&gt;其中 $\sigma$ 为漂移强度，$\alpha$ 为均值回归系数（设定为 &lt;code&gt;0.05&lt;/code&gt;，即每秒将当前漂移拉回 5%）。它产生符合物理规律的低频缓慢漂移，并在 3-Sigma 原则下严格有界（硬性限制在 4 米内），防止漂移发散引发异常。&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;步频横向抖动（Gait Jitter）&lt;/strong&gt;：步行或跑步模式下，引擎沿当前移动方向的正交横向上施加高斯横向位移：&lt;/p&gt; &lt;p&gt;$$\Delta L_{\text{lateral}} = 0.15 \cdot \mathcal{N}(0, 1) \quad (\text{米})$$&lt;/p&gt; &lt;p&gt;模拟人类真实行走时身体左右晃动的步态特征。&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;高度（Altitude）与精度（Accuracy）慢漂移&lt;/strong&gt;：精度值与海拔高度动态波动，模拟大气对流层延迟与卫星几何分布的自然变化。&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;3. 反检测与 MultiDex 支持&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;调用栈深度清洗（Stack Traces Scrubbing）&lt;/strong&gt;：拦截 &lt;code&gt;Throwable.getStackTrace&lt;/code&gt; 和 &lt;code&gt;Thread.getStackTrace&lt;/code&gt;，自动过滤移除包含 &lt;code&gt;de.robv.android.xposed&lt;/code&gt;、&lt;code&gt;io.github.libxposed&lt;/code&gt;、&lt;code&gt;org.lsposed&lt;/code&gt; 等特征调用帧，阻止反作弊 SDK 在异常堆栈回溯中嗅探 Hook 框架。&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;类加载器探测隔离&lt;/strong&gt;：拦截 &lt;code&gt;Class.forName&lt;/code&gt; 和 &lt;code&gt;ClassLoader.loadClass&lt;/code&gt;，对 Xposed 特征类名的探测统一返回 &lt;code&gt;ClassNotFoundException&lt;/code&gt;。&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;MultiDex 动态感知&lt;/strong&gt;：拦截 &lt;code&gt;ClassLoader.loadClass&lt;/code&gt; 动态捕获并安装次级 Dex（如 &lt;code&gt;classes16.dex&lt;/code&gt;）中的定位组件，配合 &lt;code&gt;/proc/self/cmdline&lt;/code&gt; 锁定宿主进程主包名，避免内嵌 WebView 或插件改变全局上下文。&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Mock 属性彻底抹除&lt;/strong&gt;： 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;Location.isFromMockProvider()&lt;/code&gt; 和 &lt;code&gt;Location.isMock()&lt;/code&gt; 永久覆写为 &lt;code&gt;false&lt;/code&gt;；&lt;/li&gt; 
   &lt;li&gt;反射将 &lt;code&gt;Location&lt;/code&gt; 内部字段 &lt;code&gt;mMock&lt;/code&gt; 和 &lt;code&gt;mIsFromMockProvider&lt;/code&gt; 重写为 &lt;code&gt;false&lt;/code&gt;，并移除 Extra Bundle 中的 &lt;code&gt;mockLocation&lt;/code&gt; 标记；&lt;/li&gt; 
   &lt;li&gt;拦截 &lt;code&gt;AppOpsManager&lt;/code&gt; 的 &lt;code&gt;OP_MOCK_LOCATION (58)&lt;/code&gt; 权限查询，返回 &lt;code&gt;MODE_IGNORED (1)&lt;/code&gt;；&lt;/li&gt; 
   &lt;li&gt;拦截 &lt;code&gt;Settings.Secure&lt;/code&gt; 中 &lt;code&gt;mock_location&lt;/code&gt; 及 &lt;code&gt;allow_mock_location&lt;/code&gt; 的读取，返回 &lt;code&gt;0&lt;/code&gt;；&lt;/li&gt; 
   &lt;li&gt;隐藏 &lt;code&gt;LocationManager&lt;/code&gt; 中的虚拟 Test Provider，将其统一伪装为系统原生 &lt;code&gt;gps&lt;/code&gt; 提供者。&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;4. Wi-Fi、基站与蓝牙环境模拟&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;实地扫街扫描器（EnvironmentScanner）&lt;/strong&gt;：后台自动扫描物理世界中的 Wi-Fi 接入点（SSID/BSSID/RSSI/频率/信道/Wi-Fi标准）、基站小区信息（GSM, WCDMA, CDMA, LTE, 5G NR 及 dbm 信号强度）以及附近 BLE 蓝牙信标。&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;空间反距离加权（IDW）插值&lt;/strong&gt;：在 Room 数据库中检索周边 50 米范围内的历史采集点，使用反距离平方比作为权重：&lt;/p&gt; &lt;p&gt;$$w_i = \frac{1}{d_i^2}$$&lt;/p&gt; &lt;p&gt;对 Wi-Fi RSSI 信号强度与蜂窝小区 dbm 信号进行平滑插值，保证移动过程中信号连续渐变。&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;无线电数据精细化管理与手动指定&lt;/strong&gt;：&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;支持在“管理采集数据”页面中手动指定具体使用的 Wi-Fi、基站或蓝牙条目；&lt;/li&gt; 
   &lt;li&gt;支持自定义修改 Wi-Fi SSID、BSSID、RSSI 信号强度、信道频段、加密类型以及基站小区数据；&lt;/li&gt; 
   &lt;li&gt;支持在主页地图点选锁定特定环境数据，超出设定范围自动恢复环境插值计算。&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Wi-Fi 与基站全接口模拟&lt;/strong&gt;：&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;拦截 &lt;code&gt;WifiManager.getScanResults()&lt;/code&gt;、&lt;code&gt;getConnectionInfo()&lt;/code&gt;、&lt;code&gt;getConfiguredNetworks()&lt;/code&gt;、&lt;code&gt;getDhcpInfo()&lt;/code&gt;；&lt;/li&gt; 
   &lt;li&gt;拦截 &lt;code&gt;TelephonyManager.getAllCellInfo()&lt;/code&gt;、&lt;code&gt;getCellLocation()&lt;/code&gt;、&lt;code&gt;getNetworkOperator()&lt;/code&gt;、&lt;code&gt;getServiceState()&lt;/code&gt;、&lt;code&gt;getSignalStrength()&lt;/code&gt;、&lt;code&gt;PhoneStateListener&lt;/code&gt;、&lt;code&gt;TelephonyCallback&lt;/code&gt;；&lt;/li&gt; 
   &lt;li&gt;采用真实品牌合法 OUI（TP-Link、Huawei、Xiaomi、Cisco 等）生成非采集区的虚拟 MAC 地址。&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;云端数据导入 (WiGLE &amp;amp; OpenCellID)&lt;/strong&gt;：支持配置 WiGLE API 与 OpenCellID API，在线拉取全球指定坐标周边的真实物理 Wi-Fi 与移动基站，自动入库缓存并离线复用。&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;海量数据空间索引&lt;/strong&gt;：采用空间索引与分页机制，支持高效检索与存储数千条本地与云端无线电记录，保障界面与后台运行流畅。&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;5. 卫星矩阵与 NMEA 模拟&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;GnssStatus 矩阵注入&lt;/strong&gt;：Hook 系统的 &lt;code&gt;GnssStatus&lt;/code&gt; 类，模拟 20+ 颗包括 GPS、北斗、GLONASS 的卫星分布矩阵，注入 PRN 标识、信噪比（CNR）、俯仰角、方位角等，并正确汇报 &lt;code&gt;usedInFix&lt;/code&gt; 状态。&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;NMEA 语句流动态拼装&lt;/strong&gt;：劫持 &lt;code&gt;OnNmeaMessageListener&lt;/code&gt; / &lt;code&gt;GpsStatus.NmeaListener&lt;/code&gt;，根据当前模拟坐标、航向角、速度和卫星信息，动态拼装符合规范的原始 &lt;code&gt;$GPGGA&lt;/code&gt;, &lt;code&gt;$GPRMC&lt;/code&gt;, &lt;code&gt;$GPGSA&lt;/code&gt;, &lt;code&gt;$GPGSV&lt;/code&gt; 语句并计算校验和（Checksum）输出。&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;卫星元数据保活注入&lt;/strong&gt;：在向各大地图 SDK 派发 &lt;code&gt;Location&lt;/code&gt; 对象时，强制在 &lt;code&gt;getExtras()&lt;/code&gt; 中注入 &lt;code&gt;satellites=20&lt;/code&gt;, &lt;code&gt;satellites_in_view=20&lt;/code&gt;, &lt;code&gt;satellites_used_in_fix=18&lt;/code&gt;，防止定位 SDK 判定无卫星搜星而丢弃 GPS 信号。&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;6. 传感器与步频模拟&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;计步传感器联动&lt;/strong&gt;：Hook &lt;code&gt;SensorManager&lt;/code&gt;，接管 &lt;code&gt;Sensor.TYPE_STEP_COUNTER&lt;/code&gt;（总步数）和 &lt;code&gt;Sensor.TYPE_STEP_DETECTOR&lt;/code&gt;（单步脉冲）。&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;步态频率计算&lt;/strong&gt;：当开启路线模拟且处于步行或跑步状态时，根据移动距离与步长（默认按 &lt;code&gt;0.7m/步&lt;/code&gt; 换算）自动生成平滑递增的步数事件，适配运动健康与校园跑打卡软件。&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;7. 路线规划与红绿灯模拟&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;真实路网拟合&lt;/strong&gt;：支持多点路径规划，调用路网搜索算法拟合实际道路轮廓，防止直线穿墙。&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;红绿灯智能识别与驻留&lt;/strong&gt;：路线规划自动解析红绿灯路口，行进到红绿灯点时自动停驻 15 秒再重新平滑加速起步。&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;悬浮窗遥控摇杆&lt;/strong&gt;：提供悬浮窗虚拟摇杆，支持 0 ~ 10 m/s 速度无级调节与航向角阻尼转向。&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;8. 用户界面&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;基于 Jetpack Compose 构建，采用现代毛玻璃质感、内阴影与阻尼手势拖拽设计，实现完全模块化与解耦的组件架构。&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;系统架构&lt;/h2&gt; 
&lt;p&gt;本项目采用 &lt;strong&gt;MVVM + Clean Architecture&lt;/strong&gt;，并按职责拆分为 6 个 Gradle 模块：&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;模块&lt;/th&gt; 
   &lt;th&gt;类型&lt;/th&gt; 
   &lt;th&gt;职责&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;app&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Android App&lt;/td&gt; 
   &lt;td&gt;宿主壳工程：&lt;code&gt;Application&lt;/code&gt; / &lt;code&gt;MainActivity&lt;/code&gt;、签名与打包配置、聚合各模块的 Koin DI；仅把 &lt;code&gt;xposed&lt;/code&gt; 模块的产物（&lt;code&gt;LocationHooker&lt;/code&gt; 类与 &lt;code&gt;META-INF/xposed/*&lt;/code&gt; 元数据）打进最终 APK 供 LSPosed 扫描加载，自身&lt;strong&gt;不直接调用&lt;/strong&gt;其代码&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;app-ui&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Android Library&lt;/td&gt; 
   &lt;td&gt;全部 Jetpack Compose UI：页面、弹窗、自研“液态玻璃”组件（&lt;code&gt;ui/liquid&lt;/code&gt;）与 ViewModel 层&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;service&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Android Library&lt;/td&gt; 
   &lt;td&gt;前台保活服务 &lt;code&gt;SpoofingService&lt;/code&gt;、悬浮摇杆 &lt;code&gt;FloatingJoystickService&lt;/code&gt;、开机自启广播等后台/服务层&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;xposed&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Android Library&lt;/td&gt; 
   &lt;td&gt;LSPosed / Xposed 注入模块本体：&lt;code&gt;LocationHooker&lt;/code&gt; 入口 + &lt;code&gt;hooks/&lt;/code&gt;、&lt;code&gt;hooks/network/&lt;/code&gt; 下的各类 Hook 实现&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;core-data&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Android Library&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;app&lt;/code&gt; / &lt;code&gt;app-ui&lt;/code&gt; / &lt;code&gt;service&lt;/code&gt; 三端共用的数据与业务层：Room 数据库、各类 Repository，以及 &lt;code&gt;ConfigManager&lt;/code&gt;、&lt;code&gt;RootManager&lt;/code&gt;、&lt;code&gt;EnvironmentScanner&lt;/code&gt; 等核心工具类&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;core-geo&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;纯 Kotlin/JVM&lt;/td&gt; 
   &lt;td&gt;全项目唯一不依赖 Android 的模块：坐标系换算、路线几何与运动真实度引擎，以及 Hook 端与 App 共用的系统识别规则（&lt;code&gt;vendor/&lt;/code&gt;）&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;两个变体统一通过 libxposed 的远程配置通道传递 JSON，Hook 从内存缓存读取：&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;┌─────────────────────────────────────────────────────────────────────────┐
│     LocationSpoofer 宿主进程（app / app-ui / service / core-data）      │
│  ┌─────────────────────────┐  ┌──────────────────────────────────────┐  │
│  │     Triple Map Engine   │  │          RouteStateMachine           │  │
│  │ (AMap / Baidu / Google) │  │     (IDLE / READY / RUN / PAUSE)     │  │
│  └────────────┬────────────┘  └──────────────────┬───────────────────┘  │
│               │                                  │                      │
│  ┌────────────▼──────────────────────────────────▼───────────────────┐  │
│  │                    ConfigManager（core-data）                     │  │
│  │     序列化配置与坐标系映射，通过框架发布完整配置快照     │  │
│  └──────────────────────────────────┬────────────────────────────────┘  │
│  ┌──────────────────────────────────▼────────────────────────────────┐  │
│  │                    SpoofingService（service）                     │  │
│  │           前台保活服务、悬浮摇杆控制器与路网 / 步态计算           │  │
│  └───────────────────────────────────────────────────────────────────┘  │
└─────────────────────────────────────┬───────────────────────────────────┘
                                      │ (ConfigManager 发布远程偏好 / 远程文件)
                                      ▼
               ┌─────────────────────────────────────────────┐
               │ 框架管理的远程偏好 / 配置文件 │
               └──────────────────────┬──────────────────────┘
                                      │ (框架通知 → 后台解码 → 原子更新内存缓存)
                                      ▼ LSPosed / libxposed (API 101+) 注入
┌─────────────────────────────────────────────────────────────────────────┐
│                              目标 App 进程                              │
│  ┌───────────────────────────────────────────────────────────────────┐  │
│  │                         LocationHooker                            │  │
│  │  • Location/GNSS：BaseLocationHooker、GnssStatusHooker 等         │  │
│  │  • 地图 SDK：AMapHooker / BaiduMapHooker / TencentMapHooker       │  │
│  │  • hooks/network/：Wifi* / Cellular* / Bluetooth*Hooker 等        │  │
│  │  • SensorStepHooker（计步）/ AntiDetectionHooker（反检测）        │  │
│  └───────────────────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;&lt;strong&gt;跨进程通信 (IPC) 设计&lt;/strong&gt;： &lt;code&gt;ConfigManager&lt;/code&gt; 使用 &lt;code&gt;XposedService.getRemotePreferences()&lt;/code&gt; 发布完整 JSON 快照；UTF-8 配置超过 128 KiB 时先写入框架管理的独立远程文件，再原子发布文件指针，避免大配置占满 Binder 事务。全局与非全局版共用这一通道，无需修改 SELinux 策略或向公共临时目录写配置。 Hook 在模块加载时获取初始快照并注册配置变化监听，由后台线程解码、归一化后替换内存缓存；Hook 调用只读缓存。后台每秒检查框架偏好的内存快照以重试启动时的失败，路线派发和服务发现仍由独立定时器执行。 App 私有偏好保存最新期望状态，发布失败自动重试，框架重连后重新发布；停止或暂停请求不会被较早的活动配置覆盖。新通道发布成功后会清理旧配置、探针及脚本。框架仍负责配置持久化，此方案并非完全不落盘。 需要框架实现远程配置能力。升级后安装对应变体、启用模块并重启设备，再开始模拟；全局版可在“系统适配 → Hook 运行状态”检查配置来源为 &lt;code&gt;libxposed:remote-preferences&lt;/code&gt; 或 &lt;code&gt;libxposed:remote-file&lt;/code&gt;，并核对各进程的发布时间。此次通道迁移尚需真机复验。&lt;/p&gt; 
&lt;/div&gt; 
&lt;h3&gt;系统适配（全局方案）&lt;/h3&gt; 
&lt;p&gt;全局方案直接 Hook 系统服务，不同厂商 / 系统版本的内部实现不一样，需要逐个适配：&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/HuangZhuoRui/LocationSpoofer/main/ADAPTATION_PROGRESS.md&quot;&gt;ADAPTATION_PROGRESS.md&lt;/a&gt;：各系统、机型在两个方案下的实机验证进度（App 内&quot;系统适配 → 完整适配进度&quot;显示的就是这份文件）；&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/HuangZhuoRui/LocationSpoofer/main/xposed/src/main/java/com/vincenthzr/locationspoofer/xposed/hooks/vendor/README.md&quot;&gt;vendor/README.md&lt;/a&gt;：适配框架说明与&lt;strong&gt;新增一个系统的完整检查清单&lt;/strong&gt;；&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/HuangZhuoRui/LocationSpoofer/main/xposed/ADAPTATION_GUIDE.md&quot;&gt;xposed/ADAPTATION_GUIDE.md&lt;/a&gt;：如何在真机上定位系统内部类与方法、如何根据 App 内&quot;Hook 运行状态&quot;页排查适配问题。&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;环境要求&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;系统版本&lt;/strong&gt;：Android 8.0 (API 26) 及以上&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Root 方案&lt;/strong&gt;：已获取 Root 权限（推荐 &lt;a href=&quot;https://kernelsu.org&quot;&gt;&lt;strong&gt;KernelSU&lt;/strong&gt;&lt;/a&gt; / &lt;strong&gt;APatch&lt;/strong&gt; / &lt;strong&gt;Magisk&lt;/strong&gt;）。&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Xposed 框架&lt;/strong&gt;：已安装并激活 &lt;strong&gt;LSPosed (API 101+)&lt;/strong&gt; 或兼容 libxposed API 101+ 的框架环境。&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;使用指南&lt;/h2&gt; 
&lt;h3&gt;1. 编译与安装&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 1. 克隆代码仓库
git clone https://github.com/your-username/LocationSpoofer.git

# 2. 编译 Debug APK 并直接安装到设备
./gradlew installDebug
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;2. 权限与激活&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;打开 &lt;strong&gt;KernelSU / APatch / Magisk&lt;/strong&gt; 管理器，授予 LocationSpoofer &lt;strong&gt;Root 权限&lt;/strong&gt;。&lt;/li&gt; 
 &lt;li&gt;打开 &lt;strong&gt;LSPosed&lt;/strong&gt; 管理器，在模块列表中找到 &lt;strong&gt;LocationSpoofer&lt;/strong&gt; 并启用。&lt;/li&gt; 
 &lt;li&gt;在模块的作用域（Scope）中，&lt;strong&gt;勾选需要进行定位伪装的目标应用&lt;/strong&gt;（如微信、企业微信、钉钉、超星学习通、百度地图、高德地图等）。&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;强行停止&lt;/strong&gt;勾选的目标 App（或重启手机）以使其加载 Hook 逻辑。&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;3. 常见场景&lt;/h3&gt; 
&lt;h4&gt;定点模拟与环境锁定&lt;/h4&gt; 
&lt;ol&gt; 
 &lt;li&gt;启动 LocationSpoofer，在主页地图上拖动准星或搜索栏搜索目标位置。&lt;/li&gt; 
 &lt;li&gt;在底部抽屉开启所需伪装开关：&lt;strong&gt;伪造 Wi-Fi&lt;/strong&gt;、&lt;strong&gt;模拟基站&lt;/strong&gt;、&lt;strong&gt;模拟蓝牙&lt;/strong&gt;、&lt;strong&gt;模拟传感器计步&lt;/strong&gt;、&lt;strong&gt;开启随机抖动&lt;/strong&gt;。&lt;/li&gt; 
 &lt;li&gt;点击“启动模拟”接管系统 GPS。&lt;/li&gt; 
 &lt;li&gt;如需锁定使用具体的本地采集点，可在“管理数据”中点击对应采集点进行锁定绑定。&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h4&gt;路线模拟&lt;/h4&gt; 
&lt;ol&gt; 
 &lt;li&gt;切换至“路线规划”标签页，在地图上依次标记多个路点。&lt;/li&gt; 
 &lt;li&gt;设定移动模式（循环 / 往返 / 单程）以及速度档位（步行、跑步、骑行、自驾或自定义速度）。&lt;/li&gt; 
 &lt;li&gt;开启 &lt;strong&gt;“使用真实路线规划”&lt;/strong&gt;（系统将自动拉取真实道路轮廓并标记红绿灯等待节点）。&lt;/li&gt; 
 &lt;li&gt;点击“开始模拟”。可随时开启“悬浮窗摇杆”在前台微调坐标与速度。&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h4&gt;实地采集与数据自定义&lt;/h4&gt; 
&lt;ol&gt; 
 &lt;li&gt;开启“设置” -&amp;gt; &lt;strong&gt;“环境图谱与扫街”&lt;/strong&gt; 模式，手机将在后台记录沿途的真实 Wi-Fi、基站与蓝牙信标。&lt;/li&gt; 
 &lt;li&gt;进入“管理采集数据”页面，可查看列表、编辑备注，或&lt;strong&gt;手动指定/修改&lt;/strong&gt;某条 Wi-Fi（如 SSID、BSSID、RSSI 等）或基站小区数据。&lt;/li&gt; 
 &lt;li&gt;支持将采集到的无线电指纹一键&lt;strong&gt;导出为 JSON 文件&lt;/strong&gt;，用于备份或共享导入。&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h4&gt;独立应用坐标系配置&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;若遇到特定 App 存在固定坐标偏移： 
  &lt;ul&gt; 
   &lt;li&gt;进入 LocationSpoofer “设置” -&amp;gt; &lt;strong&gt;“配置应用坐标系”&lt;/strong&gt;；&lt;/li&gt; 
   &lt;li&gt;添加目标应用包名；&lt;/li&gt; 
   &lt;li&gt;将坐标系指定为 &lt;code&gt;WGS-84&lt;/code&gt;、&lt;code&gt;GCJ-02&lt;/code&gt; 或 &lt;code&gt;BD-09&lt;/code&gt;，Hook 层将自动根据目标 App 进行转换。&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;技术栈&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;编程语言&lt;/strong&gt;：100% Kotlin&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;模块划分&lt;/strong&gt;：&lt;code&gt;app&lt;/code&gt; / &lt;code&gt;app-ui&lt;/code&gt; / &lt;code&gt;service&lt;/code&gt; / &lt;code&gt;xposed&lt;/code&gt; / &lt;code&gt;core-data&lt;/code&gt; / &lt;code&gt;core-geo&lt;/code&gt; 六个 Gradle 模块（详见&lt;a href=&quot;https://raw.githubusercontent.com/HuangZhuoRui/LocationSpoofer/main/#%E7%B3%BB%E7%BB%9F%E6%9E%B6%E6%9E%84&quot;&gt;系统架构&lt;/a&gt;）&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;UI 框架&lt;/strong&gt;：Jetpack Compose &amp;amp; Material Design 3，叠加第三方 &lt;a href=&quot;https://github.com/miuix-kmp/miuix&quot;&gt;Miuix&lt;/a&gt;（&lt;code&gt;top.yukonga.miuix.kmp&lt;/code&gt;）提供的毛玻璃模糊底层能力，并在此之上自研 &lt;code&gt;ui/liquid&lt;/code&gt; 组件包（改编自开源项目 AndroidLiquidGlass / ILoveWork，Apache-2.0）实现悬浮底栏、透镜折射与阻尼拖拽等 Liquid Glass 交互效果&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;依赖注入&lt;/strong&gt;：Koin，按模块拆分为 &lt;code&gt;coreDataModule&lt;/code&gt; / &lt;code&gt;serviceModule&lt;/code&gt; / &lt;code&gt;viewModelModule&lt;/code&gt; 三个子模块，由 &lt;code&gt;app&lt;/code&gt; 模块的 &lt;code&gt;appModules&lt;/code&gt; 统一聚合注册&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;持久化存储&lt;/strong&gt;：Room Database (SQLite) + 空间索引（&lt;code&gt;core-data&lt;/code&gt; 模块）&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;网络与序列化&lt;/strong&gt;：OkHttp 3 + Kotlinx Serialization&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;地图组件&lt;/strong&gt;：AMap 3DMap SDK / BaiduMap SDK / Google Maps &amp;amp; Places SDK&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Xposed 框架&lt;/strong&gt;：LSPosed API 101+ / libxposed (Service 模式)，Hook 实现位于 &lt;code&gt;xposed&lt;/code&gt; 模块的 &lt;code&gt;hooks/&lt;/code&gt; 与 &lt;code&gt;hooks/network/&lt;/code&gt; 子包&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;免责声明&lt;/h2&gt; 
&lt;p&gt;本程序&lt;strong&gt;仅供学习研究、技术交流以及个人合法合规测试（如开发者定位测试、设备兼容性调试）使用&lt;/strong&gt;。 使用者请勿将本工具用于任何违法违规或违反相关平台服务协议的活动（包括但不限于虚假打卡、网络考试作弊、商业欺诈等）。 使用本模块造成的任何账号封禁、数据丢失、法律纠纷或其他直接/间接损失，均由使用者自行承担，作者不对此承担任何责任。&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;开源协议&lt;/h2&gt; 
&lt;p&gt;本项目基于 &lt;a href=&quot;https://raw.githubusercontent.com/HuangZhuoRui/LocationSpoofer/main/LICENSE&quot;&gt;GNU General Public License v3.0&lt;/a&gt; 协议开源。&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Copyright (C) 2026 SuseOAA
&lt;/code&gt;&lt;/pre&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/7e8e2c3afa8525de094944c7556131cc76886b44935ede3e1d341d778c607ffa/HuangZhuoRui/LocationSpoofer" medium="image" />
      
    </item>
    
    <item>
      <title>KernelSU-Next/KernelSU-Next</title>
      <link>https://github.com/KernelSU-Next/KernelSU-Next</link>
      <description>&lt;p&gt;An advanced Kernel based root solution for Android&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://mshibanami.github.io/GitHubTrendingRSS/assets/icons/link.png&quot; width=&quot;20&quot; height=&quot;20&quot; alt=&quot;link&quot; style=&quot;margin: 0 8px 0 0; padding: 0; display: inline-block; vertical-align: middle;&quot; /&gt;&lt;a href=&quot;https://kernelsu-next.github.io/webpage/&quot;&gt;https://kernelsu-next.github.io/webpage/&lt;/a&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;strong&gt;English&lt;/strong&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/KernelSU-Next/KernelSU-Next/dev/README_CN.md&quot;&gt;简体中文&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/KernelSU-Next/KernelSU-Next/dev/README_TW.md&quot;&gt;繁體中文&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/KernelSU-Next/KernelSU-Next/dev/README_TR.md&quot;&gt;Türkçe&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/KernelSU-Next/KernelSU-Next/dev/README_PT-BR.md&quot;&gt;Português (Brasil)&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/KernelSU-Next/KernelSU-Next/dev/README_KO.md&quot;&gt;한국어&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/KernelSU-Next/KernelSU-Next/dev/README_FR.md&quot;&gt;Français&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/KernelSU-Next/KernelSU-Next/dev/README_ID.md&quot;&gt;Bahasa Indonesia&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/KernelSU-Next/KernelSU-Next/dev/README_RU.md&quot;&gt;Русский&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/KernelSU-Next/KernelSU-Next/dev/README_UA.md&quot;&gt;Українська&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/KernelSU-Next/KernelSU-Next/dev/README_TH.md&quot;&gt;ภาษาไทย&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/KernelSU-Next/KernelSU-Next/dev/README_VI.md&quot;&gt;Tiếng Việt&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/KernelSU-Next/KernelSU-Next/dev/README_IT.md&quot;&gt;Italiano&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/KernelSU-Next/KernelSU-Next/dev/README_PL.md&quot;&gt;Polski&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/KernelSU-Next/KernelSU-Next/dev/README_BG.md&quot;&gt;Български&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/KernelSU-Next/KernelSU-Next/dev/README_JA.md&quot;&gt;日本語&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/KernelSU-Next/KernelSU-Next/dev/README_ES.md&quot;&gt;Español&lt;/a&gt;&lt;/p&gt; 
&lt;hr /&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;img src=&quot;https://raw.githubusercontent.com/KernelSU-Next/KernelSU-Next/dev/assets/kernelsu_next.png&quot; width=&quot;96&quot; alt=&quot;KernelSU Next Logo&quot; /&gt; 
 &lt;h2&gt;KernelSU Next&lt;/h2&gt; 
 &lt;p&gt;&lt;strong&gt;A kernel-based root solution for Android devices.&lt;/strong&gt;&lt;/p&gt; 
 &lt;p&gt; &lt;a href=&quot;https://github.com/KernelSU-Next/KernelSU-Next/releases/latest&quot;&gt; &lt;img src=&quot;https://img.shields.io/github/v/release/KernelSU-Next/KernelSU-Next?label=Release&amp;amp;logo=github&quot; alt=&quot;Latest Release&quot; /&gt; &lt;/a&gt; &lt;a href=&quot;https://nightly.link/KernelSU-Next/KernelSU-Next/workflows/build-manager-ci/next/Manager&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/Nightly%20Release-gray?logo=hackthebox&amp;amp;logoColor=fff&quot; alt=&quot;Nightly Build&quot; /&gt; &lt;/a&gt; &lt;a href=&quot;https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/License-GPL%20v2-orange.svg?logo=gnu&quot; alt=&quot;License: GPL v2&quot; /&gt; &lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/KernelSU-Next/KernelSU-Next/dev/LICENSE&quot;&gt; &lt;img src=&quot;https://img.shields.io/github/license/KernelSU-Next/KernelSU-Next?logo=gnu&quot; alt=&quot;GitHub License&quot; /&gt; &lt;/a&gt; &lt;a title=&quot;Crowdin&quot; target=&quot;_blank&quot; href=&quot;https://crowdin.com/project/kernelsu-next&quot;&gt;&lt;img src=&quot;https://badges.crowdin.net/kernelsu-next/localized.svg?sanitize=true&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;/div&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🚀 Features&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Kernel-based &lt;code&gt;su&lt;/code&gt; and root access management.&lt;/li&gt; 
 &lt;li&gt;Module system based on &lt;a href=&quot;https://topjohnwu.github.io/Magisk/details.html#magic-mount&quot;&gt;Magic Mount&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/OverlayFS&quot;&gt;OverlayFS&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://kernelsu.org/guide/app-profile.html&quot;&gt;App Profile&lt;/a&gt;: Limit root privileges per app.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;✅ Compatibility&lt;/h2&gt; 
&lt;p&gt;KernelSU Next supports Android kernels from &lt;strong&gt;4.4 up to 6.12&lt;/strong&gt;.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Kernel version&lt;/th&gt; 
   &lt;th&gt;Support notes&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;5.10+ (GKI 2.0)&lt;/td&gt; 
   &lt;td&gt;Supports pre-built images and LKM/KMI&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;4.19 – 5.4 (GKI 1.0)&lt;/td&gt; 
   &lt;td&gt;Requires KernelSU driver built-in&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;lt; 4.14 (EOL)&lt;/td&gt; 
   &lt;td&gt;Requires KernelSU driver (3.18+ is experimental and may need backports)&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Supported architectures:&lt;/strong&gt; &lt;code&gt;arm64-v8a&lt;/code&gt;, &lt;code&gt;armeabi-v7a&lt;/code&gt; and &lt;code&gt;x86_64&lt;/code&gt;&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-caution&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-stop mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M4.47.22A.749.749 0 0 1 5 0h6c.199 0 .389.079.53.22l4.25 4.25c.141.14.22.331.22.53v6a.749.749 0 0 1-.22.53l-4.25 4.25A.749.749 0 0 1 11 16H5a.749.749 0 0 1-.53-.22L.22 11.53A.749.749 0 0 1 0 11V5c0-.199.079-.389.22-.53Zm.84 1.28L1.5 5.31v5.38l3.81 3.81h5.38l3.81-3.81V5.31L10.69 1.5ZM8 4a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 8 4Zm0 8a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Caution&lt;/p&gt;
 &lt;p&gt;Recent kernel versions have implemented a breaking change causing KernelSU Next to fail and potentially trigger a kernel panic on &lt;code&gt;x86_64&lt;/code&gt;! Check the website for more info!&lt;/p&gt; 
&lt;/div&gt; 
&lt;hr /&gt; 
&lt;h2&gt;📦 Installation&lt;/h2&gt; 
&lt;p&gt;Please refer to the &lt;a href=&quot;https://kernelsu-next.github.io/webpage/pages/installation.html&quot;&gt;Installation&lt;/a&gt; guide for setup instructions.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🏅 Contribution&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Go to our &lt;a href=&quot;https://crowdin.com/project/kernelsu-next&quot;&gt;Crowdin&lt;/a&gt; to submit a translation for the manager!&lt;/li&gt; 
 &lt;li&gt;To report security issues, please see &lt;a href=&quot;https://raw.githubusercontent.com/KernelSU-Next/KernelSU-Next/dev/SECURITY.md&quot;&gt;SECURITY.md&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;📜 License&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;code&gt;/kernel&lt;/code&gt; directory:&lt;/strong&gt; &lt;a href=&quot;https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html&quot;&gt;GPL-2.0-only&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;All other files:&lt;/strong&gt; &lt;a href=&quot;https://www.gnu.org/licenses/gpl-3.0.html&quot;&gt;GPL-3.0-or-later&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;💸 Donations&lt;/h2&gt; 
&lt;p&gt;If you&#39;d like to support the project:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;USDT (BEP20, ERC20)&lt;/strong&gt;: &lt;code&gt;0x0b269716dc00692676e4217e23c7f67abd5f0f3e&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;USDT (TRC20)&lt;/strong&gt;: &lt;code&gt;TXu6VX8dvJLQPx4WBobjbYT5tefHTDikWo&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;LTC&lt;/strong&gt;: &lt;code&gt;LMYRqRXPKAFpYncBhNS44W1iwFit14LH1u&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🙏 Credits&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://git.zx2c4.com/kernel-assisted-superuser/about/&quot;&gt;Kernel-Assisted Superuser&lt;/a&gt; – Concept inspiration&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/topjohnwu/Magisk&quot;&gt;Magisk&lt;/a&gt; – Core root implementation&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/brevent/genuine/&quot;&gt;Genuine&lt;/a&gt; – APK v2 signature validation&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/m0nad/Diamorphine&quot;&gt;Diamorphine&lt;/a&gt; – Rootkit techniques&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/tiann/KernelSU&quot;&gt;KernelSU&lt;/a&gt; – The original base that made KernelSU Next possible&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/5ec1cff/KernelSU/raw/main/userspace/ksud/src/magic_mount.rs&quot;&gt;Magic Mount Port&lt;/a&gt; – For Magic Mount support&lt;/li&gt; 
&lt;/ul&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/c0df5d3f39cc33e8bb0eb3cf660ad2ffcd08415b9081070cf44adf92be77c51c/KernelSU-Next/KernelSU-Next" medium="image" />
      
    </item>
    
    <item>
      <title>tiann/KernelSU</title>
      <link>https://github.com/tiann/KernelSU</link>
      <description>&lt;p&gt;A Kernel based root solution for Android&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://mshibanami.github.io/GitHubTrendingRSS/assets/icons/link.png&quot; width=&quot;20&quot; height=&quot;20&quot; alt=&quot;link&quot; style=&quot;margin: 0 8px 0 0; padding: 0; display: inline-block; vertical-align: middle;&quot; /&gt;&lt;a href=&quot;https://kernelsu.org&quot;&gt;https://kernelsu.org&lt;/a&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;strong&gt;English&lt;/strong&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/tiann/KernelSU/main/README_ES.md&quot;&gt;Español&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/tiann/KernelSU/main/README_CN.md&quot;&gt;简体中文&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/tiann/KernelSU/main/README_TW.md&quot;&gt;繁體中文&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/tiann/KernelSU/main/README_JP.md&quot;&gt;日本語&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/tiann/KernelSU/main/README_KR.md&quot;&gt;한국어&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/tiann/KernelSU/main/README_PL.md&quot;&gt;Polski&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/tiann/KernelSU/main/README_PT-BR.md&quot;&gt;Português (Brasil)&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/tiann/KernelSU/main/README_TR.md&quot;&gt;Türkçe&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/tiann/KernelSU/main/README_RU.md&quot;&gt;Русский&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/tiann/KernelSU/main/README_VI.md&quot;&gt;Tiếng Việt&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/tiann/KernelSU/main/README_ID.md&quot;&gt;Indonesia&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/tiann/KernelSU/main/README_IW.md&quot;&gt;עברית&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/tiann/KernelSU/main/README_IN.md&quot;&gt;हिंदी&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/tiann/KernelSU/main/README_IT.md&quot;&gt;Italiano&lt;/a&gt;&lt;/p&gt; 
&lt;h1&gt;KernelSU&lt;/h1&gt; 
&lt;img src=&quot;https://kernelsu.org/logo.png&quot; style=&quot;width: 96px;&quot; alt=&quot;logo&quot; /&gt; 
&lt;p&gt;A kernel-based root solution for Android devices.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/tiann/KernelSU/releases/latest&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/v/release/tiann/KernelSU?label=Release&amp;amp;logo=github&quot; alt=&quot;Latest release&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://hosted.weblate.org/engage/kernelsu&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Localization-Weblate-teal?logo=weblate&quot; alt=&quot;Weblate&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://t.me/KernelSU&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Follow-Telegram-blue.svg?logo=telegram&quot; alt=&quot;Channel&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/License-GPL%20v2-orange.svg?logo=gnu&quot; alt=&quot;License: GPL v2&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/tiann/KernelSU/main/LICENSE&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/license/tiann/KernelSU?logo=gnu&quot; alt=&quot;GitHub License&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Features&lt;/h2&gt; 
&lt;ol&gt; 
 &lt;li&gt;Kernel-based &lt;code&gt;su&lt;/code&gt; and root access management.&lt;/li&gt; 
 &lt;li&gt;Module system based on &lt;a href=&quot;https://kernelsu.org/guide/metamodule.html&quot;&gt;metamodules&lt;/a&gt;: Pluggable infrastructure for systemless modifications.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://kernelsu.org/guide/app-profile.html&quot;&gt;App Profile&lt;/a&gt;: Lock up the root power in a cage.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Compatibility state&lt;/h2&gt; 
&lt;p&gt;KernelSU officially supports Android GKI 2.0 devices (kernel 5.10+). Older kernels (4.14+) are also supported, but the kernel will need to be built manually.&lt;/p&gt; 
&lt;p&gt;With this, WSA, ChromeOS, and container-based Android are all supported.&lt;/p&gt; 
&lt;p&gt;Currently, the &lt;code&gt;arm64-v8a&lt;/code&gt; and &lt;code&gt;x86_64&lt;/code&gt; architectures are supported.&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-caution&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-stop mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M4.47.22A.749.749 0 0 1 5 0h6c.199 0 .389.079.53.22l4.25 4.25c.141.14.22.331.22.53v6a.749.749 0 0 1-.22.53l-4.25 4.25A.749.749 0 0 1 11 16H5a.749.749 0 0 1-.53-.22L.22 11.53A.749.749 0 0 1 0 11V5c0-.199.079-.389.22-.53Zm.84 1.28L1.5 5.31v5.38l3.81 3.81h5.38l3.81-3.81V5.31L10.69 1.5ZM8 4a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 8 4Zm0 8a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Caution&lt;/p&gt;
 &lt;p&gt;Recent kernel versions have implemented a breaking change causing KernelSU to fail and potentially trigger a kernel panic on &lt;code&gt;x86_64&lt;/code&gt;! Check the website for more info!&lt;/p&gt; 
&lt;/div&gt; 
&lt;h2&gt;Usage&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://kernelsu.org/guide/installation.html&quot;&gt;Installation&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://kernelsu.org/guide/how-to-build.html&quot;&gt;How to build&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://kernelsu.org/&quot;&gt;Official website&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Translation&lt;/h2&gt; 
&lt;p&gt;To help translate KernelSU, we no longer accept translation contributions via Weblate. All translations are now handled using LLMs.&lt;/p&gt; 
&lt;p&gt;If you would like to add support for a new language, feel free to open a PR. Please note that modifications to existing English and Chinese translations are not accepted.&lt;/p&gt; 
&lt;h2&gt;Discussion&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Telegram: &lt;a href=&quot;https://t.me/KernelSU&quot;&gt;@KernelSU&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Security&lt;/h2&gt; 
&lt;p&gt;For information on reporting security vulnerabilities in KernelSU, see &lt;a href=&quot;https://raw.githubusercontent.com/tiann/KernelSU/main/SECURITY.md&quot;&gt;SECURITY.md&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Files under the &lt;code&gt;kernel&lt;/code&gt; directory are &lt;a href=&quot;https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html&quot;&gt;GPL-2.0-only&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;All other parts except the &lt;code&gt;kernel&lt;/code&gt; directory are &lt;a href=&quot;https://www.gnu.org/licenses/gpl-3.0.html&quot;&gt;GPL-3.0-or-later&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Credits&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://git.zx2c4.com/kernel-assisted-superuser/about/&quot;&gt;Kernel-Assisted Superuser&lt;/a&gt;: The KernelSU idea.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/topjohnwu/Magisk&quot;&gt;Magisk&lt;/a&gt;: The powerful root tool.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/brevent/genuine/&quot;&gt;genuine&lt;/a&gt;: APK v2 signature validation.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/m0nad/Diamorphine&quot;&gt;Diamorphine&lt;/a&gt;: Some rootkit skills.&lt;/li&gt; 
&lt;/ul&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/3f79a0aa47b42deb776bac0f6bdb0842c5a2877d3de3242125f3b23385c67d3f/tiann/KernelSU" medium="image" />
      
    </item>
    
    <item>
      <title>sk2andy/candy-browser</title>
      <link>https://github.com/sk2andy/candy-browser</link>
      <description>&lt;p&gt;Gesture-first Android browser with Material 3 Expressive design and local privacy tools&lt;/p&gt;&lt;hr&gt;&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/sk2andy/candy-browser/main/app/src/main/res/drawable-nodpi/ic_launcher_foreground_art.png&quot; width=&quot;120&quot; alt=&quot;Candy Browser logo&quot; /&gt; &lt;/p&gt; 
&lt;h1 align=&quot;center&quot;&gt;Candy Browser&lt;/h1&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;strong&gt;Firefox extensions on Android, powered by GeckoView.&lt;/strong&gt;&lt;br /&gt; A gesture-first browser with selectable GeckoView and Android System WebView engines, an iOS WKWebView/Liquid Glass target, and local privacy tools. &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://github.com/sk2andy/candy-browser/releases&quot;&gt;&lt;img alt=&quot;Release&quot; src=&quot;https://img.shields.io/github/v/release/sk2andy/candy-browser?display_name=tag&amp;amp;sort=semver&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;Android 13+&quot; src=&quot;https://img.shields.io/badge/Android-13%2B-3DDC84?logo=android&amp;amp;logoColor=white&quot; /&gt; &lt;img alt=&quot;Kotlin&quot; src=&quot;https://img.shields.io/badge/Kotlin-2.4.10-7F52FF?logo=kotlin&amp;amp;logoColor=white&quot; /&gt; &lt;img alt=&quot;Jetpack Compose&quot; src=&quot;https://img.shields.io/badge/UI-Jetpack%20Compose-4285F4?logo=jetpackcompose&amp;amp;logoColor=white&quot; /&gt; &lt;a href=&quot;https://raw.githubusercontent.com/sk2andy/candy-browser/main/LICENSE&quot;&gt;&lt;img alt=&quot;License: MPL 2.0&quot; src=&quot;https://img.shields.io/badge/License-MPL%202.0-orange.svg?sanitize=true&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://sk2andy.github.io/candy-browser/&quot;&gt;&lt;strong&gt;GitHub Pages website&lt;/strong&gt;&lt;/a&gt; · &lt;a href=&quot;https://sk2andy.github.io/candy-browser/privacy/&quot;&gt;Privacy&lt;/a&gt; · &lt;a href=&quot;https://github.com/sk2andy/candy-browser/releases&quot;&gt;Releases&lt;/a&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://buymeacoffee.com/sk2andy&quot;&gt;&lt;img src=&quot;https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png&quot; height=&quot;50&quot; alt=&quot;Buy me a coffee&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;&lt;strong&gt;Next release: stability fixes.&lt;/strong&gt; I&#39;m focusing on finding and fixing as many bugs as possible and testing the changes over an extended period to make Candy Browser more reliable.&lt;/p&gt; 
&lt;/div&gt; 
&lt;h2&gt;🎉 Firefox extensions on Android&lt;/h2&gt; 
&lt;p&gt;Candy uses GeckoView by default and supports Mozilla-signed Firefox extensions directly inside the Android app. A fresh Gecko profile comes with &lt;strong&gt;uBlock Origin&lt;/strong&gt; and &lt;strong&gt;I still don&#39;t care about cookies&lt;/strong&gt;, while additional compatible extensions can be installed and managed from Candy&#39;s browser settings.&lt;/p&gt; 
&lt;p&gt;Extension actions, popups, options, permissions, updates, and enable/disable controls stay inside Candy&#39;s browser chrome. See &lt;a href=&quot;https://raw.githubusercontent.com/sk2andy/candy-browser/main/docs/browsing/platform-engines.md#android-gecko-and-extension-invariants&quot;&gt;Platform engines&lt;/a&gt; for the supported GeckoView integration and current compatibility boundaries.&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/sk2andy/candy-browser/main/docs/screenshots/candy-home.png&quot; width=&quot;30%&quot; alt=&quot;Candy Browser start page&quot; /&gt; &amp;nbsp; &lt;img src=&quot;https://raw.githubusercontent.com/sk2andy/candy-browser/main/docs/screenshots/candy-tabs.png&quot; width=&quot;30%&quot; alt=&quot;Candy Browser cover-flow tab overview&quot; /&gt; &amp;nbsp; &lt;img src=&quot;https://raw.githubusercontent.com/sk2andy/candy-browser/main/docs/screenshots/candy-privacy.png&quot; width=&quot;30%&quot; alt=&quot;Candy Browser Privacy X-Ray&quot; /&gt; &lt;/p&gt; 
&lt;h2&gt;Cross-device sync&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;Candy Sync turns every connected Android, Chromium, or Firefox device into a writable profile.&lt;/strong&gt; Open a desktop profile on your phone to inspect its live tab list, open new tabs, navigate, pin, reorder, or close them. The same small tab changes flow back to every connected client instead of re-uploading the complete browser state.&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/sk2andy/candy-browser/main/docs/screenshots/candy-sync-device-profile.png&quot; width=&quot;32%&quot; alt=&quot;A synced desktop device selected as a writable profile in Candy Browser&quot; /&gt; &amp;nbsp;&amp;nbsp; &lt;img src=&quot;https://raw.githubusercontent.com/sk2andy/candy-browser/main/docs/screenshots/candy-sync-setup.png&quot; width=&quot;50%&quot; alt=&quot;Candy Sync device binding, profile icon, accent color, and E2EE warning on Android&quot; /&gt; &lt;/p&gt; 
&lt;p&gt;Changes are encrypted locally and written to a durable outbox. REST commits provide ordered, retry-safe storage; authenticated WebSocket notifications deliver committed changes immediately. After suspension or network loss, clients recover missing changes through REST.&lt;/p&gt; 
&lt;h3&gt;E2EE in short&lt;/h3&gt; 
&lt;p&gt;The first client creates a random 256-bit workspace key. The immutable passphrase derives a local recovery key with Argon2id; HKDF-SHA-256 derives purpose- and device-specific keys, and AES-256-GCM encrypts and authenticates tab data. Every device also creates its own P-256 private key locally. The passphrase, workspace key, private keys, URLs, titles, device names, and icons never reach the server in plaintext—the server stores ciphertext plus the routing metadata required for sync.&lt;/p&gt; 
&lt;h3&gt;Start Candy Sync&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;cd sync/server
cp .env.example .env
# Set a unique username, password, public URL, and TLS host in .env.
# Never put the E2EE passphrase in server configuration.
docker compose pull candy-sync
docker compose up -d
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The public &lt;code&gt;sk2andy/candy-sync:latest&lt;/code&gt; image supports Linux AMD64 and ARM64. Contributors can still build the server locally with &lt;code&gt;docker compose up --build -d&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;Build and load the WebExtension from &lt;code&gt;sync/extension/&lt;/code&gt;, open its browser-managed Options Page, and enter the endpoint plus an E2EE passphrase. In Candy Browser, open &lt;strong&gt;Settings → Synchronization&lt;/strong&gt; and join with the same endpoint, credentials, and passphrase.&lt;/p&gt; 
&lt;p&gt;See the &lt;a href=&quot;https://raw.githubusercontent.com/sk2andy/candy-browser/main/docs/sync/README.md&quot;&gt;Candy Sync guide&lt;/a&gt; for server deployment, local TLS, Chromium/Firefox loading, Android setup, backups, protocol details, and the full security model.&lt;/p&gt; 
&lt;h3&gt;Candy Sync roadmap&lt;/h3&gt; 
&lt;ul class=&quot;task-list&quot;&gt; 
 &lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;cbx_0&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_0&quot;&gt; Add multi-user support&lt;/label&gt;&lt;/li&gt; 
 &lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;cbx_1&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_1&quot;&gt; Publish the extension to the Chrome Web Store and Mozilla Add-ons&lt;/label&gt;&lt;/li&gt; 
 &lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;cbx_2&quot; checked=&quot;true&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_2&quot;&gt; Publish a prebuilt server image to Docker Hub&lt;/label&gt;&lt;/li&gt; 
 &lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;cbx_3&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_3&quot;&gt; Offer a hosted solution for people who do not want to self-host&lt;/label&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;See Candy in motion&lt;/h2&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://raw.githubusercontent.com/sk2andy/candy-browser/main/docs/promo/video/candy-browser-showcase-16x9.mp4&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/sk2andy/candy-browser/main/docs/promo/video/candy-browser-showcase-16x9-poster.jpg&quot; width=&quot;90%&quot; alt=&quot;Candy Browser showcase with two Android web engines and Firefox extensions&quot; /&gt; &lt;/a&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://raw.githubusercontent.com/sk2andy/candy-browser/main/docs/promo/video/candy-browser-showcase-16x9.mp4&quot;&gt;&lt;strong&gt;Watch or download the 16:9 feature showcase (MP4, 60 fps)&lt;/strong&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;p&gt;After its gesture-first opener, the showcase moves straight to the Android engine choice and Firefox extensions. It then combines self-hosted Android/Chromium/Firefox tab sync with E2EE, live API 36 emulator footage, current Topping scripts, and repository screenshots to show Link Peek, Spoilerfree Sports, Hacker News Comfort, Privacy X-Ray, Reader Studio, Candy Trails, and profiles. Its original soundtrack, kinetic typography, and camera motion are generated entirely from repository-owned sources.&lt;/p&gt; 
&lt;h2&gt;Why Candy?&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Made for gestures.&lt;/strong&gt; Switch tabs from the address bar on phones, use a scrollable tab strip on wider screens, swipe into the visual overview, and dismiss cards with spring motion and haptic feedback.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Private by design.&lt;/strong&gt; Filtering, history, favorites, profiles, and privacy telemetry stay local.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Cross-device without surrendering your data.&lt;/strong&gt; Self-hosted E2EE sync exposes desktop and Android tab lists as writable device profiles while the server never sees their contents in plaintext.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Pick the engine that fits.&lt;/strong&gt; Use GeckoView for Mozilla-signed Firefox extensions such as uBlock Origin, or Android System WebView for Android&#39;s system-managed runtime while keeping Toppings and Candy protection.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Feels at home on Android.&lt;/strong&gt; Dynamic color, edge-to-edge content, Predictive Back, Autofill, passkeys, downloads, sharing, printing, and default-browser integration.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Architecture&lt;/h2&gt; 
&lt;p&gt;Candy keeps browser behavior and production UI in shared Kotlin. The address bar, gestures, menus, tab switcher, Hero/Grid/List previews, settings structure, and their motion rules are not rebuilt for each platform. Small platform adapters connect that shared product layer to the native browser engine, image types, resources, haptics, and visual effects.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;flowchart TD
    K[Shared Kotlin behavior and state] --&amp;gt; C[Shared Compose UI and motion]
    C --&amp;gt; A[Android platform adapter]
    C --&amp;gt; I[iOS platform adapter]
    A --&amp;gt; E{Selected Android engine}
    E --&amp;gt; G[GeckoView sessions]
    E --&amp;gt; S[System WebView sessions]
    G --&amp;gt; F[Signed Firefox WebExtensions]
    K --&amp;gt; T[Shared Topping model and grants]
    T --&amp;gt; GT[Gecko userScripts host]
    T --&amp;gt; ST[System WebView userScripts host]
    T --&amp;gt; WT[WKUserScript host]
    I --&amp;gt; W[WKWebView sessions]
    W --&amp;gt; WT
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Android defaults to GeckoView and can switch the whole app to Android System WebView from Browser settings. Candy checkpoints tab URLs and restarts into a fresh process, keeping tabs, bookmarks, history, profiles, and settings shared while cookies, logins, native back-forward lists, and other engine-owned session state stay separate. Firefox extensions remain available only in GeckoView; System WebView keeps Toppings and Candy protection. iOS uses WKWebView behind the same shared Kotlin contracts and Compose browser chrome, with native Liquid Glass supplied through an iOS effect adapter.&lt;/p&gt; 
&lt;p&gt;Implementation boundaries, invariants, and the current parity status are documented in &lt;a href=&quot;https://raw.githubusercontent.com/sk2andy/candy-browser/main/docs/browsing/platform-engines.md&quot;&gt;Platform engines&lt;/a&gt; and &lt;a href=&quot;https://raw.githubusercontent.com/sk2andy/candy-browser/main/docs/browsing/platform-feature-parity.md&quot;&gt;Platform feature parity&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Tablet and Foldable support&lt;/h2&gt; 
&lt;p&gt;At 600 dp and wider, the floating address bar shows a horizontally scrollable tab strip. Tap another tab to open it, or tap the current tab to edit its address. Configurable actions and the More menu stay in place. Horizontal swipes scroll the strip; the upward overview gesture remains. The visual tab overview also adapts its previews and grid to larger screens.&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/sk2andy/candy-browser/main/docs/screenshots/candy-tablet-tabs.png&quot; width=&quot;90%&quot; alt=&quot;Candy Browser floating tab strip with website favicons on a landscape Android tablet&quot; /&gt;&lt;br /&gt; &lt;em&gt;Tablet browsing with floating, scrollable tabs and website favicons.&lt;/em&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/sk2andy/candy-browser/main/docs/screenshots/candy-foldable-tabs.png&quot; width=&quot;90%&quot; alt=&quot;Candy Browser floating tab strip on an unfolded Android foldable in landscape&quot; /&gt;&lt;br /&gt; &lt;em&gt;Unfolded foldable layout with the same tab strip and fixed browser actions.&lt;/em&gt; &lt;/p&gt; 
&lt;h2&gt;Features&lt;/h2&gt; 
&lt;h3&gt;Browsing and gestures&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Floating chrome over edge-to-edge browser-engine content, with configurable actions around the address field or wide-screen tab strip and a docked edge mode&lt;/li&gt; 
 &lt;li&gt;Pull to refresh, direct URL navigation, QR scanning, local domain completion, and optional provider-backed search suggestions (disabled in private tabs)&lt;/li&gt; 
 &lt;li&gt;Google, DuckDuckGo, Bing, Brave, Ecosia, Startpage, Qwant, Kagi, Perplexity, ChatGPT, and configurable SearXNG search&lt;/li&gt; 
 &lt;li&gt;Optional Google AI Mode routing through a toggleable address-bar logo, enabled from search settings&lt;/li&gt; 
 &lt;li&gt;Address commands with &lt;code&gt;&amp;gt;&lt;/code&gt; for tab, profile, cache, cookie, and navigation actions&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Candy Recall:&lt;/strong&gt; optional, profile-scoped local full-text search across visited pages from the normal address input, History, or &lt;code&gt;&amp;gt;recall&lt;/code&gt;, with no private-tab or cloud indexing&lt;/li&gt; 
 &lt;li&gt;Background tabs, sharing, printing, external apps, assistant summaries, and built-in or external download managers&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Link Peek:&lt;/strong&gt; long-press a link to inspect it in a live, disposable preview without creating a tab or history entry, then send it to a background tab through the pulsing plus target&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;External Link Preview:&lt;/strong&gt; optionally open links from other apps in a temporary Candy preview instead of creating a tab immediately. A compact bottom pill keeps the current host visible, combines the outlined &lt;strong&gt;Open in Candy&lt;/strong&gt; action with its profile picker, and offers share, copy, find-in-page, and desktop-site actions before the page is promoted to a real tab. Temporary app switches keep the preview; explicitly opening Candy from its app icon, widget, or launcher shortcut discards it.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/sk2andy/candy-browser/main/docs/screenshots/candy-link-peek.png&quot; width=&quot;32%&quot; alt=&quot;Candy Browser Link Peek live preview&quot; /&gt; &amp;nbsp; &lt;img src=&quot;https://raw.githubusercontent.com/sk2andy/candy-browser/main/docs/screenshots/candy-commands.png&quot; width=&quot;32%&quot; alt=&quot;Candy Browser profile commands in the address bar&quot; /&gt; &lt;/p&gt; 
&lt;h3&gt;Appearance and browser chrome&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;System, light, dark, and AMOLED appearances with Material You, Candy, or neutral color palettes&lt;/li&gt; 
 &lt;li&gt;Clear or frosted browser surfaces plus angular, rounded, or extra-rounded shapes&lt;/li&gt; 
 &lt;li&gt;Independent transparency controls for general browser chrome and the address bar, with adjustable live background blur where the selected Android engine and version support it&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/sk2andy/candy-browser/main/docs/screenshots/candy-frosted-address-bar.png&quot; width=&quot;42%&quot; alt=&quot;Candy Browser frosted transparent address bar over a loaded page&quot; /&gt; &lt;/p&gt; 
&lt;h3&gt;Tabs, profiles, and journeys&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Persistent tabs with saved page previews, favicons, pinning, reordering, and automatic cleanup&lt;/li&gt; 
 &lt;li&gt;Coverflow, compact grid, and preview-free list layouts&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Candy Stacks:&lt;/strong&gt; group compatible tabs by name and color, choose the stack preview, collapse from the card marker in Coverflow or Grid, and choose Coverflow, Grid, or List for the folder-style member view&lt;/li&gt; 
 &lt;li&gt;Tab snoozing with scheduled returns, notifications, and a dedicated snoozed-tab manager&lt;/li&gt; 
 &lt;li&gt;Per-profile browser-engine storage isolation with private sessions kept in memory&lt;/li&gt; 
 &lt;li&gt;Optional profile controls for a simpler single-profile setup&lt;/li&gt; 
 &lt;li&gt;Private tabs that keep their session and journey data in memory only&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Candy Trails:&lt;/strong&gt; persistent branching navigation graphs with pan, zoom, direct navigation, and forkable paths&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Site Capsules:&lt;/strong&gt; profile-bound home-screen shortcuts with configurable navigation boundaries and minimal browser chrome&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/sk2andy/candy-browser/main/docs/screenshots/candy-profile-creation.png&quot; width=&quot;32%&quot; alt=&quot;Creating an isolated Candy Browser profile&quot; /&gt; &amp;nbsp; &lt;img src=&quot;https://raw.githubusercontent.com/sk2andy/candy-browser/main/docs/screenshots/candy-trail.png&quot; width=&quot;32%&quot; alt=&quot;Candy Trail with a branching navigation journey&quot; /&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/sk2andy/candy-browser/main/docs/screenshots/candy-tabs.png&quot; width=&quot;30%&quot; alt=&quot;Cover-flow tab overview&quot; /&gt; &amp;nbsp; &lt;img src=&quot;https://raw.githubusercontent.com/sk2andy/candy-browser/main/docs/screenshots/candy-tabs-grid.png&quot; width=&quot;30%&quot; alt=&quot;Compact grid tab overview&quot; /&gt; &amp;nbsp; &lt;img src=&quot;https://raw.githubusercontent.com/sk2andy/candy-browser/main/docs/screenshots/candy-tabs-list.png&quot; width=&quot;30%&quot; alt=&quot;Preview-free list tab overview&quot; /&gt; &lt;/p&gt; 
&lt;h3&gt;Reading and page tools&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Reader Studio:&lt;/strong&gt; local article extraction with typography, alignment, paper and night themes, offline saves, and text-to-speech&lt;/li&gt; 
 &lt;li&gt;Find in page with live match counts and previous/next navigation that stays visible above the keyboard&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Toppings:&lt;/strong&gt; Candy&#39;s lightweight, transparent alternative to traditional browser extensions. Discover, install, update, toggle, import, and edit bounded userscripts that customize matching regular tabs without privileged browser or &lt;code&gt;GM_*&lt;/code&gt; APIs. The reviewed catalog lives in &lt;a href=&quot;https://github.com/sk2andy/candy-browser-toppings&quot;&gt;&lt;code&gt;candy-browser-toppings&lt;/code&gt;&lt;/a&gt;, so new Toppings do not require a Candy Browser release&lt;/li&gt; 
 &lt;li&gt;Per-domain mute controls for silencing noisy sites&lt;/li&gt; 
 &lt;li&gt;Optional full immersive mode and a setting that prevents video autoplay&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/sk2andy/candy-browser/main/docs/screenshots/candy-reader.png&quot; width=&quot;32%&quot; alt=&quot;Candy Browser Reader Studio&quot; /&gt; &lt;/p&gt; 
&lt;h3&gt;Firefox extension support&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;A clean Android Gecko profile gets uBlock Origin and &lt;strong&gt;I still don&#39;t care about cookies&lt;/strong&gt; by default from pinned, unmodified Mozilla-signed XPIs bundled for offline installation. Their corresponding GPL-3.0-only sources are pinned to immutable upstream Git commits.&lt;/li&gt; 
 &lt;li&gt;Existing installs are matched by Firefox extension ID and left unchanged. Disabling a default is respected; uninstalling it records a durable removal marker, so Candy does not restore it later. Default extensions are never enabled for private tabs without the user&#39;s explicit opt-in.&lt;/li&gt; 
 &lt;li&gt;Android can install Mozilla-signed Firefox extensions directly from an HTTPS XPI URL. Candy uses GeckoView for signature validation, permission approval, installation, updates, enable/disable, uninstall, and explicit private-browsing access.&lt;/li&gt; 
 &lt;li&gt;Failed installs retain GeckoView&#39;s reason: Candy distinguishes download, package integrity, storage, signature, identity, compatibility, platform support, Mozilla blocklist, enterprise-only, cancellation, and restart-required failures instead of showing one generic error.&lt;/li&gt; 
 &lt;li&gt;Supported extension UI stays inside Candy&#39;s shared browser chrome: browser/page actions, popups, and options pages do not introduce a second address bar, menu system, or tab switcher.&lt;/li&gt; 
 &lt;li&gt;Candy supports the public WebExtension APIs exposed by the pinned GeckoView 155 runtime. This is not a guarantee that every Firefox Desktop extension is compatible. Desktop-only APIs and fields GeckoView rejects before Candy can handle them cannot be emulated reliably. For example, &lt;code&gt;tabs.update({ muted: ... })&lt;/code&gt; and &lt;code&gt;tabs.update({ pinned: ... })&lt;/code&gt; are rejected by GeckoView 155&#39;s extension schema.&lt;/li&gt; 
 &lt;li&gt;See the tested &lt;a href=&quot;https://raw.githubusercontent.com/sk2andy/candy-browser/main/docs/browsing/platform-engines.md#firefox-webextension-capability-matrix-geckoview-155&quot;&gt;Firefox WebExtension capability matrix&lt;/a&gt; for supported APIs and exact platform boundaries.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Pinned source URLs, versions, hashes, licenses, and delivery modes live in &lt;code&gt;app/src/gecko/assets/gecko_default_extensions/catalog.json&lt;/code&gt;. Maintainers verify local assets with &lt;code&gt;python3 scripts/generate_gecko_default_extensions.py verify&lt;/code&gt;, audit both upstream files with &lt;code&gt;python3 scripts/generate_gecko_default_extensions.py audit-remote&lt;/code&gt;, and refresh the bundled XPI only with &lt;code&gt;python3 scripts/generate_gecko_default_extensions.py refresh&lt;/code&gt;.&lt;/p&gt; 
&lt;h3&gt;Media, fullscreen, and picture-in-picture&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Native fullscreen support for HTML5 and YouTube video, including rotation-aware Android system UI&lt;/li&gt; 
 &lt;li&gt;Automatic Android picture-in-picture when leaving Candy with an active regular-tab video&lt;/li&gt; 
 &lt;li&gt;Website picture-in-picture buttons for eligible top-level and fullscreen-capable embedded HTML5 video&lt;/li&gt; 
 &lt;li&gt;Google Cast playback for compatible direct HTML5 MP4, WebM, HLS and DASH video in regular tabs&lt;/li&gt; 
 &lt;li&gt;Seamless PiP entry and return without pausing or recreating the decoder surface, even when a site replaces or restyles its video element&lt;/li&gt; 
 &lt;li&gt;Draggable in-app mini-player when switching tabs, plus background audio playback where supported&lt;/li&gt; 
 &lt;li&gt;Android media notification and system controls for play, pause, stop, and seek&lt;/li&gt; 
 &lt;li&gt;Private-tab media remains transient and never enters PiP, the mini-player, or system media controls&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Local protection&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;EasyList/EasyPrivacy hosts and cosmetics, a pinned safely representable uAssets subset, and a pinned HaGeZi Pro host delta&lt;/li&gt; 
 &lt;li&gt;Third-party-cookie blocking and cosmetic cookie-banner hiding&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Privacy X-Ray:&lt;/strong&gt; live per-tab block counts, categories, domains, and exceptions&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Permission Radar:&lt;/strong&gt; per-site camera, microphone, location, and other WebView permission activity&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Filter Studio:&lt;/strong&gt; global or profile rules, import/export, and confirmed HTTPS subscriptions&lt;/li&gt; 
 &lt;li&gt;Safe Browsing, TLS failure handling, blocked unsafe schemes, and external-scheme allowlisting&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Download&lt;/h2&gt; 
&lt;p&gt;Candy Browser requires Android 13 (API 33) or newer.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/sk2andy/candy-browser/releases&quot;&gt;Download Candy Browser&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Standard and User CA production builds check GitHub for updates at startup and offer a signed APK for download. Standard installs on ARM64 devices prefer the smaller ARM64 APK and fall back to the universal APK when needed. Both use the same application ID, version, and signing key, so either can update an existing standard install. The FOSS build disables this updater. Android still requires you to open a downloaded file and approve installation.&lt;/p&gt; 
&lt;h3&gt;Obtainium&lt;/h3&gt; 
&lt;p&gt;Use the filtered setup link so Obtainium always selects the standard certificate-trust channel:&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://apps.obtainium.imranr.dev/redirect?r=obtainium%3A%2F%2Fapp%2F%7B%22id%22%3A%22dev.sk2andy.materialbrowser%22%2C%22url%22%3A%22https%3A%2F%2Fgithub.com%2Fsk2andy%2Fcandy-browser%22%2C%22author%22%3A%22sk2andy%22%2C%22name%22%3A%22Candy%20Browser%22%2C%22preferredApkIndex%22%3A0%2C%22additionalSettings%22%3A%22%7B%5C%22apkFilterRegEx%5C%22%3A%5C%22%5ECandyBrowser-v%5B0-9%5D%2B(%3F%3A%5C%5C%5C%5C.%5B0-9%5D%2B)%7B1%2C2%7D-release%5C%5C%5C%5C.apk%24%5C%22%7D%22%7D&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/ImranR98/Obtainium/main/assets/graphics/badge_obtainium.png&quot; height=&quot;48&quot; alt=&quot;Get it on Obtainium&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;The standard and User CA channels use separate application IDs, so both can stay installed and keep independent profiles, settings, and caches. Keep the asset filter: it prevents Obtainium from selecting a different channel than the configured app.&lt;/p&gt; 
&lt;h3&gt;F-Droid&lt;/h3&gt; 
&lt;p&gt;Candy includes a separately installable &lt;code&gt;foss&lt;/code&gt; distribution flavor for the official F-Droid repository. It uses the application ID &lt;code&gt;dev.sk2andy.materialbrowser.foss&lt;/code&gt;, removes Google Play services, Google Cast, Google Code Scanner, and Candy&#39;s GitHub update checker, and keeps its profiles, settings, and caches isolated from the other channels. Remote search suggestions default to off. F-Droid builds this variant from tagged public source and verifies it against Candy&#39;s upstream-signed FOSS APK.&lt;/p&gt; 
&lt;p&gt;The isolated F-Droid listing starts with &lt;code&gt;0.37&lt;/code&gt;; older FOSS APKs used the universal application ID and cannot become versions of the new package. Submission files and maintainer steps live in &lt;a href=&quot;https://raw.githubusercontent.com/sk2andy/candy-browser/main/distribution/fdroid/README.md&quot;&gt;&lt;code&gt;distribution/fdroid&lt;/code&gt;&lt;/a&gt;. Candy publishes a signed FOSS reference APK so F-Droid can verify its source build and preserve update compatibility with the upstream signing key.&lt;/p&gt; 
&lt;p&gt;Releases contain four APK channels plus an architecture-optimized standard APK:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;APK suffix&lt;/th&gt; 
   &lt;th&gt;Certificate trust&lt;/th&gt; 
   &lt;th&gt;Intended use&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;-release.apk&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Android system CAs only&lt;/td&gt; 
   &lt;td&gt;Universal compatibility fallback&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;-arm64-v8a-release.apk&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Android system CAs only&lt;/td&gt; 
   &lt;td&gt;Recommended smaller APK for ARM64 devices&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;-systemwebview-release.apk&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Android system CAs only&lt;/td&gt; 
   &lt;td&gt;Small, separately installed build using only Android System WebView&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;-foss-release.apk&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Android system CAs only&lt;/td&gt; 
   &lt;td&gt;F-Droid reproducible-build reference without proprietary Google integrations&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;-ca-release.apk&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;System CAs plus every CA in Android&#39;s user store&lt;/td&gt; 
   &lt;td&gt;Explicit opt-in for HTTPS filtering/proxy tools such as AdGuard&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;Both standard APKs use &lt;code&gt;dev.sk2andy.materialbrowser&lt;/code&gt; and the same release signature. The System WebView-only build uses &lt;code&gt;dev.sk2andy.materialbrowser.systemwebview&lt;/code&gt;, the FOSS build uses &lt;code&gt;dev.sk2andy.materialbrowser.foss&lt;/code&gt;, and the User CA build uses &lt;code&gt;dev.sk2andy.materialbrowser.ca&lt;/code&gt;. Android therefore installs all four channels side by side with isolated app data. Their launcher labels distinguish the channels; the warning under &lt;strong&gt;Settings → Protection &amp;amp; data&lt;/strong&gt; additionally identifies the User CA build&#39;s broader trust policy. Updates stay on the installed channel. The System WebView build never downloads a GeckoView APK.&lt;/p&gt; 
&lt;p&gt;Releases through v0.36 used the standard application ID for all three APKs. Android cannot migrate an installed package to a different application ID, so the isolated FOSS and CA channels start with fresh app data. The new CA asset name is &lt;code&gt;-ca-release.apk&lt;/code&gt;; legacy CA installs therefore do not get offered an incompatible package as an in-place update.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Security warning:&lt;/strong&gt; a trusted user CA can inspect and modify all HTTPS traffic made by Candy, including normal and private tabs, suggestions, filter subscriptions, and update metadata. Only install the User CA APK when you trust every CA in Android&#39;s user credential store and the software that controls its private key. APK signature verification still protects Candy updates from APKs signed by another key.&lt;/p&gt; 
&lt;p&gt;Advanced users who intentionally need this channel can use the &lt;a href=&quot;https://apps.obtainium.imranr.dev/redirect?r=obtainium%3A%2F%2Fapp%2F%7B%22id%22%3A%22dev.sk2andy.materialbrowser.ca%22%2C%22url%22%3A%22https%3A%2F%2Fgithub.com%2Fsk2andy%2Fcandy-browser%22%2C%22author%22%3A%22sk2andy%22%2C%22name%22%3A%22Candy%20CA%22%2C%22preferredApkIndex%22%3A0%2C%22additionalSettings%22%3A%22%7B%5C%22apkFilterRegEx%5C%22%3A%5C%22%5ECandyBrowser-v%5B0-9%5D%2B(%3F%3A%5C%5C%5C%5C.%5B0-9%5D%2B)%7B1%2C2%7D-ca-release%5C%5C%5C%5C.apk%24%5C%22%7D%22%7D&quot;&gt;filtered User CA Obtainium setup&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Build from source&lt;/h2&gt; 
&lt;p&gt;Requirements: Android SDK 37.1 and JDK 17. Point &lt;code&gt;JAVA_HOME&lt;/code&gt; to your JDK 17 installation.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./gradlew testFullDebugUnitTest lintFullDebug assembleFullDebug
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To verify the F-Droid-compatible build:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./gradlew testFossDebugUnitTest lintFossDebug assembleFossDebug
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To verify the small System WebView-only build:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./gradlew testSystemwebviewDebugUnitTest lintSystemwebviewDebug assembleSystemwebviewDebug
./gradlew assembleSystemwebviewRelease
python3 scripts/test_systemwebview_apk.py
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To build the explicit User CA development variant:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./gradlew testFullUserCaDebugUnitTest lintFullUserCaDebug assembleFullUserCaDebug
python3 scripts/test_network_security_apks.py
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Debug APK: &lt;code&gt;app/build/outputs/apk/full/debug/app-full-debug.apk&lt;/code&gt;. It installs as &lt;code&gt;dev.sk2andy.materialbrowser.linkpeek&lt;/code&gt;, uses the label &lt;code&gt;Candy Link Peek&lt;/code&gt;, and has a badged launcher icon, so it can stay installed beside the release app.&lt;/p&gt; 
&lt;h3&gt;Signed release builds&lt;/h3&gt; 
&lt;p&gt;Release builds are minified with R8 and require a signing key. Never commit a keystore or its credentials. Configure signing locally with either an ignored project file or environment variables.&lt;/p&gt; 
&lt;p&gt;For the first release only, create a long-lived key if no release key exists yet. Reuse that same key for every later release:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;mkdir -p .signing
keytool -genkeypair \
  -keystore .signing/candy-release.keystore \
  -storetype PKCS12 \
  -alias candy \
  -keyalg RSA \
  -keysize 4096 \
  -validity 10000
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For an ignored project file:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cp keystore.properties.example keystore.properties
# Replace every placeholder in keystore.properties, then:
./gradlew assembleFullLocalRelease
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Alternatively, export the same values from &lt;code&gt;~/.zshrc.shared&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;export CANDY_RELEASE_KEYSTORE_PATH=/absolute/path/to/project/.signing/candy-release.keystore
export CANDY_RELEASE_STORE_PASSWORD=&#39;replace-me&#39;
export CANDY_RELEASE_KEY_ALIAS=&#39;candy&#39;
export CANDY_RELEASE_KEY_PASSWORD=&#39;replace-me&#39;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Signed local APK: &lt;code&gt;app/build/outputs/apk/full/localRelease/app-full-localRelease.apk&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;localRelease&lt;/code&gt; installs beside the GitHub build as &lt;code&gt;dev.sk2andy.materialbrowser.local&lt;/code&gt; and uses a separate launcher icon and the label &lt;code&gt;Candy Browser Local&lt;/code&gt;. GitHub update prompts are disabled for this side-by-side build because production APKs cannot update its package. The GitHub release workflow uses &lt;code&gt;assembleFullRelease&lt;/code&gt;, &lt;code&gt;assembleFossRelease&lt;/code&gt;, &lt;code&gt;assembleSystemwebviewRelease&lt;/code&gt;, and &lt;code&gt;assembleFullUserCaRelease&lt;/code&gt;; those outputs use the standard, &lt;code&gt;.foss&lt;/code&gt;, &lt;code&gt;.systemwebview&lt;/code&gt;, and &lt;code&gt;.ca&lt;/code&gt; application IDs and matching launcher identities. A separate workflow signs and publishes the FOSS output from explicitly allowlisted release tags.&lt;/p&gt; 
&lt;p&gt;For current edge-to-edge experiments, use the separate &lt;strong&gt;Candy Edge&lt;/strong&gt; package consistently:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./gradlew lintFullLocalRelease assembleFullLocalRelease \
  -Pcandy.localReleaseApplicationIdSuffix=.edge \
  &#39;-Pcandy.localReleaseAppLabel=Candy Edge&#39; \
  -Pcandy.performanceDiagnostics=true
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This signed, minified APK installs as &lt;code&gt;dev.sk2andy.materialbrowser.edge&lt;/code&gt;, without replacing standard Candy or sharing its app data. Its diagnostic authority is &lt;code&gt;content://dev.sk2andy.materialbrowser.edge.performance&lt;/code&gt;; launch the component &lt;code&gt;dev.sk2andy.materialbrowser.edge/dev.sk2andy.materialbrowser.MainActivity&lt;/code&gt;. Keep production release identities unchanged. Device commands must use the explicitly selected serial.&lt;/p&gt; 
&lt;h3&gt;GitHub releases&lt;/h3&gt; 
&lt;p&gt;The manual &lt;code&gt;Release Android APK&lt;/code&gt; workflow tests the selected source revision, builds the FOSS flavor, builds and verifies the signed universal standard, ARM64 standard, System WebView-only, and User CA APKs, creates a &lt;code&gt;v&amp;lt;version&amp;gt;&lt;/code&gt; source tag, and publishes the four signed GitHub APKs plus their SHA-256 checksums. Add four repository secrets once:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;base64 &amp;lt; &quot;$CANDY_RELEASE_KEYSTORE_PATH&quot; | gh secret set CANDY_RELEASE_KEYSTORE_BASE64
printf &#39;%s&#39; &quot;$CANDY_RELEASE_STORE_PASSWORD&quot; | gh secret set CANDY_RELEASE_STORE_PASSWORD
printf &#39;%s&#39; &quot;$CANDY_RELEASE_KEY_ALIAS&quot; | gh secret set CANDY_RELEASE_KEY_ALIAS
printf &#39;%s&#39; &quot;$CANDY_RELEASE_KEY_PASSWORD&quot; | gh secret set CANDY_RELEASE_KEY_PASSWORD
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Pin the public certificate fingerprint separately. This prevents an accidentally replaced keystore from publishing an APK that installed copies cannot update to:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;keytool -exportcert \
  -keystore &quot;$CANDY_RELEASE_KEYSTORE_PATH&quot; \
  -storepass:env CANDY_RELEASE_STORE_PASSWORD \
  -alias &quot;$CANDY_RELEASE_KEY_ALIAS&quot; \
  | shasum -a 256 \
  | awk &#39;{print $1}&#39; \
  | gh variable set CANDY_RELEASE_CERTIFICATE_SHA256
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The separate &lt;code&gt;Publish F-Droid reference APK&lt;/code&gt; workflow builds without access to signing secrets, then passes the unsigned APK to an isolated signing job that executes no repository code. It accepts only explicitly allowlisted release tags and commits and uses Android Build Tools 34 for compatibility with F-Droid&#39;s signature-copying process. Reference APKs disable the legacy v1/JAR signature and enable modern APK signature schemes so F-Droid can copy the signature onto its independent build. F-Droid accepts the resulting signed APK only when that build matches byte for byte apart from signing.&lt;/p&gt; 
&lt;p&gt;The workflow uses the &lt;code&gt;release&lt;/code&gt; GitHub environment. Configure required reviewers for that environment if releases should require a manual approval after dispatch.&lt;/p&gt; 
&lt;p&gt;Before each release, update &lt;code&gt;candy.versionName&lt;/code&gt; and the monotonically increasing &lt;code&gt;candy.versionCode&lt;/code&gt; in &lt;code&gt;gradle.properties&lt;/code&gt;. The workflow rejects an input version that differs from the committed version. Add the matching English changelog at &lt;code&gt;release-notes/&amp;lt;version&amp;gt;.md&lt;/code&gt;; it is bundled into Android’s one-time What’s New page and published unchanged as the GitHub Release body. The project skill at &lt;code&gt;.agents/skills/release-changelog/SKILL.md&lt;/code&gt; documents the supported Markdown and screenshot format. Then dispatch a release from GitHub Actions or with GitHub CLI:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;gh workflow run release.yml \
  -f version=0.33 \
  -f changelog=release-notes/0.33.md \
  -f prerelease=false \
  -f play_track=alpha
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The workflow publishes to Google Play after the GitHub Release by default. For a GitHub-only release, pass &lt;code&gt;-f publish_play=false&lt;/code&gt;; the signed APK and release checks still run.&lt;/p&gt; 
&lt;h3&gt;Google Play releases&lt;/h3&gt; 
&lt;p&gt;The Play build uses the standard application ID &lt;code&gt;dev.sk2andy.materialbrowser&lt;/code&gt;, targets API 36, and disables Candy&#39;s GitHub update prompt. &lt;code&gt;bundleFullPlayRelease&lt;/code&gt; produces one Android App Bundle containing ARM64, ARMv7, x86, and x86_64 libraries; Google Play generates and serves only the configuration APKs needed by each device.&lt;/p&gt; 
&lt;p&gt;Candy&#39;s Google Play developer account ID is &lt;code&gt;6525963931496038407&lt;/code&gt;. This ID identifies the account but is not a publishing credential. The Android Publisher API authenticates a narrowly permissioned service account through GitHub&#39;s short-lived Workload Identity Federation credentials.&lt;/p&gt; 
&lt;p&gt;For seamless updates between existing GitHub installations and Google Play, configure Play App Signing with the existing Candy release key as the &lt;strong&gt;app signing key&lt;/strong&gt;. Do not let Play generate an unrelated app signing key. Create a separate upload key for the GitHub workflow:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;mkdir -p .signing
keytool -genkeypair \
  -keystore .signing/candy-play-upload.keystore \
  -storetype PKCS12 \
  -alias candy-play-upload \
  -keyalg RSA \
  -keysize 4096 \
  -validity 10000
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The &lt;code&gt;google-play&lt;/code&gt; GitHub environment supplies four secrets and three variables:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Kind&lt;/th&gt; 
   &lt;th&gt;Name&lt;/th&gt; 
   &lt;th&gt;Purpose&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Secret&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;CANDY_PLAY_UPLOAD_KEYSTORE_BASE64&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Base64-encoded Play upload keystore&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Secret&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;CANDY_PLAY_UPLOAD_STORE_PASSWORD&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Upload keystore password&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Secret&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;CANDY_PLAY_UPLOAD_KEY_ALIAS&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Upload key alias&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Secret&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;CANDY_PLAY_UPLOAD_KEY_PASSWORD&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Upload key password&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Variable&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;CANDY_PLAY_UPLOAD_CERTIFICATE_SHA256&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Pinned upload certificate digest&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Variable&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;GCP_WORKLOAD_IDENTITY_PROVIDER&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Full Google Cloud WIF provider name&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Variable&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;GCP_PLAY_SERVICE_ACCOUNT&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Play publisher service-account email&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;Restrict the WIF attribute condition to repository &lt;code&gt;sk2andy/candy-browser&lt;/code&gt; and environment &lt;code&gt;google-play&lt;/code&gt;. Allow either the reusable &lt;code&gt;job_workflow_ref&lt;/code&gt; identity at &lt;code&gt;refs/heads/main&lt;/code&gt; or the direct &lt;code&gt;workflow_ref&lt;/code&gt; identity for &lt;code&gt;publish-google-play.yml&lt;/code&gt; on &lt;code&gt;main&lt;/code&gt; and release tags matching &lt;code&gt;v*&lt;/code&gt;. Grant the service account access only to Candy in Play Console. Configure the &lt;code&gt;google-play&lt;/code&gt; GitHub environment to accept &lt;code&gt;main&lt;/code&gt; and &lt;code&gt;v*&lt;/code&gt; release tags. Automatic release publication must not require a reviewer. The workflow builds without Google or signing credentials; only the separate publish job can sign the AAB and request a short-lived Google credential. No service-account JSON key is stored in GitHub.&lt;/p&gt; 
&lt;p&gt;The account must be verified and the app, declarations, Play App Signing, upload key, service account access, and first internal release must be created once in Play Console. After that, publish an existing GitHub release tag with:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;gh workflow run publish-google-play.yml \
  -f version=0.42 \
  -f track=internal \
  -f status=completed
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;By default, the Android release workflow directly invokes the reusable Play workflow after creating each GitHub Release; &lt;code&gt;publish_play=false&lt;/code&gt; skips that job. The direct invocation avoids GitHub&#39;s protection against recursively triggering workflows with &lt;code&gt;GITHUB_TOKEN&lt;/code&gt;. Its &lt;code&gt;play_track&lt;/code&gt; input defaults to the closed alpha track and can target internal, beta, or production explicitly. A manually created stable GitHub Release also publishes to closed alpha, while a manually created prerelease publishes to Play beta. After production access is approved, select production when dispatching the release workflow. Manual dispatch from &lt;code&gt;main&lt;/code&gt; remains available for drafts and existing releases. All paths check out the fully qualified &lt;code&gt;v&amp;lt;version&amp;gt;&lt;/code&gt; tag and require a corresponding published GitHub Release. The workflow also requires matching English and German files at &lt;code&gt;fastlane/metadata/android/&amp;lt;locale&amp;gt;/changelogs/&amp;lt;versionCode&amp;gt;.txt&lt;/code&gt;, verifies their Play length limit, the upload-key certificate, all four ABIs, the signed AAB, and the R8 mapping file. It defaults to a draft internal release when dispatched manually. Manual production publication additionally requires &lt;code&gt;-f production_confirmation=PROMOTE-TESTED-TO-PRODUCTION&lt;/code&gt;. Each automatic release needs a new &lt;code&gt;versionCode&lt;/code&gt;; rerunning an already uploaded version can be rejected by Play. The release workflow intentionally does not overwrite the Store listing. Store descriptions and artwork in &lt;code&gt;fastlane/metadata/android&lt;/code&gt; remain the canonical source for the one-time Play Console setup and explicit later listing updates.&lt;/p&gt; 
&lt;p&gt;Publish a FOSS reference APK from an allowlisted release tag with:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;gh workflow run publish-fdroid-reference.yml -f tag=v0.33
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Before each later F-Droid release, add its exact tag and immutable commit to the workflow allowlist through normal code review, then dispatch the workflow.&lt;/p&gt; 
&lt;p&gt;Android &lt;code&gt;versionCode&lt;/code&gt; is stored in source so GitHub and F-Droid can build identical version metadata from a tag. Tags and releases are created only after full and FOSS tests, release build checks, APK signing, certificate pinning, and signature verification succeed. Back up the original keystore and credentials securely: Android updates must always use the same signing key.&lt;/p&gt; 
&lt;h2&gt;Privacy and limitations&lt;/h2&gt; 
&lt;p&gt;Candy offers GeckoView and Android System WebView as selectable Android engines and uses WKWebView for the iOS target. It does not bundle a Chromium fork or route traffic through a proxy or VPN. Shared Candy filtering policy stays local and crosses a platform-specific engine adapter.&lt;/p&gt; 
&lt;p&gt;Engine APIs still define the visibility boundary. WebSockets, CNAME cloaking, some redirects, and content inside closed cross-origin or Shadow DOM contexts may get through. Firefox extensions can use only GeckoView&#39;s public embedder surface; Firefox Desktop support does not imply GeckoView support. Android System WebView and WKWebView cannot run Firefox extensions, so both use bounded Toppings instead.&lt;/p&gt; 
&lt;p&gt;Privacy X-Ray includes only blocked requests that the active browser engine can reliably attribute to one tab. Service-worker requests are filtered but excluded from per-tab telemetry when no reliable tab ID is available.&lt;/p&gt; 
&lt;p&gt;Google Cast is used only after explicit device selection for compatible regular-tab video. Media URLs and metadata are sent to the selected Cast device and remain memory-only in Candy. Google&#39;s Cast Sender SDK can send Cast-device interaction activity to Google&#39;s logging service; release Data Safety disclosures must account for the current SDK behavior.&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Candy Rules and filter-source details&lt;/strong&gt;&lt;/summary&gt; 
 &lt;p&gt;Candy Rules v1 supports exact host block/allow rules, positive site-to-host pairs, HOSTS entries, and origin-scoped standard CSS selectors. It deliberately rejects JavaScript, regular expressions, redirects, response-header filters, scriptlets, and advanced cosmetic operators rather than approximating them.&lt;/p&gt; 
 &lt;p&gt;Bundled EasyList/EasyPrivacy and uAssets cosmetics are compiled separately from user rules and merged in memory so exceptions work across sources. Only domain-specific standard &lt;code&gt;##selector&lt;/code&gt; rules, their domain exclusions, and matching &lt;code&gt;#@#&lt;/code&gt; exceptions are retained. Generic selectors, conditional capability blocks, and procedural operators are skipped. Runtime lookup resolves selectors for the current host before registering a bounded, exact-origin document-start script; invalid browser-specific selectors fail independently through &lt;code&gt;insertRule&lt;/code&gt;. Mail, Maps, and Accounts Google hosts intentionally receive no bundled cosmetic CSS.&lt;/p&gt; 
 &lt;p&gt;Bundled defaults may additionally use audited, declarative WebView rules: a site-scoped literal request-path prefix or a known Reject/Remind-later consent control. These rules cannot run imported JavaScript, never click Accept, and never intercept a main-frame navigation. An exact bundled path rule may override the general same-party escape only for its audited page-host, request-host, and literal non-root path prefix.&lt;/p&gt; 
 &lt;p&gt;Imports are bounded and validated atomically. HTTPS subscriptions update only after a user-requested fetch, show a diff, and require confirmation. Private-profile imports remain in memory.&lt;/p&gt; 
 &lt;p&gt;EasyList, EasyPrivacy, and EasyList Cookie data are distributed under CC BY-SA 3.0 or later. The uAssets-derived network and cosmetic subsets are generated from one pinned revision of the official uBlock Origin Ads source and distributed under GPL-3.0. The HaGeZi Pro host delta is generated from a pinned official revision and distributed under GPL-3.0. Exact sources, revisions, transformations, and notices ship in &lt;code&gt;app/src/main/assets/&lt;/code&gt;; maintenance entry points live in &lt;code&gt;scripts/update_*.sh&lt;/code&gt;.&lt;/p&gt; 
&lt;/details&gt; 
&lt;h2&gt;Languages&lt;/h2&gt; 
&lt;p&gt;29 app languages, including Russian (&lt;code&gt;ru&lt;/code&gt;, also used for &lt;code&gt;ru-RU&lt;/code&gt;). See the &lt;a href=&quot;https://raw.githubusercontent.com/sk2andy/candy-browser/main/docs/browsing/app-languages.md#supported-languages&quot;&gt;complete language list&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Licensing&lt;/h2&gt; 
&lt;p&gt;Candy Browser source code is available under the &lt;a href=&quot;https://raw.githubusercontent.com/sk2andy/candy-browser/main/LICENSE&quot;&gt;Mozilla Public License 2.0&lt;/a&gt;. Third-party components and filter data retain their own licenses; bundled notices are available in &lt;code&gt;app/src/main/assets/third_party_notices.txt&lt;/code&gt; and inside the app.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/aee2cfccfa8b3fd16f470056a46023c71daff19f0c6c39328f2ce3f31b5012f6/sk2andy/candy-browser" medium="image" />
      
    </item>
    
    <item>
      <title>PimpinPumpkin/Vela</title>
      <link>https://github.com/PimpinPumpkin/Vela</link>
      <description>&lt;p&gt;Maps and turn-by-turn navigation for Android without Google Play Services: the best of open map data, with Google lookups by choice. Runs on degoogled phones and can avoid Flock cameras&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://mshibanami.github.io/GitHubTrendingRSS/assets/icons/link.png&quot; width=&quot;20&quot; height=&quot;20&quot; alt=&quot;link&quot; style=&quot;margin: 0 8px 0 0; padding: 0; display: inline-block; vertical-align: middle;&quot; /&gt;&lt;a href=&quot;https://pimpinpumpkin.github.io/Vela/&quot;&gt;https://pimpinpumpkin.github.io/Vela/&lt;/a&gt;&lt;/p&gt;&lt;hr&gt;&lt;div align=&quot;center&quot;&gt; 
 &lt;img src=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/docs/logo.svg?sanitize=true&quot; width=&quot;120&quot; alt=&quot;Vela Maps logo&quot; /&gt; 
 &lt;h1&gt;Vela Maps&lt;/h1&gt; 
 &lt;p&gt;&lt;strong&gt;The best of OpenStreetMap and Google Maps, in one app.&lt;/strong&gt;&lt;/p&gt; 
 &lt;p&gt;Live traffic, real place data and turn-by-turn navigation, with no Google account, no Play Services and no Google code on your phone.&lt;/p&gt; 
 &lt;p&gt;&lt;a href=&quot;https://github.com/PimpinPumpkin/Vela/releases/latest&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/v/release/PimpinPumpkin/Vela?label=stable&amp;amp;color=149387&quot; alt=&quot;Stable release&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/PimpinPumpkin/Vela/actions/workflows/ci.yml&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/actions/workflow/status/PimpinPumpkin/Vela/ci.yml?branch=main&amp;amp;label=build&quot; alt=&quot;Build&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/LICENSE&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/license/PimpinPumpkin/Vela?color=blue&quot; alt=&quot;License: GPL v3&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/PimpinPumpkin/Vela/stargazers&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/stars/PimpinPumpkin/Vela?style=flat&amp;amp;color=ffd43b&quot; alt=&quot;Stars&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://hosted.weblate.org/engage/vela-maps/&quot;&gt;&lt;img src=&quot;https://hosted.weblate.org/widget/vela-maps/app/svg-badge.svg?sanitize=true&quot; alt=&quot;Translation status&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/#install&quot;&gt;Install&lt;/a&gt; · &lt;a href=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/#what-you-get&quot;&gt;What you get&lt;/a&gt; · &lt;a href=&quot;https://pimpinpumpkin.github.io/Vela/docs/&quot;&gt;Docs&lt;/a&gt; · &lt;a href=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/docs/FAQ.md&quot;&gt;FAQ&lt;/a&gt; · &lt;a href=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/docs/book/README.md&quot;&gt;The book&lt;/a&gt; · &lt;a href=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/#privacy&quot;&gt;Privacy&lt;/a&gt; · &lt;a href=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/SPEC.md&quot;&gt;How it works&lt;/a&gt; · &lt;a href=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/docs/BUILDING.md&quot;&gt;Build&lt;/a&gt; · &lt;a href=&quot;https://github.com/PimpinPumpkin/Vela/discussions&quot;&gt;Discussions&lt;/a&gt; · &lt;a href=&quot;https://hosted.weblate.org/engage/vela-maps/&quot;&gt;Translate&lt;/a&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;a href=&quot;https://pimpinpumpkin.github.io/Vela/&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/VISIT%20THE%20WEBSITE-149387?style=for-the-badge&quot; alt=&quot;Visit the website&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-warning&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-alert mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Warning&lt;/p&gt;
 &lt;p&gt;&lt;strong&gt;Vela is in beta, so you may run into bugs.&lt;/strong&gt; If you do, open an issue and fill out the template. Nightlies and canary builds are newer still and less tested than the weekly stable.&lt;/p&gt; 
&lt;/div&gt; 
&lt;p&gt;An open-source Google Maps alternative for Android: &lt;em&gt;what NewPipe is to YouTube, for Google Maps.&lt;/em&gt; The map is open data. The basemap is open vector tiles (OpenStreetMap), and the places on it are &lt;strong&gt;Vela data&lt;/strong&gt;: Overture Maps and AllThePlaces, positioned with OpenStreetMap, baked into tiles in this repo and streamed from its releases. Browsing around never asks Google anything. Search, tap a place or ask for a route, and the phone itself asks Google&#39;s public web endpoints, with no account, no key and no server in between, for what only Google does well: search, hours, reviews, photos, and routes that know about traffic and closed roads. Built for degoogled phones such as GrapheneOS, and it runs on stock Android too.&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/docs/not-google-maps.png&quot; width=&quot;320&quot; alt=&quot;A tub of I Can&#39;t Believe It&#39;s Not Butter relabeled I can&#39;t believe it&#39;s not Google Maps&quot; /&gt;&lt;/p&gt; 
&lt;h2&gt;What reaches Google, by default&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;It is not a Google Maps wrapper.&lt;/strong&gt; Vela is a native Android app drawing open vector tiles (Jetpack Compose and MapLibre). There is no Google SDK in it, no Play Services, no API key and nothing to sign in to. It looks like Google Maps on purpose.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;What you do&lt;/th&gt; 
   &lt;th&gt;What reaches Google&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Pan, zoom, browse the map&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;Nothing.&lt;/strong&gt; Tiles from OpenFreeMap, streets and labels from OpenStreetMap&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;The places drawn on the map&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;Nothing, where Vela has place data.&lt;/strong&gt; Open data baked in this repo: Overture Maps and AllThePlaces, positioned with OpenStreetMap. Where Vela has none for the area on screen, Google&#39;s places are drawn and Google is sent that area&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Drop a pin, tap a house number&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;Nothing.&lt;/strong&gt; OpenStreetMap&#39;s Nominatim names the spot&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Read a departure board&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;Nothing, for the stops Vela draws from open transit data:&lt;/strong&gt; the board comes from Transitous. Where Transitous has no coverage, Vela falls back to the stop&#39;s Google page&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Ask for directions&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;Where the trip starts and ends, anonymously.&lt;/strong&gt; A driving route is Google&#39;s own, so it knows about traffic and closed roads. The turn-by-turn instructions are put on it from OpenStreetMap, by the open OSRM and Valhalla routers, which are sent the same trip. While you drive, Google is asked again when you leave the route and every couple of minutes for traffic; Settings → Navigation turns the second off. Walking and cycling routes come from the open routers (for a walk Google is asked once, and its route used only when it is much shorter). Offline, the route is computed on the phone&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Type a search&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;Your text, anonymously&lt;/strong&gt;, like a logged-out browser. Typing sends Google&#39;s own autocomplete each time you pause; submitting sends a Google search. Text that starts with a house number also goes to the open Photon geocoder&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Tap a place&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;An anonymous lookup of that place&lt;/strong&gt;, with no account and no app key, for its hours, reviews and photos. Settings → Places can stop the lookup for places tapped on the map&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Everything you save&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;Nothing, ever.&lt;/strong&gt; No account, no Vela backend, no Vela telemetry; saved places, history and settings stay on the phone&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;Download a region and the map, search, routing and turn-by-turn navigation work with no network. Offline, or with &lt;strong&gt;Settings → Privacy → Use Vela without Google&lt;/strong&gt; on, nothing reaches Google at all. The first run asks which you want, before the map loads. A few things Google only serves to a real browser, a place&#39;s reviews among them, are read from a Google page in an offscreen WebView, anonymously; the list is in &lt;a href=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/PRIVACY.md#the-hidden-pages&quot;&gt;PRIVACY.md&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/#privacy&quot;&gt;The full comparison against the Google Maps app and Google Maps web is below&lt;/a&gt;&lt;/strong&gt;, and the per-request detail is in &lt;a href=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/PRIVACY.md&quot;&gt;PRIVACY.md&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Screenshots&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;Navigation&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;Map &amp;amp; search&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;Place details&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;Directions&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;Search results&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/docs/screenshots/05-navigation.png&quot; width=&quot;150&quot; /&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/docs/screenshots/01-map.png&quot; width=&quot;150&quot; /&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/docs/screenshots/03-place.png&quot; width=&quot;150&quot; /&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/docs/screenshots/04-directions.png&quot; width=&quot;150&quot; /&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/docs/screenshots/02-search.png&quot; width=&quot;150&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;Public transit&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;Departure board&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;Stops on the line&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;Light theme - map&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;Light theme - place&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/docs/screenshots/06-transit.png&quot; width=&quot;150&quot; /&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/docs/screenshots/07-bus-stop.png&quot; width=&quot;150&quot; /&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/docs/screenshots/11-stop-list.png&quot; width=&quot;150&quot; /&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/docs/screenshots/08-map-light.png&quot; width=&quot;150&quot; /&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/docs/screenshots/09-place-light.png&quot; width=&quot;150&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;em&gt;Turn-by-turn with lane guidance, route shields and the speedometer. The OpenFreeMap basemap in Google&#39;s colors with Google Sans Flex labels. Place pages with live data. The route picker with alternates, traffic and the avoid switches. Live departure boards with the stop list for every route. Light and dark themes, set in the app.&lt;/em&gt;&lt;/p&gt; 
&lt;h2&gt;Install&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://apps.obtainium.imranr.dev/redirect?r=obtainium://add/https://github.com/PimpinPumpkin/Vela&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/ImranR98/Obtainium/main/assets/graphics/badge_obtainium.png&quot; alt=&quot;Get it on Obtainium&quot; height=&quot;54&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/FDROID.md&quot;&gt;&lt;img src=&quot;https://fdroid.gitlab.io/artwork/badge/get-it-on.png&quot; alt=&quot;Get it on F-Droid (Vela&#39;s own repo)&quot; height=&quot;54&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Obtainium tracks the &lt;strong&gt;weekly stable&lt;/strong&gt; release. Turn on &quot;include prereleases&quot; for the &lt;strong&gt;nightly&lt;/strong&gt; channel.&lt;/p&gt; 
&lt;p&gt;The F-Droid badge is &lt;strong&gt;Vela&#39;s own repository&lt;/strong&gt;, not the &lt;a href=&quot;http://f-droid.org&quot;&gt;f-droid.org&lt;/a&gt; catalog. Add &lt;code&gt;https://pimpinpumpkin.github.io/Vela/repo&lt;/code&gt; to any F-Droid client and it serves the same signed APKs, weekly stable by default (fingerprint and nightly setup in &lt;a href=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/FDROID.md&quot;&gt;FDROID.md&lt;/a&gt;). Or take an APK straight from &lt;a href=&quot;https://github.com/PimpinPumpkin/Vela/releases&quot;&gt;Releases&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Check you got the real thing&lt;/h3&gt; 
&lt;p&gt;Every Vela APK, from any channel, is signed with the same key. Its certificate fingerprint is:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SHA-256  29:93:8B:48:58:06:3E:42:E6:77:FF:95:C9:01:CD:48:24:8A:7F:03:2A:3A:E8:5F:9B:9E:56:17:56:8B:0D:36
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Check a downloaded file against it before installing:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;apksigner verify --print-certs vela-maps-*.apk
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;On the phone, &lt;a href=&quot;https://github.com/soupslurpr/AppVerifier&quot;&gt;App Verifier&lt;/a&gt; checks the same thing. It wants the package name on the first line and the fingerprint on the second, so paste this block, not the line above:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;app.vela
29:93:8B:48:58:06:3E:42:E6:77:FF:95:C9:01:CD:48:24:8A:7F:03:2A:3A:E8:5F:9B:9E:56:17:56:8B:0D:36
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Android enforces this for you after the first install: an update signed with a different key is refused, so a build that installs over your existing Vela came from the same place this one did.&lt;/p&gt; 
&lt;p&gt;This is the certificate the app is signed with, and it stays the same across releases. It is not a checksum of a particular APK, and it is not the same as the F-Droid repo fingerprint in &lt;a href=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/FDROID.md&quot;&gt;FDROID.md&lt;/a&gt;, which signs the repo index rather than the app.&lt;/p&gt; 
&lt;p&gt;There is a one-page tour at &lt;strong&gt;&lt;a href=&quot;https://pimpinpumpkin.github.io/Vela/&quot;&gt;pimpinpumpkin.github.io/Vela&lt;/a&gt;&lt;/strong&gt;, and the docs in this repository are published as a searchable site at &lt;strong&gt;&lt;a href=&quot;https://pimpinpumpkin.github.io/Vela/docs/&quot;&gt;pimpinpumpkin.github.io/Vela/docs&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://buymeacoffee.com/PimpinPumpkin&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/support%20vela-buy%20me%20a%20coffee-ffdd00&quot; alt=&quot;Support Vela on Buy Me a Coffee&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;What you get&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Routes and traffic from Google.&lt;/strong&gt; A driving route is the one Google would give you, with live traffic and closed roads accounted for. Each option shows its time in green, amber or red and says light, moderate or heavy traffic in words. Turn-by-turn navigation runs on top: lane diagrams, exit shields, a speedometer with the posted limit, and a faster-route offer when a jam builds ahead.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;The places on the map are open data, and Google fills in the details.&lt;/strong&gt; Every pin, dot and label you pan past is &lt;strong&gt;Vela data&lt;/strong&gt;: Overture Maps and AllThePlaces, positioned with OpenStreetMap, baked into map tiles in this repo, streamed from its releases and carried offline with a downloaded region. Browsing sends Google nothing. Tapping a place asks Google for what open data lacks: hours with holidays, reviews you can search, photos, busy times, phone and website, and a warning if the place will be closed when you arrive. &lt;strong&gt;Settings → Places → &quot;Place icons on the map&quot;&lt;/strong&gt; switches the map between Vela data (the default), Both, or Google, and a separate switch stops a tapped place from being looked up. The &lt;a href=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/docs/FAQ.md&quot;&gt;FAQ&lt;/a&gt; says what each feature uses.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;No Google software on your phone.&lt;/strong&gt; No Play Services, no account, no app key, no ads. Google never sees your map browsing or your saved places, and your GPS trail stays on the phone. A position reaches Google only in specific requests: a route from where you are, a search that ranks nearby places first, and the reroute and traffic checks while you navigate. &lt;a href=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/#privacy&quot;&gt;Privacy&lt;/a&gt; has the breakdown.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Flock cameras on the map.&lt;/strong&gt; Mapped license plate cameras (the community DeFlock project&#39;s OpenStreetMap data) are drawn out of the box. &lt;strong&gt;Avoid surveillance cameras&lt;/strong&gt;, in Settings → Navigation or the route picker, counts the cameras pointed along each route and picks a lower-camera one when the detour is small. Two more switches give a card or a spoken &quot;License plate camera ahead&quot; as you approach one. The dataset lives on the phone and updates weekly.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Vela Voice.&lt;/strong&gt; Spoken directions from a neural voice that runs on the phone, and a mic that transcribes your search on the phone too. Nothing you say goes to a speech service.&lt;/p&gt; &lt;p&gt;🔊 &lt;strong&gt;Hear it&lt;/strong&gt;, the in-app voice at its default pace:&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://github.com/user-attachments/assets/17f246e4-51c8-4d01-998b-dcd7f29dc15f&quot;&gt;https://github.com/user-attachments/assets/17f246e4-51c8-4d01-998b-dcd7f29dc15f&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Offline maps and routing.&lt;/strong&gt; Download a state or a country, or just the area on screen, and its map, its places, typed street addresses and turn-by-turn routing work with no signal.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Public transit.&lt;/strong&gt; Departure boards and the stop list of every run come from the open timetables transit agencies publish (served by the community Transitous project). Transit directions come from Google, with the open planner as the fallback. Rail lines draw in their own colors, and a trip draws along its real track.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Gas prices.&lt;/strong&gt; Search for gas and each station&#39;s price is on its marker, in the list and on its page.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Street View&lt;/strong&gt; in the app: look around, walk the street, go back to older captures, half screen over the map or full screen.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Satellite imagery&lt;/strong&gt; from Esri.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Lists and saved routes.&lt;/strong&gt; Keep places in lists with a note each, save a route you like, pin a trip to the home screen, and back all of it up to a file. Paste a shared Google Maps list or a My Maps link into the search bar to import it.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Parking.&lt;/strong&gt; Tap &lt;strong&gt;P&lt;/strong&gt; when you park, tap the pin later for the walk back.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Say it or type it.&lt;/strong&gt; &quot;Take me home&quot;, &quot;navigate to the station&quot;, &quot;Davis to San Francisco&quot;, &quot;nearest pharmacy&quot;, &quot;what&#39;s my ETA&quot;: the search box treats those as actions, spoken or typed, in every language the app speaks.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;It repairs itself when Google moves things.&lt;/strong&gt; The request recipes live in a signed file the app checks at launch. When Google shifts a field, a fix reaches every install in minutes with no app update. &lt;a href=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/SPEC.md&quot;&gt;&lt;code&gt;SPEC.md&lt;/code&gt;&lt;/a&gt; sections 3 and 11 describe it.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;The rest.&lt;/strong&gt; 18 languages, light and dark themes, optional wallpaper colors, full operation by D-pad on keypad phones, a built-in updater with stable, nightly and canary channels, and Android Auto screens (a car accepts a sideloaded app only in some setups; see &lt;a href=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/docs/ANDROID-AUTO.md&quot;&gt;docs/ANDROID-AUTO.md&lt;/a&gt;).&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The whole list is in &lt;a href=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/FEATURES.md&quot;&gt;FEATURES.md&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Why Vela talks to Google at all&lt;/h2&gt; 
&lt;p&gt;A phone without Google Play Services cannot run Google Maps, and the open map datasets fall well short on search, reviews, hours and live traffic. So for those, Vela is a client of Google&#39;s public web endpoints. It asks them the way a logged-out browser does, from each user&#39;s own phone, with no account, no shared API key and no server in the middle. NewPipe does the same for YouTube. There are no ads, and your search history, saved places and settings stay on the phone.&lt;/p&gt; 
&lt;p&gt;The map, the streets, the labels and the house numbers come from OpenStreetMap (in much of the US the house numbers come from OpenAddresses). The businesses on the map come from Overture and AllThePlaces. Google is used for search, place details, driving routes and traffic, plus things you open yourself such as Street View and transit directions. So street names and house numbers can differ from what Google Maps shows, and how much you see offline depends on how well OpenStreetMap covers your area. I&#39;m thinking of ways to improve OSM and fill the gaps in the data. Stay tuned.&lt;/p&gt; 
&lt;h2&gt;Privacy&lt;/h2&gt; 
&lt;p&gt;There is &lt;strong&gt;no Vela backend, no account and no Vela telemetry&lt;/strong&gt;. Vela fetches from Google directly from your phone like a logged-out browser. Google sees your IP, your query and the map area, but &lt;strong&gt;not a Google account or any app key&lt;/strong&gt;, much like &lt;code&gt;google.com/maps&lt;/code&gt; in an incognito window. Google does keep its own logged-out session cookie; Vela starts a new one every week by default (&lt;strong&gt;Settings → Privacy → Google session&lt;/strong&gt;: weekly, daily, or every launch, plus a button to start one now). Your saved places, history and settings never leave the device. &lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/PRIVACY.md&quot;&gt;What each service receives is in &lt;code&gt;PRIVACY.md&lt;/code&gt;&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;In short, Google goes from knowing who you are and everywhere you go to answering anonymous questions now and then. With the default place source your map browsing never reaches Google, and your GPS trace is never uploaded anywhere. While you navigate, Vela asks Google for fresh traffic from your current position every couple of minutes, which is what powers the faster-route offers and the live arrival time. &lt;strong&gt;Settings → Navigation → &quot;Live traffic re-checks while navigating&quot;&lt;/strong&gt; turns that off. Reroutes when you leave the route stay, because turn-by-turn cannot work without them.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;What Google gets&lt;/th&gt; 
   &lt;th&gt;Google Maps app&lt;/th&gt; 
   &lt;th&gt;Google Maps web&lt;/th&gt; 
   &lt;th&gt;Vela&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Tied to your Google account&lt;/td&gt; 
   &lt;td&gt;Yes, always signed in&lt;/td&gt; 
   &lt;td&gt;Yes unless incognito&lt;/td&gt; 
   &lt;td&gt;Never. There is no login&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;A persistent device identifier&lt;/td&gt; 
   &lt;td&gt;Yes (device and ad IDs via Play Services)&lt;/td&gt; 
   &lt;td&gt;Browser cookies&lt;/td&gt; 
   &lt;td&gt;No account, no app key. A logged-out Google session cookie that Vela replaces weekly by default, and an IP like any website visitor&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Your precise GPS position&lt;/td&gt; 
   &lt;td&gt;Continuously while open, plus Location History if enabled&lt;/td&gt; 
   &lt;td&gt;While the tab is open&lt;/td&gt; 
   &lt;td&gt;Never while browsing. Searches send the map area you are looking at and, to rank nearby places first, can ask about a small area around you. A route from your location sends that point as the start. While navigating, reroutes and the optional traffic re-check send your current position&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Every pan and zoom of the map&lt;/td&gt; 
   &lt;td&gt;Yes, their servers render the map&lt;/td&gt; 
   &lt;td&gt;Yes&lt;/td&gt; 
   &lt;td&gt;No, by default. Map tiles come from OpenFreeMap and the places on them from Vela&#39;s own data&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Your searches&lt;/td&gt; 
   &lt;td&gt;Yes, saved to your account history&lt;/td&gt; 
   &lt;td&gt;Yes&lt;/td&gt; 
   &lt;td&gt;The text reaches Google anonymously, as you type (autocomplete) and when you search&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Place pages you open&lt;/td&gt; 
   &lt;td&gt;Yes&lt;/td&gt; 
   &lt;td&gt;Yes&lt;/td&gt; 
   &lt;td&gt;The place lookup reaches Google anonymously, under that logged-out session cookie&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Turn-by-turn routes&lt;/td&gt; 
   &lt;td&gt;Yes, full trip telemetry&lt;/td&gt; 
   &lt;td&gt;Yes&lt;/td&gt; 
   &lt;td&gt;Google is asked anonymously for the route between two points, and again during the drive for reroutes and the optional traffic re-check. The open OSRM and Valhalla routers get the same trip, to supply the turn instructions. Your GPS trail as a whole never leaves the phone&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Saved places, home, work&lt;/td&gt; 
   &lt;td&gt;Stored on their servers&lt;/td&gt; 
   &lt;td&gt;Stored on their servers&lt;/td&gt; 
   &lt;td&gt;Stored only on your phone&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Ad profile building&lt;/td&gt; 
   &lt;td&gt;Feeds your ads profile&lt;/td&gt; 
   &lt;td&gt;Feeds your ads profile&lt;/td&gt; 
   &lt;td&gt;Nothing to attach it to&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Works with no Google contact at all&lt;/td&gt; 
   &lt;td&gt;No&lt;/td&gt; 
   &lt;td&gt;No&lt;/td&gt; 
   &lt;td&gt;Yes. One switch (Settings → Privacy → Use Vela without Google), and downloaded regions show the map, search, route and navigate offline&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;How it works&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/SPEC.md&quot;&gt;SPEC.md&lt;/a&gt; is the technical reference: the basemap, the places bake, the requests to Google, routing, navigation, the offline data and the signed remote-repair channel. &lt;a href=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/docs/book/README.md&quot;&gt;The book&lt;/a&gt; explains each subsystem in plainer words.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;File&lt;/th&gt; 
   &lt;th&gt;What&#39;s in it&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/SPEC.md&quot;&gt;&lt;code&gt;SPEC.md&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Every technical rule, contract and constant&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/docs/book/README.md&quot;&gt;&lt;code&gt;docs/book/&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Each subsystem explained: how places rank, when data is rebuilt, how a route is put together&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/FEATURES.md&quot;&gt;&lt;code&gt;FEATURES.md&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;What the app does, one line each&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/PRIVACY.md&quot;&gt;&lt;code&gt;PRIVACY.md&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;What each service receives&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/docs/FAQ.md&quot;&gt;&lt;code&gt;docs/FAQ.md&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;The questions people ask first&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/ROADMAP.md&quot;&gt;&lt;code&gt;ROADMAP.md&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;What is open. What shipped or was dropped is in &lt;a href=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/docs/ROADMAP-HISTORY.md&quot;&gt;&lt;code&gt;docs/ROADMAP-HISTORY.md&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/docs/BUILDING.md&quot;&gt;&lt;code&gt;docs/BUILDING.md&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Building from source&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/docs/TRANSLATING.md&quot;&gt;&lt;code&gt;docs/TRANSLATING.md&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;The languages, and how to translate (in the browser on &lt;a href=&quot;https://hosted.weblate.org/engage/vela-maps/&quot;&gt;Weblate&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/docs/dpad.md&quot;&gt;&lt;code&gt;docs/dpad.md&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Operation without a touchscreen&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/CLAUDE.md&quot;&gt;&lt;code&gt;CLAUDE.md&lt;/code&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Rules and traps for anyone changing the code, human or AI&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;GrapheneOS notes&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Location:&lt;/strong&gt; Vela uses Android&#39;s own &lt;code&gt;LocationManager&lt;/code&gt;, never Google&#39;s fused provider. On GrapheneOS, enabling PSDS (Settings → Location) drops the cold GPS fix from about 30 seconds to a few. Indoors GPS may not lock at all: turn on Network location (Settings → Location → Location services). Vela shows a tip when no position has come after a few seconds.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Roadmap&lt;/h2&gt; 
&lt;p&gt;Still open (details in &lt;a href=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/ROADMAP.md&quot;&gt;ROADMAP.md&lt;/a&gt;):&lt;/p&gt; 
&lt;ul class=&quot;task-list&quot;&gt; 
 &lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;cbx_0&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_0&quot;&gt; Android Auto without a Google Play listing.&lt;/label&gt;&lt;/li&gt; 
 &lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;cbx_1&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_1&quot;&gt; F-Droid&#39;s own catalog, which needs a build with no prebuilt parts.&lt;/label&gt;&lt;/li&gt; 
 &lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;cbx_2&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_2&quot;&gt; A Google Play listing, so Android Auto works on factory head units: a separate build with the Google half compiled out, while the full app stays on GitHub, Obtainium and F-Droid. A big job. On the radar, not started.&lt;/label&gt;&lt;/li&gt; 
 &lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;cbx_3&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_3&quot;&gt; An iOS build. The engine module is plain Kotlin and would move to Kotlin Multiplatform; the interface would be rewritten. On the radar, not started.&lt;/label&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Not going to happen:&lt;/strong&gt; anything that needs you to sign in to Google or hand data to a backend. That covers contributing reviews, photos or edits, live location sharing, a location timeline, and the data Google strips from anonymous requests (live busyness). No account and no server ever sees you.&lt;/p&gt; 
&lt;h2&gt;A note on the name&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;Vela Maps&lt;/strong&gt; (&lt;code&gt;app.vela&lt;/code&gt;): the navigator&#39;s constellation &quot;the Sails&quot;, and &quot;sail&quot; in several languages.&lt;/p&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;Read &lt;a href=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/CONTRIBUTING.md&quot;&gt;&lt;code&gt;CONTRIBUTING.md&lt;/code&gt;&lt;/a&gt; first. It covers the hard rules (no backend, no static Google keys, no Google libraries, the &lt;code&gt;:core&lt;/code&gt; / &lt;code&gt;:app&lt;/code&gt; module boundary, docs in the same commit) and how to send a change. There is no separate code of conduct: keep it about the code. Security issues go through &lt;a href=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/SECURITY.md&quot;&gt;&lt;code&gt;SECURITY.md&lt;/code&gt;&lt;/a&gt; (GitHub private vulnerability reporting), not a public issue.&lt;/p&gt; 
&lt;h2&gt;Map data&lt;/h2&gt; 
&lt;p&gt;The map is &lt;a href=&quot;https://www.openstreetmap.org/copyright&quot;&gt;OpenStreetMap&lt;/a&gt; data, © OpenStreetMap contributors, under the Open Database License, served as vector tiles by &lt;a href=&quot;https://openfreemap.org&quot;&gt;OpenFreeMap&lt;/a&gt;. Offline routing regions, place packs, house-number and building overlays are built from OpenStreetMap, OpenAddresses and Microsoft Building Footprints extracts and carry their licenses in the release notes of the hosting release. The places on the map are Overture Maps (CDLA-Permissive 2.0) and AllThePlaces data, positioned with OpenStreetMap. Closed places are weeded out with Foursquare OS Places (Apache 2.0), OpenStreetMap and Wikidata. Transit boards come from Transitous and the agencies&#39; own GTFS feeds. UK fuel prices come from the UK government&#39;s Fuel Finder, through &lt;a href=&quot;https://github.com/matthewgall/fuelfinder-archive&quot;&gt;matthewgall/fuelfinder-archive&lt;/a&gt;, and contain public sector information licensed under the Open Government Licence v3.0. Satellite imagery is Esri World Imagery, with Google imagery where Esri has none at close zoom.&lt;/p&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;http://www.gnu.org/licenses/gpl-3.0.en.html&quot;&gt;&lt;img src=&quot;https://www.gnu.org/graphics/gplv3-127x51.png&quot; alt=&quot;GNU GPLv3 Image&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Vela is Free Software: you can use, study, share and improve it at your will. You may use, modify and redistribute this project only if your modifications remain open source under the same license.&lt;/p&gt; 
&lt;p&gt;The app bundles the Google Sans Flex font, copyright The Google Sans Flex Authors, under the &lt;a href=&quot;https://raw.githubusercontent.com/PimpinPumpkin/Vela/main/app/src/main/assets/licenses/GoogleSansFlex-OFL.txt&quot;&gt;SIL Open Font License 1.1&lt;/a&gt;. Google Sans Flex is a trademark of Google LLC; Vela is not affiliated with or endorsed by Google.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/86899f9d2f9ce8414ed1c337a94ab1ab026236a31586f4953747ca606f3f8a21/PimpinPumpkin/Vela" medium="image" />
      
    </item>
    
    <item>
      <title>Lelonio/Square</title>
      <link>https://github.com/Lelonio/Square</link>
      <description>&lt;p&gt;Unofficial YouTube Music / Spotify Premium client for Android, built in Liquid Glass. Audio effects, Spotify Connect, listening history, 8 languages. Rust core on librespot.&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://mshibanami.github.io/GitHubTrendingRSS/assets/icons/link.png&quot; width=&quot;20&quot; height=&quot;20&quot; alt=&quot;link&quot; style=&quot;margin: 0 8px 0 0; padding: 0; display: inline-block; vertical-align: middle;&quot; /&gt;&lt;a href=&quot;https://github.com/Lelonio/Square/releases/latest&quot;&gt;https://github.com/Lelonio/Square/releases/latest&lt;/a&gt;&lt;/p&gt;&lt;hr&gt;&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/Lelonio/Square/master/docs/square.png&quot; width=&quot;112&quot; alt=&quot;&quot; /&gt; &lt;/p&gt; 
&lt;h1 align=&quot;center&quot;&gt;Square&lt;/h1&gt; An unofficial Android music client for Spotify Premium and YouTube Music, built in Liquid Glass. 
&lt;p&gt;&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://github.com/Lelonio/Square/releases/latest&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/v/release/Lelonio/Square?label=release&quot; alt=&quot;Latest release&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/Lelonio/Square/releases&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/downloads/Lelonio/Square/total&quot; alt=&quot;Downloads&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;https://img.shields.io/badge/Android-8.0%2B-3DDC84&quot; alt=&quot;Android 8.0 or later&quot; /&gt; &lt;a href=&quot;https://raw.githubusercontent.com/Lelonio/Square/master/LICENSE&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/license/Lelonio/Square&quot; alt=&quot;Licence&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://raw.githubusercontent.com/Lelonio/Square/master/#download&quot;&gt;&lt;b&gt;Download&lt;/b&gt;&lt;/a&gt; · &lt;a href=&quot;https://raw.githubusercontent.com/Lelonio/Square/master/#features&quot;&gt;&lt;b&gt;Features&lt;/b&gt;&lt;/a&gt; · &lt;a href=&quot;https://raw.githubusercontent.com/Lelonio/Square/master/#first-launch&quot;&gt;&lt;b&gt;First launch&lt;/b&gt;&lt;/a&gt; · &lt;a href=&quot;https://raw.githubusercontent.com/Lelonio/Square/master/#faq&quot;&gt;&lt;b&gt;FAQ&lt;/b&gt;&lt;/a&gt; · &lt;a href=&quot;https://t.me/+-XDmbFwz7uBkMjc0&quot;&gt;&lt;b&gt;Telegram community&lt;/b&gt;&lt;/a&gt; · &lt;a href=&quot;https://raw.githubusercontent.com/Lelonio/Square/master/docs/DEVELOPMENT.md&quot;&gt;&lt;b&gt;Building&lt;/b&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;Player&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;Lyrics&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;Effects&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Lelonio/Square/master/docs/screenshots/player-2.png&quot; alt=&quot;The player&quot; /&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Lelonio/Square/master/docs/screenshots/lyrics-2.png&quot; alt=&quot;Synced lyrics&quot; /&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Lelonio/Square/master/docs/screenshots/effects-2.png&quot; alt=&quot;The effects panel&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;strong&gt;Artist&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;strong&gt;Album&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;strong&gt;Glass settings&lt;/strong&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Lelonio/Square/master/docs/screenshots/artist-2.png&quot; alt=&quot;An artist&#39;s page&quot; /&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Lelonio/Square/master/docs/screenshots/album-2.png&quot; alt=&quot;An album&quot; /&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Lelonio/Square/master/docs/screenshots/glass-3.png&quot; alt=&quot;The glass settings&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Features&lt;/h2&gt; 
&lt;h3&gt;Two sources, one app&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Spotify or YouTube Music&lt;/strong&gt;, chosen at first launch and switchable in the settings. Home, search, the library and the player work the same on both.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Spotify&lt;/strong&gt;: your own account, with its playlists, library and Connect devices. Needs Premium.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;YouTube Music&lt;/strong&gt;: the whole catalogue and the music videos, with no account needed. Sign in with Google to bring in your playlists, albums and followed artists.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Player&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;The cover or the song&#39;s looping canvas video behind the controls.&lt;/li&gt; 
 &lt;li&gt;Music videos: switch from the song to its video in place, without losing the queue or the position, and keep watching in picture-in-picture.&lt;/li&gt; 
 &lt;li&gt;Radio from any song, and autoplay of similar songs when the queue ends.&lt;/li&gt; 
 &lt;li&gt;Crossfade between songs, with an option to skip trailing silence.&lt;/li&gt; 
 &lt;li&gt;Sleep timer: after 5 to 60 minutes or at the end of the song, fading out before it stops.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Audio effects&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Speed and pitch, each on its own, plus reverb.&lt;/li&gt; 
 &lt;li&gt;Presets, so &quot;slowed + reverb&quot; is one tap on any song.&lt;/li&gt; 
 &lt;li&gt;Karaoke: turn the voice down.&lt;/li&gt; 
 &lt;li&gt;Streaming quality that follows the connection, or a fixed one.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Lyrics&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Synced lyrics, word by word where they exist and line by line otherwise.&lt;/li&gt; 
 &lt;li&gt;Translation into your language, under the original lines.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Library and discovery&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Playlists, albums, artists and liked songs. Create, rename and delete playlists, add and remove songs, pin favourites, follow artists.&lt;/li&gt; 
 &lt;li&gt;A home page of shelves made for you, a &lt;strong&gt;New&lt;/strong&gt; tab with releases and charts, and a &lt;strong&gt;Radio&lt;/strong&gt; tab of stations, moods and genres.&lt;/li&gt; 
 &lt;li&gt;Search, with your recent searches kept (swipe one away to remove it).&lt;/li&gt; 
 &lt;li&gt;The music already on your phone, in a Local files shelf.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Offline&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Download playlists, albums and songs, from either source. A song kept by two playlists is downloaded once.&lt;/li&gt; 
 &lt;li&gt;Downloads over Wi-Fi only, and automatic downloads of your liked songs.&lt;/li&gt; 
 &lt;li&gt;Offline mode: play only what is on the phone.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Spotify extras&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;A &lt;strong&gt;Connect&lt;/strong&gt; device: send playback to Square from any other device, and control your other devices from it.&lt;/li&gt; 
 &lt;li&gt;What your friends are listening to.&lt;/li&gt; 
 &lt;li&gt;Similar playlists at the end of each playlist.&lt;/li&gt; 
 &lt;li&gt;Song credits: performers, writers and producers.&lt;/li&gt; 
 &lt;li&gt;What you play is saved to your listening history, as it would be anywhere else you listen.&lt;/li&gt; 
 &lt;li&gt;Spotify links can open straight in Square.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Android Auto&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Browse playlists and recently played, search by voice, like a song or start a radio from the car.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Look and language&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Every control, the tab bar, the player, the sheets and the menus are made of one refracting glass. Blur, refraction and tint are adjustable, with a lighter mode for slower phones.&lt;/li&gt; 
 &lt;li&gt;Eight languages: English, Italian, Spanish, French, German, Portuguese, Hindi and Turkish, chosen independently of the phone&#39;s own.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Download&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://rookieenough.github.io/Orion-Data/redirect.html?id=square&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/RookieEnough/Orion-Store/refs/heads/main/assets/orion-badge.png&quot; alt=&quot;Get it on Orion Store&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Or&lt;/p&gt; 
&lt;p&gt;Download the APK from the &lt;a href=&quot;https://github.com/Lelonio/Square/releases/latest&quot;&gt;latest release&lt;/a&gt; and install it. Square needs Android 8.0 or later.&lt;/p&gt; 
&lt;p&gt;Square updates itself: it checks for new releases and installs them from the settings. It is not on the Play Store and cannot be; see the &lt;a href=&quot;https://raw.githubusercontent.com/Lelonio/Square/master/#disclaimer&quot;&gt;disclaimer&lt;/a&gt;.&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;The first minutes after installing are slower&lt;/b&gt;&lt;/summary&gt; 
 &lt;p&gt;Android takes a while to optimise a freshly installed app, and until it does the interface is noticeably slower. To do it straight away, open the app once and give it a few seconds, then run this with the phone connected:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;adb shell cmd package compile -m speed-profile -f dev.lelonio.square
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;Run before the app has been opened, the command finds nothing to compile.&lt;/p&gt; 
&lt;/details&gt; 
&lt;h2&gt;First launch&lt;/h2&gt; 
&lt;p&gt;Square first asks where the music should come from. You can change it later in the settings.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;YouTube Music&lt;/strong&gt; plays straight away. Signing in with Google, from the settings, is optional.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Spotify&lt;/strong&gt; needs a Premium account and a few minutes of guided setup: you sign in, then register a free app of your own in Spotify&#39;s developer dashboard and paste its client ID. Search and a few other features go through Spotify&#39;s Web API, which limits requests per app, so with your own app the limit is yours alone. The setup walks you through every step.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;FAQ&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;Square does not appear in Android Auto.&lt;/strong&gt; Android Auto only lists apps installed from the Play Store. Turn on &quot;Unknown sources&quot; in Android Auto&#39;s developer settings and Square shows up.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Can I use a free Spotify account?&lt;/strong&gt; No. A free account can sign in, but Spotify only streams to a client like this one with Premium. YouTube Music works with no account at all.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;YouTube Music search works, but songs do not play.&lt;/strong&gt; YouTube changes how its streams are served every so often. Update to the latest release, which is usually where the fix is.&lt;/p&gt; 
&lt;h2&gt;Disclaimer&lt;/h2&gt; 
&lt;p&gt;Square is not affiliated with, endorsed by or connected to Spotify or Google. Both sources are used on terms they do not offer: Square re-implements Spotify&#39;s protocol, which Spotify&#39;s Terms of Service forbid, and reads YouTube Music through the private endpoints its own web client uses. It cannot be published on the Play Store, and you use it at your own risk. There is no warranty of any kind; see the licence.&lt;/p&gt; 
&lt;h2&gt;Help and feedback&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Telegram community&lt;/strong&gt;: &lt;a href=&quot;https://t.me/+-XDmbFwz7uBkMjc0&quot;&gt;join Square | Community&lt;/a&gt; for questions, feedback, bug reports and feature requests.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Release announcements&lt;/strong&gt;: &lt;a href=&quot;https://t.me/SquareAppOfficial&quot;&gt;Square | Official&lt;/a&gt; automatically shares new APKs and release notes from GitHub.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Questions&lt;/strong&gt; (how something works, how to set it up): &lt;a href=&quot;https://github.com/Lelonio/Square/discussions/categories/q-a&quot;&gt;Discussions, Q&amp;amp;A&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Ideas and requests&lt;/strong&gt;: &lt;a href=&quot;https://github.com/Lelonio/Square/discussions/categories/ideas&quot;&gt;Discussions, Ideas&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Something broken&lt;/strong&gt;: &lt;a href=&quot;https://github.com/Lelonio/Square/issues/new/choose&quot;&gt;open an issue&lt;/a&gt;. If the app closed or froze, attach a report from Settings → About → Save a report.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The same two links are in the app, under Settings → About.&lt;/p&gt; 
&lt;h2&gt;Support&lt;/h2&gt; 
&lt;p&gt;Square is free and has no ads. If it is useful to you, you can support its development on &lt;a href=&quot;https://ko-fi.com/lelonio&quot;&gt;Ko-fi&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Credits&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Project&lt;/th&gt; 
   &lt;th&gt;Licence&lt;/th&gt; 
   &lt;th&gt;How it is used&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/librespot-org/librespot&quot;&gt;librespot&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;MIT&lt;/td&gt; 
   &lt;td&gt;The Spotify engine. &lt;code&gt;librespot-core&lt;/code&gt;, &lt;code&gt;librespot-playback&lt;/code&gt; and &lt;code&gt;librespot-connect&lt;/code&gt; are vendored with local patches.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://developer.spotify.com/documentation/web-playback-sdk&quot;&gt;Spotify Web Playback SDK&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Spotify Developer Terms&lt;/td&gt; 
   &lt;td&gt;Playback for accounts Spotify refuses audio keys, through the listener&#39;s own developer app.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/mostafaalagamy/Metrolist&quot;&gt;Metrolist&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;GPL-3.0&lt;/td&gt; 
   &lt;td&gt;Its InnerTube client, vendored as &lt;a href=&quot;https://raw.githubusercontent.com/Lelonio/Square/master/innertube/&quot;&gt;&lt;code&gt;innertube/&lt;/code&gt;&lt;/a&gt;, because it is published nowhere else. Powers the signed-in YouTube Music library.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/TeamNewPipe/NewPipeExtractor&quot;&gt;NewPipeExtractor&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;GPL-3.0&lt;/td&gt; 
   &lt;td&gt;Anonymous YouTube Music search and stream URLs.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://lossless.wtf&quot;&gt;lossless.wtf&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;n/a&lt;/td&gt; 
   &lt;td&gt;Synced lyrics timed to the word, asked first on both sources.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://lrclib.net&quot;&gt;LrcLib&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;n/a&lt;/td&gt; 
   &lt;td&gt;Synced lyrics for the YouTube Music source, over its open API.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/Spikerko/spicy-lyrics&quot;&gt;Spicy Lyrics&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;AGPL-3.0&lt;/td&gt; 
   &lt;td&gt;The lyrics animation, ported to Compose by &lt;a href=&quot;https://github.com/donutnotnut&quot;&gt;@donutnotnut&lt;/a&gt; in &lt;a href=&quot;https://github.com/Lelonio/Square/discussions/50&quot;&gt;#50&lt;/a&gt;.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/kupix/bungee&quot;&gt;Bungee&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;MPL-2.0&lt;/td&gt; 
   &lt;td&gt;Time stretching, fetched at build time.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/Kyant0/AndroidLiquidGlass&quot;&gt;AndroidLiquidGlass&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Apache-2.0&lt;/td&gt; 
   &lt;td&gt;The glass material; the catalog components are copied with their notice.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://phosphoricons.com&quot;&gt;Phosphor Icons&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;MIT&lt;/td&gt; 
   &lt;td&gt;Every icon in the app.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/sdroege/ebur128&quot;&gt;ebur128&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;MIT&lt;/td&gt; 
   &lt;td&gt;Loudness of local files, so they play at the level of the streamed tracks.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;librespot-java&lt;/td&gt; 
   &lt;td&gt;Apache-2.0&lt;/td&gt; 
   &lt;td&gt;The listening-event format, re-implemented from its &lt;code&gt;EventService&lt;/code&gt; rather than copied.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/devgianlu/go-librespot&quot;&gt;go-librespot&lt;/a&gt; and &lt;a href=&quot;https://github.com/SEKY443/go-librespot-termux&quot;&gt;go-librespot-termux&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;GPL-3.0&lt;/td&gt; 
   &lt;td&gt;The remote sleep timer&#39;s command and state fields, and the check on truncated audio keys, re-implemented from their findings rather than copied.&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Building from source&lt;/h2&gt; 
&lt;p&gt;Requirements, build steps, signing, the architecture and notes on the code are in &lt;a href=&quot;https://raw.githubusercontent.com/Lelonio/Square/master/docs/DEVELOPMENT.md&quot;&gt;docs/DEVELOPMENT.md&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Licence&lt;/h2&gt; 
&lt;p&gt;GPL-3.0-or-later. See &lt;a href=&quot;https://raw.githubusercontent.com/Lelonio/Square/master/LICENSE&quot;&gt;LICENSE&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;The lyrics view, &lt;a href=&quot;https://raw.githubusercontent.com/Lelonio/Square/master/app/src/main/java/dev/lelonio/square/ui/player/LyricsView.kt&quot;&gt;&lt;code&gt;LyricsView.kt&lt;/code&gt;&lt;/a&gt;, is ported from Spicy Lyrics and stays under AGPL-3.0, combined with the rest as section 13 of both licences allows.&lt;/p&gt;</description>
      
      <media:content url="https://repository-images.githubusercontent.com/1325194704/77c3d504-82dd-4626-ad7b-f904f706db10" medium="image" />
      
    </item>
    
    <item>
      <title>android/compose-samples</title>
      <link>https://github.com/android/compose-samples</link>
      <description>&lt;p&gt;Official Jetpack Compose samples.&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://mshibanami.github.io/GitHubTrendingRSS/assets/icons/link.png&quot; width=&quot;20&quot; height=&quot;20&quot; alt=&quot;link&quot; style=&quot;margin: 0 8px 0 0; padding: 0; display: inline-block; vertical-align: middle;&quot; /&gt;&lt;a href=&quot;https://developer.android.com/jetpack/compose&quot;&gt;https://developer.android.com/jetpack/compose&lt;/a&gt;&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Jetpack Compose Samples&lt;/h1&gt; 
&lt;img src=&quot;https://raw.githubusercontent.com/android/compose-samples/main/readme/samples_montage.gif&quot; alt=&quot;Jetpack Compose Samples&quot; width=&quot;824&quot; /&gt; 
&lt;p&gt;This repository contains a set of individual Android Studio projects to help you learn about Compose in Android. Each sample demonstrates different use cases, complexity levels and APIs.&lt;/p&gt; 
&lt;p&gt;For more information, please &lt;a href=&quot;https://developer.android.com/jetpack/compose&quot;&gt;read the documentation&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;💻 Requirements&lt;/h2&gt; 
&lt;p&gt;To try out these sample apps, you need to use &lt;a href=&quot;https://developer.android.com/studio&quot;&gt;Android Studio&lt;/a&gt;. You can clone this repository or import the project from Android Studio following the steps &lt;a href=&quot;https://developer.android.com/jetpack/compose/setup#sample&quot;&gt;here&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;🧬 Samples&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Project&lt;/th&gt; 
   &lt;th&gt;&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;br /&gt;&lt;img src=&quot;https://raw.githubusercontent.com/android/compose-samples/main/readme/jetnews.png&quot; alt=&quot;JetNews&quot; width=&quot;240&quot; /&gt; &lt;br /&gt;&lt;br /&gt; A sample blog post viewer that demonstrates the use of Compose with a typical Material app and real-world architecture. &lt;br /&gt;&lt;br /&gt; • Medium complexity&lt;br /&gt;• Varied UI&lt;br /&gt;• Light &amp;amp; dark themes&lt;br /&gt;• Resource loading&lt;br /&gt;• UI Testing &lt;br /&gt;&lt;br /&gt; &lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/android/compose-samples/main/JetNews/&quot;&gt;&amp;gt; Browse&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/android/compose-samples/main/readme/screenshots/JetNews.png&quot; width=&quot;320&quot; alt=&quot;Jetnews sample demo&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;br /&gt;&lt;img src=&quot;https://raw.githubusercontent.com/android/compose-samples/main/readme/jetchat.png&quot; alt=&quot;Jetchat&quot; width=&quot;240&quot; /&gt; &lt;br /&gt;&lt;br /&gt;A sample chat app that focuses on UI state patterns and text input.&lt;br /&gt;&lt;br /&gt;• Low complexity&lt;br /&gt;• Material Design 3 theme and Material You dynamic color&lt;br /&gt;• Resource loading&lt;br /&gt;• Back button handling&lt;br /&gt;• Integration with Architecture Components: Navigation, Fragments, LiveData, ViewModel&lt;br /&gt;• Animation&lt;br /&gt;• UI Testing&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/android/compose-samples/main/Jetchat/&quot;&gt;&amp;gt; Browse&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/android/compose-samples/main/readme/screenshots/Jetchat.png&quot; width=&quot;320&quot; alt=&quot;Jetchat sample demo&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;br /&gt;&lt;img src=&quot;https://raw.githubusercontent.com/android/compose-samples/main/readme/jetsnack.png&quot; alt=&quot;Jetsnack&quot; width=&quot;240&quot; /&gt; &lt;br /&gt;&lt;br /&gt;Jetsnack is a sample snack ordering app built with Compose.&lt;br /&gt;&lt;br /&gt;• Medium complexity&lt;br /&gt;• Custom design system&lt;br /&gt;• Custom layouts&lt;br /&gt;• Animation&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/android/compose-samples/main/Jetsnack/&quot;&gt;&amp;gt; Browse&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/android/compose-samples/main/readme/screenshots/Jetsnack.png&quot; width=&quot;320&quot; alt=&quot;Jetsnack sample demo&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;br /&gt;&lt;img src=&quot;https://raw.githubusercontent.com/android/compose-samples/main/readme/jetcaster.png&quot; alt=&quot;Jetcaster&quot; width=&quot;240&quot; /&gt; &lt;br /&gt;&lt;br /&gt;A sample podcast app that features a full-featured, Redux-style architecture and showcases dynamic themes.&lt;br /&gt;&lt;br /&gt;• Advanced sample&lt;br /&gt;• Dynamic theming using podcast artwork&lt;br /&gt;• Image fetching&lt;br /&gt;• &lt;a href=&quot;https://developer.android.com/reference/kotlin/android/view/WindowInsets&quot;&gt;&lt;code&gt;WindowInsets&lt;/code&gt;&lt;/a&gt; support&lt;br /&gt;• Coroutines&lt;br /&gt;• Local storage with Room&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/android/compose-samples/main/Jetcaster/&quot;&gt;&amp;gt; Browse&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/android/compose-samples/main/readme/screenshots/Jetcaster.png&quot; width=&quot;320&quot; alt=&quot;Jetcaster sample demo&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;br /&gt;&lt;img src=&quot;https://raw.githubusercontent.com/android/compose-samples/main/readme/reply.png&quot; alt=&quot;Reply&quot; width=&quot;240&quot; /&gt; &lt;br /&gt;&lt;br /&gt;A compose implementation of the Reply material study, an email client app that focuses on adaptive design for mobile, tablets and foldables. It also showcases brand new Material design 3 theming, dynamic colors and navigation components.&lt;br /&gt;&lt;br /&gt;• Medium complexity&lt;br /&gt;• Adaptive UI for phones, tablet and desktops&lt;br /&gt;• Foldable support&lt;br /&gt;• Material 3 theming &amp;amp; Components&lt;br /&gt;• Dynamic colors and Light/Dark theme support&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/android/compose-samples/main/Reply/&quot;&gt;&amp;gt; Browse&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/android/compose-samples/main/readme/screenshots/Reply.png&quot; width=&quot;320&quot; alt=&quot;Reply sample demo&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;br /&gt;&lt;img src=&quot;https://raw.githubusercontent.com/android/compose-samples/main/readme/jetlagged_heading.png&quot; alt=&quot;JetLagged&quot; width=&quot;240&quot; /&gt; &lt;br /&gt;&lt;br /&gt;A sample sleep tracker app, showcasing how to create custom layouts and graphics in Compose&lt;br /&gt;&lt;br /&gt;• Custom Layouts&lt;br /&gt;• Graphs with Paths&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/android/compose-samples/main/JetLagged/&quot;&gt;&amp;gt; Browse&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/android/compose-samples/main/JetLagged/screenshots/JetLagged_Full.png&quot; width=&quot;320&quot; alt=&quot;JetLagged sample demo&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;🧬 Additional samples&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Project&lt;/th&gt; 
   &lt;th&gt;&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;br /&gt;&lt;img src=&quot;https://raw.githubusercontent.com/android/compose-samples/main/readme/nia.png&quot; alt=&quot;Now in Android&quot; width=&quot;240&quot; /&gt; &lt;br /&gt;&lt;br /&gt;An app for keeping up to date with the latest news and developments in Android.&lt;br /&gt;&lt;br /&gt;• &lt;a href=&quot;https://developer.android.com/jetpack/compose&quot;&gt;Jetpack Compose&lt;/a&gt; first app.&lt;br /&gt;• Implements the recommended Android &lt;a href=&quot;https://developer.android.com/topic/architecture&quot;&gt;Architecture Guidelines&lt;/a&gt; &lt;br /&gt;• Integrates &lt;a href=&quot;https://developer.android.com/jetpack&quot;&gt;Jetpack Libraries&lt;/a&gt; holistically in the context of a real world app&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.google.samples.apps.nowinandroid&quot;&gt;&lt;img src=&quot;https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png&quot; height=&quot;70&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/android/nowinandroid&quot;&gt;&amp;gt; Browse&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/android/compose-samples/main/readme/screenshots/NiA.png&quot; width=&quot;320&quot; alt=&quot;Now In Android Github Repository&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;br /&gt;&lt;img src=&quot;https://raw.githubusercontent.com/android/compose-samples/main/readme/material_catalog.png&quot; alt=&quot;Material Catalog&quot; width=&quot;240&quot; /&gt; &lt;br /&gt;&lt;br /&gt;A catalog of Material Design components and features available in Jetpack Compose. See how to implement them and how they look and behave on real devices.&lt;br /&gt;&lt;br /&gt;• Lives in AOSP—always up to date&lt;br /&gt;• Uses the same samples as API reference docs&lt;br /&gt;• Theme picker to change Material Theming values at runtime&lt;br /&gt;• Links to guidelines, docs, source code, and issue tracker&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=androidx.compose.material.catalog&quot;&gt;&lt;img src=&quot;https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png&quot; height=&quot;70&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;&lt;a href=&quot;https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/integration-tests/material-catalog&quot;&gt;&amp;gt; Browse on AOSP&lt;/a&gt;&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/android/compose-samples/main/readme/screenshots/Material_Catalog.png&quot; width=&quot;320&quot; alt=&quot;Material Catalog sample demo&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;High level features&lt;/h2&gt; 
&lt;p&gt;Looking for a sample that has the following features?&lt;/p&gt; 
&lt;h3&gt;Custom Layouts&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/android/compose-samples/raw/ee198110d8a7575da281de9bd0f84e91970468ca/JetNews/app/src/main/java/com/example/jetnews/ui/interests/InterestsScreen.kt#L428&quot;&gt;Jetnews: Interests Screen&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/android/compose-samples/raw/ee198110d8a7575da281de9bd0f84e91970468ca/Jetchat/app/src/main/java/com/example/compose/jetchat/components/AnimatingFabContent.kt#L101&quot;&gt;Jetchat: AnimatedFabContent&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/android/compose-samples/raw/73d7f25815e6936e0e815ce975905a6f10744c36/Jetsnack/app/src/main/java/com/example/jetsnack/ui/components/Grid.kt#L27&quot;&gt;Jetsnack: Grid&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/android/compose-samples/raw/main/Jetsnack/app/src/main/java/com/example/jetsnack/ui/snackdetail/SnackDetail.kt&quot;&gt;Jetsnack: CollapsingImageLayout&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Theming&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/android/compose-samples/raw/main/Jetchat/app/src/main/java/com/example/compose/jetchat/theme/Themes.kt#L91&quot;&gt;Jetchat: Material3&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/android/compose-samples/raw/main/Jetcaster/app/src/main/java/com/example/jetcaster/util/DynamicTheming.kt&quot;&gt;Jetcaster: Custom theme based on cover art&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/android/compose-samples/raw/main/Jetsnack/app/src/main/java/com/example/jetsnack/ui/theme/Theme.kt&quot;&gt;Jetsnack: Custom Design System&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Animations&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/android/compose-samples/pull/842&quot;&gt;Jetsurvey: AnimatedContent&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/android/compose-samples/raw/69e9d862b5ffb321064364d7883e859db6daeccd/Jetcaster/app/src/main/java/com/example/jetcaster/util/DynamicTheming.kt&quot;&gt;Jetcaster: Animated theme colors&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/android/compose-samples/raw/main/Jetsnack/app/src/main/java/com/example/jetsnack/ui/home/Home.kt&quot;&gt;Jetsnack: Animating Bottom Barl&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Text&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/android/compose-samples/pull/787&quot;&gt;Jetchat: Downloadable Fonts&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Large Screens&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/android/compose-samples/raw/3dbbf0912b57dacefcfb79191a2d7d6b053dadb8/Jetcaster/app/src/main/java/com/example/jetcaster/ui/home/Home.kt#L282&quot;&gt;Jetcaster - Supporting Pane&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/android/compose-samples/raw/69e9d862b5ffb321064364d7883e859db6daeccd/JetNews/app/src/main/java/com/example/jetnews/ui/MainActivity.kt#L36&quot;&gt;Jetnews - Window Size Classes&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;TV&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/android/compose-samples/tree/3dbbf0912b57dacefcfb79191a2d7d6b053dadb8/Jetcaster/tv-app&quot;&gt;Jetcaster - TV&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Wear&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/android/compose-samples/tree/3dbbf0912b57dacefcfb79191a2d7d6b053dadb8/Jetcaster/wear&quot;&gt;Jetcaster - Wear&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Formatting&lt;/h2&gt; 
&lt;p&gt;To automatically format all samples: Run &lt;code&gt;./scripts/format.sh&lt;/code&gt; To check one sample for errors: Navigate to the sample folder and run &lt;code&gt;./gradlew spotlessCheck&lt;/code&gt; To format one sample: Navigate to the sample folder and run &lt;code&gt;./gradlew spotlessApply&lt;/code&gt;&lt;/p&gt; 
&lt;h2&gt;Updates&lt;/h2&gt; 
&lt;p&gt;To update dependencies to their new stable versions, run:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;./scripts/updateDeps.sh
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Any other version updates need to be made individually.&lt;/p&gt; 
&lt;h2&gt;Obsolete Sample Projects&lt;/h2&gt; 
&lt;p&gt;Over time some of our samples become a little stale and are removed to keep the repository easy to navigate. If you are curious you can still find them in the history, however if you are new you might be better served sticking to the most up to date resources.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Project&lt;/th&gt; 
   &lt;th&gt;Removed&lt;/th&gt; 
   &lt;th&gt;Commit&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/android/tree/v2024.05.00/Crane&quot;&gt;Crane&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;2024-08-02&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/android/commit/ee8e27289f4bc36304ee9f04397f49c35f402a65&quot;&gt;ee8e272&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/android/tree/v2024.05.00/Owl&quot;&gt;Owl&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;2024-08-02&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/android/commit/ee8e27289f4bc36304ee9f04397f49c35f402a65&quot;&gt;ee8e272&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/android/tree/v2024.05.00/Jetsurvey&quot;&gt;Jetsurvey&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;2024-08-02&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/android/commit/ee8e27289f4bc36304ee9f04397f49c35f402a65&quot;&gt;ee8e272&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/android/tree/v2024.05.00/Rally&quot;&gt;Rally&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;2024-08-02&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/android/commit/ee8e27289f4bc36304ee9f04397f49c35f402a65&quot;&gt;ee8e272&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;pre&gt;&lt;code&gt;Copyright 2024 The Android Open Source Project

Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an &quot;AS IS&quot; BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
&lt;/code&gt;&lt;/pre&gt;</description>
      
      <media:content url="https://repository-images.githubusercontent.com/211288349/3d36941e-59e7-4d77-87c1-806b08f4cc28" medium="image" />
      
    </item>
    
    <item>
      <title>software-mansion/enriched-markdown</title>
      <link>https://github.com/software-mansion/enriched-markdown</link>
      <description>&lt;p&gt;Multiplatform Markdown-Based Rich Text Solution&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://mshibanami.github.io/GitHubTrendingRSS/assets/icons/link.png&quot; width=&quot;20&quot; height=&quot;20&quot; alt=&quot;link&quot; style=&quot;margin: 0 8px 0 0; padding: 0; display: inline-block; vertical-align: middle;&quot; /&gt;&lt;a href=&quot;https://enriched.swmansion.com/markdown&quot;&gt;https://enriched.swmansion.com/markdown&lt;/a&gt;&lt;/p&gt;&lt;hr&gt;&lt;picture&gt; 
 &lt;source media=&quot;(prefers-color-scheme: dark)&quot; srcset=&quot;https://github.com/user-attachments/assets/38c4b0b7-4e2c-453a-bdd5-38d37dd6da46&quot; /&gt; 
 &lt;source media=&quot;(prefers-color-scheme: light)&quot; srcset=&quot;https://github.com/user-attachments/assets/8793fe2a-b1a8-4bce-b2c3-26756899bd45&quot; /&gt; 
 &lt;img alt=&quot;Enriched Markdown by Software Mansion&quot; src=&quot;https://github.com/user-attachments/assets/38c4b0b7-4e2c-453a-bdd5-38d37dd6da46&quot; /&gt; 
&lt;/picture&gt; 
&lt;p&gt;A multi-platform SDK for rendering Markdown as native text and editing rich text with Markdown output. Ships as a React Native library with iOS, Android, macOS, and Web support, plus standalone native SDKs for iOS (Swift) and Android (Kotlin).&lt;/p&gt; 
&lt;h2&gt;Features&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Native text rendering&lt;/strong&gt; — High-performance Markdown rendering built on platform text APIs (no WebView)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Rich text input&lt;/strong&gt; — Text input with Markdown output, inline formatting, headings, lists, links, and mentions&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Cross-platform&lt;/strong&gt; — Consistent API across React Native (TypeScript), iOS (Swift), and Android (Kotlin)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;CommonMark &amp;amp; GFM&lt;/strong&gt; — Full CommonMark compliance with GitHub Flavored Markdown extensions (tables, task lists, strikethrough)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;LaTeX math&lt;/strong&gt; — Block and inline math rendering powered by &lt;a href=&quot;https://ratex.lites.dev/&quot;&gt;RaTeX&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Markdown streaming&lt;/strong&gt; — Real-time streaming support for AI/LLM chat interfaces&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Code syntax highlighting&lt;/strong&gt; — Native syntax highlighting powered by &lt;a href=&quot;https://tree-sitter.github.io/tree-sitter/&quot;&gt;tree-sitter&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Accessibility&lt;/strong&gt; — VoiceOver on iOS, TalkBack on Android, semantic HTML on web&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;See the &lt;a href=&quot;https://enriched.swmansion.com/markdown/#compatibility&quot;&gt;feature comparison table&lt;/a&gt; for a detailed breakdown of supported features per platform.&lt;/p&gt; 
&lt;h2&gt;Packages&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Platform&lt;/th&gt; 
   &lt;th&gt;Package&lt;/th&gt; 
   &lt;th&gt;README&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;React Native&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://www.npmjs.com/package/react-native-enriched-markdown&quot;&gt;&lt;img src=&quot;https://img.shields.io/npm/v/react-native-enriched-markdown&quot; alt=&quot;npm&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/software-mansion/enriched-markdown/main/packages/react-native-enriched-markdown/README.md&quot;&gt;React Native&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Android&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://central.sonatype.com/artifact/com.swmansion.enriched.markdown/ui&quot;&gt;&lt;img src=&quot;https://img.shields.io/maven-central/v/com.swmansion.enriched.markdown/ui&quot; alt=&quot;Maven Central&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/software-mansion/enriched-markdown/main/packages/enriched-markdown-android/README.md&quot;&gt;Android&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;iOS&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/software-mansion-labs/enriched-markdown-ios&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/v/tag/software-mansion-labs/enriched-markdown-ios?label=swift%20package&quot; alt=&quot;swift package&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/software-mansion/enriched-markdown/main/packages/enriched-markdown-ios/README.md&quot;&gt;iOS&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Quick start&lt;/h2&gt; 
&lt;h3&gt;React Native&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;yarn add react-native-enriched-markdown
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code class=&quot;language-tsx&quot;&gt;import { EnrichedMarkdownText } from &#39;react-native-enriched-markdown&#39;;
import { Linking } from &#39;react-native&#39;;

&amp;lt;EnrichedMarkdownText
  markdown={&quot;# Hello\n\nThis is **enriched** [markdown](https://commonmark.org).&quot;}
  onLinkPress={({ url }) =&amp;gt; Linking.openURL(url)}
/&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Android&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;dependencies {
  implementation(&quot;com.swmansion.enriched.markdown:compose:0.2.0&quot;)
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code class=&quot;language-kotlin&quot;&gt;import com.swmansion.enriched.markdown.compose.EnrichedMarkdownText

EnrichedMarkdownText(
  markdown = &quot;# Hello\n\nThis is **enriched** [markdown](https://commonmark.org).&quot;,
  onLinkClick = { url -&amp;gt; /* open url */ },
)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;iOS&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-swift&quot;&gt;dependencies: [
  .package(
    url: &quot;https://github.com/software-mansion-labs/enriched-markdown-ios.git&quot;,
    from: &quot;0.1.0&quot;
  ),
]
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code class=&quot;language-swift&quot;&gt;import EnrichedMarkdown
import SwiftUI

EnrichedMarkdownText(&quot;# Hello\n\nThis is **enriched** [markdown](https://commonmark.org).&quot;)
  .onLinkPress { url in
    UIApplication.shared.open(url)
  }
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;See the &lt;a href=&quot;https://raw.githubusercontent.com/software-mansion/enriched-markdown/main/CONTRIBUTING.md&quot;&gt;contributing guide&lt;/a&gt; to learn how to contribute to the repository and the development workflow.&lt;/p&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;Enriched Markdown is licensed under &lt;a href=&quot;https://raw.githubusercontent.com/software-mansion/enriched-markdown/main/LICENSE&quot;&gt;The MIT License&lt;/a&gt;.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;p&gt;Built by &lt;a href=&quot;https://swmansion.com/&quot;&gt;Software Mansion&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://swmansion.com/&quot;&gt;&lt;img width=&quot;128&quot; height=&quot;69&quot; alt=&quot;Software Mansion Logo&quot; src=&quot;https://github.com/user-attachments/assets/f0e18471-a7aa-4e80-86ac-87686a86fe56&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/61b4e7a08d9354eb0238ec6268de10e90dbb6f4a3a96d4e280ab5d067943c0b8/software-mansion/enriched-markdown" medium="image" />
      
    </item>
    
    <item>
      <title>alex193a/Root-My-Pixel</title>
      <link>https://github.com/alex193a/Root-My-Pixel</link>
      <description>&lt;p&gt;Jailbreak supported Google Pixel phones with CVE-2026-43499&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Root My Pixel&lt;/h1&gt; 
&lt;p&gt;&lt;strong&gt;Root My Pixel&lt;/strong&gt; is an Android application designed to automate root access on &lt;strong&gt;Google Pixel&lt;/strong&gt; devices leveraging the &lt;strong&gt;NebuSec IonStack&lt;/strong&gt; exploit (CVE-2026-43499) and integrating &lt;strong&gt;ReSukiSU / KernelSU&lt;/strong&gt;.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;How the Application Works&lt;/h2&gt; 
&lt;p&gt;Root My Pixel lets you &lt;em&gt;temporarily&lt;/em&gt; gain root access with ReSukiSU in just one tap.&lt;/p&gt; 
&lt;h3&gt;Installation Workflow&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Device Detection &amp;amp; Profiling&lt;/strong&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;At startup, the app uses native JNI (&lt;code&gt;NativeProbe&lt;/code&gt;), &lt;code&gt;/proc/version&lt;/code&gt; queries, and system properties to detect the device codename, kernel version, CPU ABI, memory page size, and build display ID.&lt;/li&gt; 
   &lt;li&gt;Via &lt;code&gt;ResolveTargetUseCase&lt;/code&gt;, it matches the device details against supported target profiles defined in &lt;code&gt;assets/profiles.json&lt;/code&gt;.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Shizuku Integration&lt;/strong&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;The app uses &lt;strong&gt;Shizuku&lt;/strong&gt; (UID 2000) to acquire ADB shell privileges without needing initial root access, which is required to stage and execute payload binaries in &lt;code&gt;/data/local/tmp&lt;/code&gt;.&lt;/li&gt; 
   &lt;li&gt;A managed &lt;code&gt;ExploitService&lt;/code&gt; is bound via Binder IPC to stream exploit execution logs to the UI in real time.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Exploit Payload Extraction &amp;amp; Execution&lt;/strong&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;Precompiled binary payloads (&lt;code&gt;.so&lt;/code&gt;) corresponding to each supported build and the native helper tool (&lt;code&gt;libcve43499root.so&lt;/code&gt;) are extracted from APK assets to &lt;code&gt;/data/local/tmp&lt;/code&gt;.&lt;/li&gt; 
   &lt;li&gt;The IonStack exploit (CVE-2026-43499) is executed to establish a local root daemon socket (&lt;code&gt;temp_su.sock&lt;/code&gt;), acquiring full &lt;code&gt;root&lt;/code&gt; privileges.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;KernelSU / ReSukiSU Integration&lt;/strong&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;Staging of the &lt;code&gt;ksud&lt;/code&gt; binary matching the device&#39;s Kernel Module Interface (KMI, e.g., &lt;code&gt;android15-6.6&lt;/code&gt;).&lt;/li&gt; 
   &lt;li&gt;The app triggers the KernelSU &lt;strong&gt;late-load&lt;/strong&gt; mechanism (&lt;code&gt;ksud late-load --kmi &amp;lt;kmi&amp;gt;&lt;/code&gt;).&lt;/li&gt; 
   &lt;li&gt;Verifies KernelSU through its UAPI, with &lt;code&gt;ksud debug info&lt;/code&gt; and &lt;code&gt;/proc/modules&lt;/code&gt; as compatibility fallbacks.&lt;/li&gt; 
   &lt;li&gt;Registers the installed ReSukiSU Manager only after validating its production APK signature.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;User Interface &amp;amp; Management Tools&lt;/strong&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;Real-time live log progress monitoring.&lt;/li&gt; 
   &lt;li&gt;Handy actions for &lt;strong&gt;Soft Reboot&lt;/strong&gt; (restarting &lt;code&gt;system_server&lt;/code&gt;) and &lt;strong&gt;Log Exporting&lt;/strong&gt; for debugging purposes.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Supported Devices &amp;amp; Build Profiles&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Device&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Codename&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Supported Builds&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Kernel KMI&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Tested&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Pixel 11&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;cubs&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;CD1A.260618.001.C2&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;android16-6.12&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Pixel 11 Pro&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;grizzly&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;CD1A.260618.001.C2&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;android16-6.12&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Pixel 11 Pro XL&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;kodiak&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;CD1A.260618.001.C2&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;android16-6.12&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Pixel 11 Pro Fold&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;yogi&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;CD1A.260618.001.C3&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;android16-6.12&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Pixel 10&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;frankel&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;CP2A.260705.006&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;android15-6.6&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Pixel 10 Pro&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;blazer&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;CP2A.260705.006&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;android15-6.6&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Pixel 10 Pro XL&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;mustang&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;CP2A.260705.006&lt;/code&gt;&lt;br /&gt;&lt;code&gt;CP2A.260805.005&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;android15-6.6&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Pixel 10 Pro Fold&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;rango&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;CP2A.260705.006&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;android15-6.6&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Pixel 10a&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;stallion&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;CP2A.260705.006&lt;/code&gt;&lt;br /&gt;&lt;code&gt;CP2A.260805.005&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;android14-6.1&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Pixel 9 Pro Fold&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;comet&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;CP2A.260705.006&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;android15-6.1&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Pixel 9 Pro&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;caiman&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;CP2A.260705.006&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;android15-6.1&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Pixel 9 Pro XL&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;komodo&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;CP2A.260705.006&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;android15-6.1&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Pixel 9&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;tokay&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;CP2A.260705.006&lt;/code&gt;&lt;br /&gt;&lt;code&gt;AD1A.240905.004&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;android14-6.1&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Pixel 9a&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;tegu&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;CP2A.260705.006&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;android14-6.1&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Pixel 8 Pro&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;husky&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;CP2A.260705.006&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;android14-6.1&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Pixel 8&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;shiba&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;CP2A.260705.006&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;android14-6.1&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Pixel 8a&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;akita&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;CP2A.260805.005&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;android14-6.1&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Pixel 7a&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;lynx&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;CP2A.260705.006&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;android14-6.1&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Pixel 7 Pro&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;cheetah&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;CP2A.260705.006&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;android14-6.1&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Pixel 7&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;panther&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;CP2A.260705.006&lt;/code&gt;&lt;br /&gt;&lt;code&gt;BP2A.250705.008&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;android14-6.1&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Pixel 6a&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;bluejay&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;CP2A.260705.006&lt;/code&gt;&lt;br /&gt;&lt;code&gt;CP1A.260405.005&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;android14-6.1&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Pixel 6&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;oriole&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;CP2A.260705.006&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;android14-6.1&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Pixel 6 Pro&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;raven&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;CP2A.260705.006&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;android14-6.1&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Pixel Fold&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;felix&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;CP2A.260605.012&lt;/code&gt;&lt;br /&gt;&lt;code&gt;CP2A.260705.006&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;android14-6.1&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Pixel Tablet&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;tangorpro&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;BP1A.250405.007&lt;/code&gt;&lt;br /&gt;&lt;code&gt;CP2A.260705.006&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;android14-6.1&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;✅&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Prerequisites&lt;/h2&gt; 
&lt;ol&gt; 
 &lt;li&gt;A supported Google Pixel device listed in the table above.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Shizuku&lt;/strong&gt; installed and running via ADB (&lt;code&gt;adb shell sh /sdcard/Android/data/rikka.shizuku/starter.sh&lt;/code&gt; or Wireless Debugging).&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;ReSukiSU Manager&lt;/strong&gt; installed on the device to manage root permissions granted to apps.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Building from Source&lt;/h2&gt; 
&lt;p&gt;To compile the entire project (native helper, exploit payloads for all targets, and the final debug APK):&lt;/p&gt; 
&lt;h3&gt;Build Requirements&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Android NDK r25+ (&lt;code&gt;ANDROID_NDK_HOME&lt;/code&gt; set or present in Android SDK)&lt;/li&gt; 
 &lt;li&gt;macOS (arm64/x86_64) or Linux (x86_64) host&lt;/li&gt; 
 &lt;li&gt;Java 17+ and Gradle Wrapper&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Build Command&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./build-all.sh
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The compiled APK will be generated at: &lt;code&gt;app/build/outputs/apk/debug/app-debug.apk&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;To install it on a connected device via ADB:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;adb install -r app/build/outputs/apk/debug/app-debug.apk
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;⚠️ Keep in mind that the exploit does not have a 100% success rate. Many users have had to try more than 20 times. Many report higher success by opening the app immediately after a reboot, while others find better results 10–40 minutes after rebooting.&lt;/p&gt; 
&lt;p&gt;🚨 If you root your phone, you might run into trouble making payments with Google Wallet and using RCS messages. Once you unroot, you&#39;ll have to wait a couple of days before everything works properly again.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Credits&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Exploit: &lt;a href=&quot;https://github.com/NebuSec/CyberMeowfia&quot;&gt;NebuSec IonStack&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;App architecture: Inspired and adapted from &lt;a href=&quot;https://github.com/BuSung-dev/Root-My-Galaxy&quot;&gt;Root My Galaxy&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;ReSukiSU (&lt;a href=&quot;https://github.com/ReSukiSU/ReSukiSU&quot;&gt;https://github.com/ReSukiSU/ReSukiSU&lt;/a&gt;)&lt;/li&gt; 
&lt;/ul&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/759916b69412178e1d3a2ecc4aca91f4abfdde522160ff418abfa9fbbdd69302/alex193a/Root-My-Pixel" medium="image" />
      
    </item>
    
    <item>
      <title>JunkFood02/Seal</title>
      <link>https://github.com/JunkFood02/Seal</link>
      <description>&lt;p&gt;🦭 Video/Audio Downloader for Android, based on yt-dlp&lt;/p&gt;&lt;hr&gt;&lt;div align=&quot;center&quot;&gt; 
 &lt;img width=&quot;160&quot; src=&quot;https://raw.githubusercontent.com/JunkFood02/Seal/main/fastlane/metadata/android/en-US/images/icon.png&quot; height=&quot;160&quot; align=&quot;center&quot; /&gt; 
 &lt;h1&gt;Seal&lt;/h1&gt; 
 &lt;h3&gt;Video/Audio Downloader for Android&lt;/h3&gt; 
 &lt;p&gt;English &amp;nbsp;&amp;nbsp;| &amp;nbsp;&amp;nbsp; &lt;a href=&quot;https://github.com/JunkFood02/Seal/raw/main/translations/README-zh_Hans.md&quot;&gt;简体中文&lt;/a&gt; &amp;nbsp;&amp;nbsp;| &amp;nbsp;&amp;nbsp; &lt;a href=&quot;https://github.com/JunkFood02/Seal/raw/main/translations/README-zh_Hant.md&quot;&gt;繁體中文&lt;/a&gt; &amp;nbsp;&amp;nbsp;| &amp;nbsp;&amp;nbsp; &lt;a href=&quot;https://github.com/JunkFood02/Seal/raw/main/translations/README-ar.md&quot;&gt;العربية&lt;/a&gt; &amp;nbsp;&amp;nbsp;| &amp;nbsp;&amp;nbsp; &lt;a href=&quot;https://github.com/JunkFood02/Seal/raw/main/translations/README-pt.md&quot;&gt;Portuguese&lt;/a&gt; &amp;nbsp;&amp;nbsp;| &amp;nbsp;&amp;nbsp; &lt;a href=&quot;https://github.com/JunkFood02/Seal/raw/main/translations/README-ua.md&quot;&gt;Українська&lt;/a&gt; &amp;nbsp;&amp;nbsp;| &amp;nbsp;&amp;nbsp; &lt;a href=&quot;https://github.com/JunkFood02/Seal/raw/main/translations/README-th.md&quot;&gt;ภาษาไทย&lt;/a&gt; &amp;nbsp;&amp;nbsp;| &amp;nbsp;&amp;nbsp; &lt;a href=&quot;https://github.com/JunkFood02/Seal/raw/main/translations/README-fa.md&quot;&gt;فارسی&lt;/a&gt; &amp;nbsp;&amp;nbsp;| &amp;nbsp;&amp;nbsp; &lt;a href=&quot;https://github.com/JunkFood02/Seal/raw/main/translations/README-it.md&quot;&gt;Italiano&lt;/a&gt; &amp;nbsp;&amp;nbsp;| &amp;nbsp;&amp;nbsp; &lt;a href=&quot;https://github.com/JunkFood02/Seal/raw/main/translations/README-az.md&quot;&gt;Azərbaycanca&lt;/a&gt; &amp;nbsp;&amp;nbsp;| &amp;nbsp;&amp;nbsp; &lt;a href=&quot;https://github.com/JunkFood02/Seal/raw/main/translations/README-ru.md&quot;&gt;Русский&lt;/a&gt; &amp;nbsp;&amp;nbsp;| &amp;nbsp;&amp;nbsp; &lt;a href=&quot;https://github.com/JunkFood02/Seal/raw/main/translations/README-sr.md&quot;&gt;Српски&lt;/a&gt; &amp;nbsp;&amp;nbsp;| &amp;nbsp;&amp;nbsp; &lt;a href=&quot;https://github.com/JunkFood02/Seal/raw/main/translations/README-ja.md&quot;&gt;日本語&lt;/a&gt; &amp;nbsp;&amp;nbsp;| &amp;nbsp;&amp;nbsp; &lt;a href=&quot;https://github.com/JunkFood02/Seal/raw/main/translations/README-id.md&quot;&gt;Indonesia&lt;/a&gt; &amp;nbsp;&amp;nbsp;| &amp;nbsp;&amp;nbsp; &lt;a href=&quot;https://github.com/JunkFood02/Seal/raw/main/translations/README-hi.md&quot;&gt;हिंदी&lt;/a&gt; &amp;nbsp;&amp;nbsp;| &amp;nbsp;&amp;nbsp; &lt;a href=&quot;https://github.com/JunkFood02/Seal/raw/main/translations/README-bn.md&quot;&gt;বাংলা&lt;/a&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;a href=&quot;https://f-droid.org/en/packages/com.junkfood.seal&quot;&gt;&lt;img src=&quot;https://img.shields.io/f-droid/v/com.junkfood.seal?color=b4eb12&amp;amp;label=F-Droid&amp;amp;logo=fdroid&amp;amp;logoColor=1f78d2&quot; alt=&quot;F-Droid&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/JunkFood02/Seal/releases/latest/&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/v/release/JunkFood02/Seal?color=black&amp;amp;label=Stable&amp;amp;logo=github&quot; alt=&quot;GitHub release (latest by date)&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/JunkFood02/Seal/releases/&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/v/release/JunkFood02/Seal?include_prereleases&amp;amp;label=Preview&amp;amp;logo=Github&quot; alt=&quot;GitHub release (latest by date including pre-releases)&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/JunkFood02/Seal/raw/main/CHANGELOG.md&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Changelog-lightgray?style=flat&amp;amp;color=gray&amp;amp;logo=keep-a-changelog&quot; alt=&quot;Keep a Changelog&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/JunkFood02/Seal/releases/&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/downloads/JunkFood02/Seal/total?label=Downloads&amp;amp;logo=github&quot; alt=&quot;GitHub all releases&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/JunkFood02/Seal/stargazers&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/stars/JunkFood02/Seal?style=flat&amp;amp;logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIC05NjAgOTYwIDk2MCIgd2lkdGg9IjI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxwYXRoIGQ9Im0zNTQtMjQ3IDEyNi03NiAxMjYgNzctMzMtMTQ0IDExMS05Ni0xNDYtMTMtNTgtMTM2LTU4IDEzNS0xNDYgMTMgMTExIDk3LTMzIDE0M1pNMjMzLTgwbDY1LTI4MUw4MC01NTBsMjg4LTI1IDExMi0yNjUgMTEyIDI2NSAyODggMjUtMjE4IDE4OSA2NSAyODEtMjQ3LTE0OUwyMzMtODBabTI0Ny0zNTBaIiBzdHlsZT0iZmlsbDogcmdiKDI0NSwgMjI3LCA2Nik7Ii8%2BCjwvc3ZnPg%3D%3D&amp;amp;color=%23f8e444&quot; alt=&quot;GitHub Repo stars&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/yt-dlp/yt-dlp/raw/master/supportedsites.md&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Sites-9cf?style=flat&amp;amp;logo=data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0cHgiIGZpbGw9IiNGRkZGRkYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPHBhdGggZD0iTTAgMGgyNHYyNEgwVjB6IiBmaWxsPSJub25lIi8+CiAgPHBhdGggZD0iTTExLjk5IDJDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6bTYuOTMgNmgtMi45NWMtLjMyLTEuMjUtLjc4LTIuNDUtMS4zOC0zLjU2IDEuODQuNjMgMy4zNyAxLjkxIDQuMzMgMy41NnpNMTIgNC4wNGMuODMgMS4yIDEuNDggMi41MyAxLjkxIDMuOTZoLTMuODJjLjQzLTEuNDMgMS4wOC0yLjc2IDEuOTEtMy45NnpNNC4yNiAxNEM0LjEgMTMuMzYgNCAxMi42OSA0IDEycy4xLTEuMzYuMjYtMmgzLjM4Yy0uMDguNjYtLjE0IDEuMzItLjE0IDJzLjA2IDEuMzQuMTQgMkg0LjI2em0uODIgMmgyLjk1Yy4zMiAxLjI1Ljc4IDIuNDUgMS4zOCAzLjU2LTEuODQtLjYzLTMuMzctMS45LTQuMzMtMy41NnptMi45NS04SDUuMDhjLjk2LTEuNjYgMi40OS0yLjkzIDQuMzMtMy41NkM4LjgxIDUuNTUgOC4zNSA2Ljc1IDguMDMgOHpNMTIgMTkuOTZjLS44My0xLjItMS40OC0yLjUzLTEuOTEtMy45NmgzLjgyYy0uNDMgMS40My0xLjA4IDIuNzYtMS45MSAzLjk2ek0xNC4zNCAxNEg5LjY2Yy0uMDktLjY2LS4xNi0xLjMyLS4xNi0ycy4wNy0xLjM1LjE2LTJoNC42OGMuMDkuNjUuMTYgMS4zMi4xNiAycy0uMDcgMS4zNC0uMTYgMnptLjI1IDUuNTZjLjYtMS4xMSAxLjA2LTIuMzEgMS4zOC0zLjU2aDIuOTVjLS45NiAxLjY1LTIuNDkgMi45My00LjMzIDMuNTZ6TTE2LjM2IDE0Yy4wOC0uNjYuMTQtMS4zMi4xNC0ycy0uMDYtMS4zNC0uMTQtMmgzLjM4Yy4xNi42NC4yNiAxLjMxLjI2IDJzLS4xIDEuMzYtLjI2IDJoLTMuMzh6IiBzdHlsZT0iZmlsbDogcmdiKDE2MiwgMTk4LCAyMzQpOyIvPgo8L3N2Zz4=&amp;amp;label=Supported&quot; alt=&quot;Supported-Sites&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://t.me/seal_app&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Telegram-Seal-blue?style=flat&amp;amp;logo=telegram&quot; alt=&quot;Telegram Channel&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://matrix.to/#/%23seal-space:matrix.org&quot;&gt;&lt;img src=&quot;https://img.shields.io/matrix/seal-space%3Amatrix.org?server_fqdn=matrix.org&amp;amp;style=flat&amp;amp;logo=element&amp;amp;label=Matrix&amp;amp;color=%230DBD8B&quot; alt=&quot;Matrix&quot; /&gt; &lt;/a&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;h2&gt;📱 Screenshots&lt;/h2&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;div&gt; 
  &lt;img src=&quot;https://raw.githubusercontent.com/JunkFood02/Seal/main/fastlane/metadata/android/en-US/images/phoneScreenshots/1.jpg&quot; width=&quot;30%&quot; /&gt; 
  &lt;img src=&quot;https://raw.githubusercontent.com/JunkFood02/Seal/main/fastlane/metadata/android/en-US/images/phoneScreenshots/2.jpg&quot; width=&quot;30%&quot; /&gt; 
  &lt;img src=&quot;https://raw.githubusercontent.com/JunkFood02/Seal/main/fastlane/metadata/android/en-US/images/phoneScreenshots/3.jpg&quot; width=&quot;30%&quot; /&gt; 
  &lt;img src=&quot;https://raw.githubusercontent.com/JunkFood02/Seal/main/fastlane/metadata/android/en-US/images/phoneScreenshots/4.jpg&quot; width=&quot;30%&quot; /&gt; 
  &lt;img src=&quot;https://raw.githubusercontent.com/JunkFood02/Seal/main/fastlane/metadata/android/en-US/images/phoneScreenshots/5.jpg&quot; width=&quot;30%&quot; /&gt; 
  &lt;img src=&quot;https://raw.githubusercontent.com/JunkFood02/Seal/main/fastlane/metadata/android/en-US/images/phoneScreenshots/6.jpg&quot; width=&quot;30%&quot; /&gt; 
  &lt;img src=&quot;https://raw.githubusercontent.com/JunkFood02/Seal/main/fastlane/metadata/android/en-US/images/phoneScreenshots/7.jpg&quot; width=&quot;30%&quot; /&gt; 
  &lt;img src=&quot;https://raw.githubusercontent.com/JunkFood02/Seal/main/fastlane/metadata/android/en-US/images/phoneScreenshots/8.jpg&quot; width=&quot;30%&quot; /&gt; 
  &lt;img src=&quot;https://raw.githubusercontent.com/JunkFood02/Seal/main/fastlane/metadata/android/en-US/images/phoneScreenshots/9.jpg&quot; width=&quot;30%&quot; /&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;br /&gt; 
&lt;h2&gt;📖 Features&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;Download videos and audio files from video platforms supported by &lt;a href=&quot;https://github.com/yt-dlp/yt-dlp&quot;&gt;yt-dlp&lt;/a&gt; (formerly youtube-dl).&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Embed metadata and video thumbnail into extracted audio files supported by &lt;a href=&quot;https://github.com/quodlibet/mutagen&quot;&gt;mutagen&lt;/a&gt;.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Download all videos in the playlist with one click.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Use embedded &lt;a href=&quot;https://github.com/aria2/aria2&quot;&gt;aria2c&lt;/a&gt; as external downloader for all your downloads.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Embed subtitles into the downloaded videos.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Execute custom yt-dlp commands with templates.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Manage in-app downloads and custom command templates.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Easy to use and user-friendly.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://m3.material.io/&quot;&gt;Material Design 3&lt;/a&gt; style UI, with dynamic color theme.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;MAD: UI and logic written with pure Kotlin. Single activity, no fragments, only composable destinations.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;⬇️ Download&lt;/h2&gt; 
&lt;p&gt;For most devices, it is recommended to install the &lt;strong&gt;arm64-v8a&lt;/strong&gt; version of the apks&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;Download the latest stable version from &lt;a href=&quot;https://github.com/JunkFood02/Seal/releases/latest&quot;&gt;GitHub releases&lt;/a&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;Install the &lt;a href=&quot;https://github.com/JunkFood02/Seal/releases/&quot;&gt;pre-release&lt;/a&gt; versions to help us test out new features &amp;amp; changes&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Stable releases are also available on &lt;a href=&quot;https://f-droid.org/packages/com.junkfood.seal/&quot;&gt;F-Droid&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;!-- [&lt;img src=&quot;https://fdroid.gitlab.io/artwork/badge/get-it-on.png&quot;
     alt=&quot;Get it on F-Droid&quot;
     height=&quot;70&quot;&gt;](https://f-droid.org/packages/com.junkfood.seal/) --&gt; 
&lt;h2&gt;💬 Contact&lt;/h2&gt; 
&lt;p&gt;Join our &lt;a href=&quot;https://t.me/seal_app&quot;&gt;Telegram Channel&lt;/a&gt; or &lt;a href=&quot;https://matrix.to/#/%23seal-space:matrix.org&quot;&gt;Matrix Space&lt;/a&gt; for discussion, announcements, and releases!&lt;/p&gt; 
&lt;h2&gt;💖 Sponsors&lt;/h2&gt; 
&lt;p&gt;
 &lt;!-- sponsors --&gt;&lt;a href=&quot;https://github.com/Opposum102&quot;&gt;&lt;img src=&quot;https://github.com/Opposum102.png&quot; width=&quot;60px&quot; alt=&quot;User avatar: &quot; /&gt;&lt;/a&gt;
 &lt;!-- sponsors --&gt;&lt;/p&gt; 
&lt;p&gt;Seal will be always free and open source for everyone. If you like it, please consider &lt;a href=&quot;https://github.com/sponsors/JunkFood02&quot;&gt;sponsoring me&lt;/a&gt;!&lt;/p&gt; 
&lt;h2&gt;🤝 Contributing&lt;/h2&gt; 
&lt;p&gt;Contributions are welcome!&lt;/p&gt; 
&lt;p&gt;You can help translate Seal on &lt;a href=&quot;https://hosted.weblate.org/projects/seal/&quot;&gt;Hosted Weblate&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://hosted.weblate.org/engage/seal/&quot;&gt;&lt;img src=&quot;https://hosted.weblate.org/widgets/seal/-/strings/multi-auto.svg?sanitize=true&quot; alt=&quot;Translate status&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;&lt;/p&gt; 
 &lt;p&gt;For submitting bug reports, feature requests, questions, or any other ideas to improve, please read &lt;a href=&quot;https://github.com/JunkFood02/Seal/raw/main/CONTRIBUTING.md&quot;&gt;CONTRIBUTING.md&lt;/a&gt; for instructions and guidelines first.&lt;/p&gt; 
&lt;/div&gt; 
&lt;h2&gt;⭐️ Star History&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://star-history.com/#JunkFood02/Seal&amp;amp;Timeline&quot;&gt;&lt;img src=&quot;https://api.star-history.com/svg?repos=JunkFood02/Seal&amp;amp;type=Timeline&quot; alt=&quot;Star History Chart&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;🧱 Credits&lt;/h2&gt; 
&lt;p&gt;Seal is a simple GUI of &lt;a href=&quot;https://github.com/yt-dlp/yt-dlp&quot;&gt;yt-dlp&lt;/a&gt;, based on &lt;a href=&quot;https://github.com/yausername/youtubedl-android&quot;&gt;youtubedl-android&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Some of the UI designs and codes are borrowed from &lt;a href=&quot;https://github.com/Ashinch/ReadYou&quot;&gt;Read You&lt;/a&gt; and &lt;a href=&quot;https://github.com/Kyant0/MusicYou&quot;&gt;Music You&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/yausername/dvd&quot;&gt;dvd&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/material-foundation/material-color-utilities&quot;&gt;Material color utilities&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/Kyant0/Monet&quot;&gt;Monet&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;📃 License&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/JunkFood02/Seal/raw/main/LICENSE&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/license/JunkFood02/Seal?style=for-the-badge&quot; alt=&quot;GitHub&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-warning&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-alert mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Warning&lt;/p&gt;
 &lt;p&gt;&lt;/p&gt; 
 &lt;p&gt;Except for the source code licensed under the GPLv3 license, all other parties are prohibited from using Seal&#39;s name as a downloader app, and the same is true for Seal&#39;s derivatives. Derivatives include but are not limited to forks and unofficial builds.&lt;/p&gt; 
&lt;/div&gt; 
&lt;div align=&quot;right&quot;&gt; 
 &lt;table&gt;
  &lt;tbody&gt;
   &lt;tr&gt;
    &lt;td&gt; &lt;a href=&quot;https://raw.githubusercontent.com/JunkFood02/Seal/main/#start-of-content&quot;&gt;👆 Scroll to top&lt;/a&gt; &lt;/td&gt;
   &lt;/tr&gt;
  &lt;/tbody&gt;
 &lt;/table&gt; 
&lt;/div&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/91edd3a5aab5e178cb02a32a8fb7a75621104b7cef4b0dd4ca3c7039754dd2b2/JunkFood02/Seal" medium="image" />
      
    </item>
    
    <item>
      <title>utkarshdalal/GameNative</title>
      <link>https://github.com/utkarshdalal/GameNative</link>
      <description>&lt;p&gt;Native PC gaming with Steam, Epic, GOG and Amazon integrations on Android&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://mshibanami.github.io/GitHubTrendingRSS/assets/icons/link.png&quot; width=&quot;20&quot; height=&quot;20&quot; alt=&quot;link&quot; style=&quot;margin: 0 8px 0 0; padding: 0; display: inline-block; vertical-align: middle;&quot; /&gt;&lt;a href=&quot;https://gamenative.app&quot;&gt;https://gamenative.app&lt;/a&gt;&lt;/p&gt;&lt;hr&gt;&lt;div align=&quot;center&quot;&gt; 
 &lt;h1&gt;GameNative&lt;/h1&gt; 
 &lt;p&gt;&lt;strong&gt;Play the PC games you already own — from Steam, Epic and GOG — on your Android device, with cloud saves.&lt;/strong&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;a href=&quot;https://trendshift.io/repositories/14497&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://trendshift.io/api/badge/repositories/14497&quot; alt=&quot;utkarshdalal%2FGameNative | Trendshift&quot; style=&quot;width: 250px; height: 55px;&quot; width=&quot;250&quot; height=&quot;55&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
 &lt;a href=&quot;https://www.star-history.com/utkarshdalal/gamenative&quot;&gt; 
  &lt;picture&gt; 
   &lt;source media=&quot;(prefers-color-scheme: dark)&quot; srcset=&quot;https://api.star-history.com/badge?repo=utkarshdalal/GameNative&amp;amp;theme=dark&quot; /&gt; 
   &lt;source media=&quot;(prefers-color-scheme: light)&quot; srcset=&quot;https://api.star-history.com/badge?repo=utkarshdalal/GameNative&quot; /&gt; 
   &lt;img alt=&quot;Star History Rank&quot; src=&quot;https://api.star-history.com/badge?repo=utkarshdalal/GameNative&quot; /&gt; 
  &lt;/picture&gt; &lt;/a&gt; 
 &lt;p&gt;&lt;a href=&quot;https://github.com/utkarshdalal/GameNative/releases/latest&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/v/release/utkarshdalal/GameNative?style=flat-square&amp;amp;logo=github&amp;amp;label=latest&quot; alt=&quot;GitHub Release&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/utkarshdalal/GameNative/stargazers&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/stars/utkarshdalal/GameNative?style=flat-square&amp;amp;logo=github&amp;amp;color=ffd700&quot; alt=&quot;GitHub stars&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://discord.gg/2hKv4VfZfE&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fdiscord.com%2Fapi%2Fv9%2Finvites%2F2hKv4VfZfE%3Fwith_counts%3Dtrue&amp;amp;query=%24.approximate_member_count&amp;amp;style=flat-square&amp;amp;logo=discord&amp;amp;logoColor=white&amp;amp;label=discord&amp;amp;color=5865F2&amp;amp;suffix=%20members&quot; alt=&quot;Discord&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/utkarshdalal/GameNative/raw/master/LICENSE&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/license-GPL%203.0-blue?style=flat-square&quot; alt=&quot;License&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://ko-fi.com/gamenative&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/ko--fi-support-FF5E5B?style=flat-square&amp;amp;logo=ko-fi&amp;amp;logoColor=white&quot; alt=&quot;Ko-fi&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;a href=&quot;https://github.com/utkarshdalal/GameNative/releases/download/v1.2.1/gamenative-v1.2.1.apk&quot;&gt;&lt;strong&gt;Download&lt;/strong&gt;&lt;/a&gt; · &lt;a href=&quot;https://discord.gg/2hKv4VfZfE&quot;&gt;&lt;strong&gt;Discord&lt;/strong&gt;&lt;/a&gt; · &lt;a href=&quot;https://ko-fi.com/gamenative&quot;&gt;&lt;strong&gt;Support on Ko-fi&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; 
 &lt;p&gt;
  &lt;video src=&quot;https://github.com/user-attachments/assets/95b5397b-908a-44ef-a10a-dac7723580b0&quot; autoplay loop muted playsinline width=&quot;100%&quot;&gt;&lt;/video&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;hr /&gt; 
&lt;p&gt;GameNative lets you run the PC games in your Steam, Epic and GOG libraries directly on Android — no streaming required. Your saves sync to the cloud, so you can stop on your PC and keep going on your phone.&lt;/p&gt; 
&lt;p&gt;It&#39;s still early. Not every game runs yet, and some need tweaking to play well, but the community is constantly finding and sharing configs that work — and these get applied automatically. You can see if anyone has tried running your game successfully at &lt;a href=&quot;https://gamenative.app/compatibility&quot;&gt;https://gamenative.app/compatibility&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;What you get&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Play games you actually own on Steam, Epic, GOG and Amazon&lt;/li&gt; 
 &lt;li&gt;Cloud saves that carry over between your PC and your phone&lt;/li&gt; 
 &lt;li&gt;Automatically applied known configs, so many games just work out of the box with no tweaking required&lt;/li&gt; 
 &lt;li&gt;Controller and touch support, with a custom control editor and on-screen HUD&lt;/li&gt; 
 &lt;li&gt;Steam DLC, workshop and branch support&lt;/li&gt; 
 &lt;li&gt;Active support over Discord if you need help getting a game running&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Demo&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/@TechDweeb&quot;&gt;TechDweeb&lt;/a&gt; walks through setting up GameNative on an Android handheld in a couple of minutes:&lt;/p&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;p&gt;&lt;a href=&quot;https://youtu.be/QqIChmAu2_A?si=Ha6xzTQXZA2H8HUN&amp;amp;t=53&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/6957e3a1-34ac-41f5-b558-0f1868dbf3d4&quot; alt=&quot;Youtube Video&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;h2&gt;How to use&lt;/h2&gt; 
&lt;ol&gt; 
 &lt;li&gt;Download the latest release &lt;a href=&quot;https://downloads.gamenative.app/releases//gamenative-v.apk&quot;&gt;here&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Install the APK on your Android device&lt;/li&gt; 
 &lt;li&gt;Log in to your Steam account&lt;/li&gt; 
 &lt;li&gt;Install your game&lt;/li&gt; 
 &lt;li&gt;Hit play and enjoy&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Support&lt;/h2&gt; 
&lt;p&gt;The fastest way to get help is the &lt;a href=&quot;https://discord.gg/2hKv4VfZfE&quot;&gt;Discord server&lt;/a&gt; — we&#39;re 35k+ strong and someone&#39;s usually around.&lt;/p&gt; 
&lt;p&gt;Please &lt;strong&gt;don&#39;t&lt;/strong&gt; open issues on GitHub; they&#39;re closed automatically. Bring it to Discord instead.&lt;/p&gt; 
&lt;p&gt;If you&#39;d like to chip in, you can support the project on &lt;a href=&quot;https://ko-fi.com/gamenative&quot;&gt;Ko-fi&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;Want to help out? Message us to get into the &lt;strong&gt;#development&lt;/strong&gt; channel on &lt;a href=&quot;https://discord.gg/2hKv4VfZfE&quot;&gt;Discord&lt;/a&gt;, or open a thread there. Things we&#39;re currently looking for help with live on our &lt;a href=&quot;https://trello.com/b/vGRkFoAM/open-source-board&quot;&gt;Trello board&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Building&lt;/h3&gt; 
&lt;p&gt;Most of the time you don&#39;t need this — if you just want to play, grab the release above. This is for contributors.&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Build it like any normal Android Studio project. Ask on Discord if you get stuck.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;SteamGridDB API key (optional):&lt;/strong&gt; to pull game artwork for custom games, add your key to &lt;code&gt;local.properties&lt;/code&gt;:&lt;pre&gt;&lt;code class=&quot;language-properties&quot;&gt;STEAMGRIDDB_API_KEY=your_api_key_here
&lt;/code&gt;&lt;/pre&gt; You can get one from your &lt;a href=&quot;https://www.steamgriddb.com/profile/preferences&quot;&gt;SteamGridDB preferences&lt;/a&gt;. Without it everything still works — it just won&#39;t fetch images.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Analytics &amp;amp; privacy&lt;/h2&gt; 
&lt;p&gt;GameNative uses &lt;a href=&quot;https://posthog.com&quot;&gt;PostHog&lt;/a&gt; for anonymous analytics. No personal information is ever collected — no names, emails, IPs or device identifiers.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Always collected&lt;/strong&gt;, to improve game compatibility:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Game launch, close and exit events (game name, store, session length, average FPS, container config)&lt;/li&gt; 
 &lt;li&gt;Game install, cancel and uninstall events&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;This is how we figure out which games work, how well they run, and which configs to apply automatically for the next person. It can&#39;t identify you.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Optional&lt;/strong&gt;, and switchable under &lt;em&gt;Settings → Info → Usage Analytics&lt;/em&gt;:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Feature usage (on-screen keyboard, controller, HUD, control editor)&lt;/li&gt; 
 &lt;li&gt;Login success/failure events&lt;/li&gt; 
 &lt;li&gt;Recommendation interactions&lt;/li&gt; 
 &lt;li&gt;App lifecycle events (foreground/background)&lt;/li&gt; 
 &lt;li&gt;Cloud sync events&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The full &lt;a href=&quot;https://raw.githubusercontent.com/utkarshdalal/GameNative/master/PrivacyPolicy/README.md&quot;&gt;Privacy Policy&lt;/a&gt; has the details.&lt;/p&gt; 
&lt;h2&gt;Supporters&lt;/h2&gt; 
&lt;p&gt;Thanks to our &lt;a href=&quot;https://ko-fi.com/gamenative&quot;&gt;Ko-fi sponsors&lt;/a&gt; and &lt;a href=&quot;https://github.com/sponsors/utkarshdalal?preview=true&quot;&gt;GitHub sponsors&lt;/a&gt;, including &lt;a href=&quot;https://coderabbit.link/gnative&quot;&gt;CodeRabbit&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://star-history.dera.page/#utkarshdalal/GameNative&amp;amp;Date&quot;&gt;&lt;img src=&quot;https://star-history.dera.page/svg?repos=utkarshdalal/GameNative&amp;amp;type=Date&amp;amp;theme=dark&quot; alt=&quot;Star History Chart&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/utkarshdalal/GameNative/raw/master/LICENSE&quot;&gt;GPL 3.0&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;See &lt;a href=&quot;https://raw.githubusercontent.com/utkarshdalal/GameNative/master/THIRD_PARTY_NOTICES&quot;&gt;THIRD_PARTY_NOTICES&lt;/a&gt; for attributions, copyleft source offers, and notices about third-party and proprietary components bundled with the app.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; This software is meant for playing games that you legally own. Don&#39;t use it for piracy or anything else illegal. The maintainer takes no responsibility for misuse.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/fe34be145cd4e564855d0d3dea3a1614dad3f73a3ee712dbc635345c3c4999c0/utkarshdalal/GameNative" medium="image" />
      
    </item>
    
    <item>
      <title>The412Banner/Bannerlator</title>
      <link>https://github.com/The412Banner/Bannerlator</link>
      <description>&lt;p&gt;Bannerlator — run Windows PC games and apps on Android (Wine + Box64/86). A personal, community-driven continuation of the discontinued Winlator Star Bionic project. GitHub Actions builds + releases.&lt;/p&gt;&lt;hr&gt;&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/logo.jpg&quot; width=&quot;820&quot; alt=&quot;Bannerlator&quot; /&gt; &lt;/p&gt; 
&lt;h1 align=&quot;center&quot;&gt;Bannerlator&lt;/h1&gt; 
&lt;p align=&quot;center&quot;&gt;&lt;b&gt;Windows applications and games on Android.&lt;/b&gt;&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://img.shields.io/github/downloads/The412Banner/Bannerlator/total?style=for-the-badge&amp;amp;label=Downloads&amp;amp;color=ff2d9b&quot; alt=&quot;Total Downloads&quot; /&gt; &lt;img src=&quot;https://img.shields.io/badge/Platform-Android%208.0%2B-7a4cff?style=for-the-badge&quot; alt=&quot;Platform&quot; /&gt; &lt;img src=&quot;https://img.shields.io/badge/License-GPL--3.0-2d9bff?style=for-the-badge&quot; alt=&quot;License&quot; /&gt; &lt;a href=&quot;https://github.com/The412Banner/Bannerlator/issues/new?template=ask-the-ai.yml&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/%F0%9F%92%AC%2520Ask%2520the%2520AI-Ask%2520about%2520the%2520app-7b2ff7?style=for-the-badge&amp;amp;logo=claude&amp;amp;logoColor=white&quot; alt=&quot;Ask the AI&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://ko-fi.com/the412banner&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Ko--fi-Support%20the%20project-ff5e5b?style=flat-square&amp;amp;logo=ko-fi&amp;amp;logoColor=white&quot; alt=&quot;Support on Ko-fi&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://github.com/The412Banner/Bannerlator/releases/latest&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/%E2%AC%87%2520Download-Latest%2520Release-ff2d9b?style=for-the-badge&amp;amp;logo=android&amp;amp;logoColor=white&quot; alt=&quot;Download Latest Release&quot; /&gt; &lt;/a&gt; &lt;a href=&quot;https://the412banner.github.io/bannerlator-game-configs/&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/%F0%9F%8C%90%2520Community%2520Configs-Browse%2520the%2520Library-8b5cf6?style=for-the-badge&quot; alt=&quot;Community Config Library&quot; /&gt; &lt;/a&gt; &lt;a href=&quot;https://the412banner.github.io/Bannerlator/mali-reports/&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/%F0%9F%90%9B%2520Mali%2520Reports-Report%2520a%2520game%2520issue-2dd4bf?style=for-the-badge&quot; alt=&quot;Report a Mali GPU game issue&quot; /&gt; &lt;/a&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/#-contents&quot;&gt;Contents&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/#-ask-me-anything&quot;&gt;Ask AI&lt;/a&gt; • &lt;a href=&quot;https://github.com/The412Banner/Bannerlator/releases/latest&quot;&gt;Download&lt;/a&gt; • &lt;a href=&quot;https://the412banner.github.io/bannerlator-game-configs/&quot;&gt;Config Library&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/#-report-a-mali-gpu-game-issue&quot;&gt;Mali Reports&lt;/a&gt; • &lt;a href=&quot;https://discord.gg/n8S4G2WZQ4&quot;&gt;Discord&lt;/a&gt; • &lt;a href=&quot;https://t.me/The412BannerGaming&quot;&gt;Telegram&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/#%EF%B8%8F-building&quot;&gt;Builds&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/#-credits&quot;&gt;Credits&lt;/a&gt; &lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;📌 Project Notice&lt;/h2&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Bannerlator is a personal build — made by me (&lt;a href=&quot;https://github.com/The412Banner&quot;&gt;The412Banner&lt;/a&gt;), for my own device, my own needs, and my own use.&lt;/strong&gt;&lt;/p&gt; 
 &lt;p&gt;It&#39;s a personal continuation of the Winlator &lt;em&gt;Star Bionic&lt;/em&gt; project (&lt;a href=&quot;https://github.com/star-emu/star&quot;&gt;star-emu/star&lt;/a&gt;) after it was discontinued and archived. None of the original developers are involved except me; it stands on their work plus cherry-picked commits from across the community — all credited below.&lt;/p&gt; 
 &lt;p&gt;&lt;strong&gt;This is NOT an official or general-purpose Winlator release.&lt;/strong&gt; It is built and tuned for &lt;em&gt;my&lt;/em&gt; hardware and &lt;em&gt;my&lt;/em&gt; workflow, and published &lt;strong&gt;as-is&lt;/strong&gt; purely in case it happens to be useful to someone else.&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;No guarantee it works on any other device, GPU, or Android version.&lt;/strong&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;No support, and no commitment to fix anything that works for me but not for you.&lt;/strong&gt; If a feature works on my device, it isn&#39;t broken — for me, which is what this build is for.&lt;/li&gt; 
  &lt;li&gt;Bug reports / feature requests for setups I don&#39;t run may simply be closed. That&#39;s not personal; this just isn&#39;t a community-support project.&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;You&#39;re &lt;strong&gt;free to use, modify, fork, or share it&lt;/strong&gt; (GPL-3.0). If it doesn&#39;t work on your setup, that&#39;s expected — it wasn&#39;t built for it.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🤖 AI Disclaimer&lt;/h2&gt; 
&lt;p&gt;All coding, features, and changes in this project are developed with the assistance of &lt;strong&gt;&lt;a href=&quot;https://www.anthropic.com/claude&quot;&gt;Claude AI&lt;/a&gt;&lt;/strong&gt; by Anthropic. Claude is used to help with the heavy lifting — writing, reviewing, and modifying the emulator&#39;s code and the features added here: the Kotlin/Compose app shell and the native emulation glue (Wine/Proton, box64/FEX, DXVK/VKD3D → Vulkan), the storefront and cloud-save integrations, and the per-game/container features — as well as porting and re-deriving community changes into this build.&lt;/p&gt; 
&lt;p&gt;Before any &lt;strong&gt;stable release&lt;/strong&gt; is published, all changes are &lt;strong&gt;manually debugged and tested by me across multiple devices — both rooted and unrooted&lt;/strong&gt;. Debugging is done using &lt;code&gt;logcat&lt;/code&gt;/&lt;code&gt;getlog&lt;/code&gt; output and in-app debug log files to diagnose and verify behaviour, and no stable release is cut until the change is verified end-to-end on real hardware. Test devices:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Samsung Galaxy Fold 8 Ultra&lt;/strong&gt; — Snapdragon 8 Elite Gen 5 — &lt;em&gt;not rooted&lt;/em&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;AYANEO Konkr Pocket Fit&lt;/strong&gt; — Snapdragon G3 Gen 3 — &lt;em&gt;rooted&lt;/em&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Odin 2 Portal&lt;/strong&gt; (base) — Snapdragon 8 Gen 2 — &lt;em&gt;rooted&lt;/em&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Retroid Pocket 5&lt;/strong&gt; — Snapdragon 865 — &lt;em&gt;rooted&lt;/em&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;A note on root:&lt;/strong&gt; using any root-only features is entirely &lt;strong&gt;your own choice and at your own risk&lt;/strong&gt;. I don&#39;t encourage rooting your device in general — especially without the proper knowledge and tools to do it correctly. Bannerlator runs fine unrooted; root only unlocks a few optional performance extras.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;hr /&gt; 
&lt;h2&gt;ℹ️ Information&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;&lt;/th&gt; 
   &lt;th&gt;&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;App label&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;Bannerlator Bionic&lt;/code&gt; (standard) · &lt;code&gt;Bannerlator Bionic PuBG&lt;/code&gt; (pubg) · &lt;code&gt;Bannerlator Bionic Ludashi&lt;/code&gt; (ludashi) · &lt;code&gt;Bannerlator Bionic AnTuTu&lt;/code&gt; (antutu)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Packages&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;com.winlator.banner&lt;/code&gt; (standard) · &lt;code&gt;com.tencent.ig&lt;/code&gt; (pubg) · &lt;code&gt;com.ludashi.benchmark&lt;/code&gt; (ludashi) · &lt;code&gt;com.antutu.ABenchMark&lt;/code&gt; (antutu)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Version&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Bannerlator &lt;strong&gt;V 3.1.6-pre3&lt;/strong&gt; — built from Star &lt;strong&gt;marcescence&lt;/strong&gt; (&lt;code&gt;versionName 3.1.6-pre3&lt;/code&gt;, &lt;code&gt;versionCode 97&lt;/code&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Android SDK&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;compileSdk 34&lt;/code&gt; · &lt;code&gt;targetSdk 28&lt;/code&gt; · &lt;code&gt;minSdk 26&lt;/code&gt; (Android 8.0+)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Lineage&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Winlator → cmod → Bionic Nightly → Star Bionic → &lt;strong&gt;marcescence&lt;/strong&gt; → &lt;strong&gt;Bannerlator&lt;/strong&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🐛 Report a Mali GPU Game Issue&lt;/h2&gt; 
&lt;p&gt;Games misbehaving on a &lt;strong&gt;Mali GPU&lt;/strong&gt; (Exynos / Dimensity / Kirin / Helio devices)? We run a dedicated public bug-report board for Mali devices — file a structured report with your logs, and get answers back from the developers in a public discussion thread on each report.&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://the412banner.github.io/Bannerlator/mali-reports/&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/%F0%9F%93%9D%2520File%2520a%2520Mali%2520report-Submit%2520with%2520logs-2dd4bf?style=for-the-badge&quot; alt=&quot;File a Mali report&quot; /&gt; &lt;/a&gt; &lt;a href=&quot;https://the412banner.github.io/Bannerlator/mali-reports/reports.html&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/%F0%9F%93%8B%2520Browse%2520all%2520reports-See%2520dev%2520answers-8b5cf6?style=for-the-badge&quot; alt=&quot;Browse all Mali reports&quot; /&gt; &lt;/a&gt; &lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;📝 &lt;a href=&quot;https://the412banner.github.io/Bannerlator/mali-reports/&quot;&gt;File a Mali game report&lt;/a&gt;&lt;/strong&gt; — a quick form; attach the log file(s) so we can actually help.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;📋 &lt;a href=&quot;https://the412banner.github.io/Bannerlator/mali-reports/reports.html&quot;&gt;Browse all reports &amp;amp; dev answers&lt;/a&gt;&lt;/strong&gt; — see what&#39;s been reported, answered, and fixed.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Every report gets its own &lt;strong&gt;public discussion thread&lt;/strong&gt;. You can reply as the original poster — no account or password needed — and the developers answer right there in the thread.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;📖 Contents&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/#-project-notice&quot;&gt;📌 Project Notice&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/#-ai-disclaimer&quot;&gt;🤖 AI Disclaimer&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/#%E2%84%B9%EF%B8%8F-information&quot;&gt;ℹ️ Information&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/#-report-a-mali-gpu-game-issue&quot;&gt;🐛 Report a Mali GPU Issue&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/#%EF%B8%8F-small-updates-win-components-offline--smarter-game-adding-316&quot;&gt;⬇️ Small updates, Win Components offline &amp;amp; smarter game adding (3.1.6)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/#-force-ssbs-v14-layers--mali-on-wayland-316&quot;&gt;⚡ Force SSBS, v14 layers &amp;amp; Mali on Wayland (3.1.6)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/#-steamlite-steam-input--wayland-xdg-shell-v3-316&quot;&gt;🆕 SteamLite Steam Input &amp;amp; Wayland xdg-shell v3 (3.1.6)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/#-headless-steam--server-browser-316&quot;&gt;🎮 Headless Steam &amp;amp; Server Browser (3.1.6)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/#-cutscenes--codecs-315&quot;&gt;🎬 Cutscenes &amp;amp; Codecs (3.1.5)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/#-fast-opengl-314&quot;&gt;⚡ Fast OpenGL (3.1.4)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/#-linux-steam-client-313&quot;&gt;🐧 Linux Steam Client (3.1.3)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/#-whats-new-in-312&quot;&gt;🆕 What&#39;s New in 3.1.2&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/#-frame-generation--present-modes&quot;&gt;🎞️ Frame Generation &amp;amp; Present Modes&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/#-full-features&quot;&gt;✨ Full Features&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/#-adding-your-own-reshade-effects&quot;&gt;🎨 Adding your own ReShade effects&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/#-frontends-workaround&quot;&gt;🎮 Frontends Workaround&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/#%EF%B8%8F-building&quot;&gt;🛠️ Building&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/#-ask-me-anything&quot;&gt;🤖 Ask Me Anything&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/#-credits&quot;&gt;🙏 Credits&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/#%EF%B8%8F-disclaimer&quot;&gt;⚖️ Disclaimer&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/#-license&quot;&gt;📄 License&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;⬇️ Small updates, Win Components offline &amp;amp; smarter game adding (3.1.6)&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/The412Banner/Bannerlator/releases/tag/3.1.6&quot;&gt;3.1.6&lt;/a&gt; is the stable release of everything below (Headless Steam, Steam Input, Force SSBS and the v14 layers, Mali on Wayland, Box64EC), plus:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Small updates, from the next release on&lt;/strong&gt; — the in-app updater downloads a small patch (usually 5–25 MB instead of 525 MB), rebuilds the new app from the installed one, checks it&#39;s an exact copy of the release and installs it as a normal update. No patch for your version, or anything goes wrong → the full download, as before. 3.1.6 itself still downloads in full; first installs and this page always give the full APK.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;A new update notice&lt;/strong&gt; — a slide-in pill (Dismiss / View), a &lt;em&gt;What&#39;s new&lt;/em&gt; pop-up with highlights and the real download size, and a download card with progress and Cancel. Automatic checks happen at most every six hours.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Win Components install offline&lt;/strong&gt; — 113 of the 123 catalog components (VC++, .NET, DirectX, XNA, codecs, fonts…) are laid out straight into the container in seconds, without starting it.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Adding games&lt;/strong&gt; — names from the game&#39;s own files, Steam&#39;s name, art and details found by title, an art picker in &lt;em&gt;Edit Game&lt;/em&gt;, components suggested per game in folder import, scrolling game and container menus.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;code&gt;VKD3D_SHADER_MODEL=6_6&lt;/code&gt;&lt;/strong&gt; by default on every container, so Unreal Engine 5 games such as &lt;em&gt;Gothic 1 Remake&lt;/em&gt; no longer refuse DirectX 12.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;⚡ Force SSBS, v14 layers &amp;amp; Mali on Wayland (3.1.6)&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;First in &lt;a href=&quot;https://github.com/The412Banner/Bannerlator/releases/tag/3.1.6-pre3&quot;&gt;3.1.6-pre3&lt;/a&gt;: a CPU speed fix for Wine on ARM, the v14 layers that carry it, and Wayland settings for Mali phones.&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Force SSBS&lt;/strong&gt; — Wine on ARM kept switching off the CPU&#39;s SSBS feature on game threads (the slower, extra-safe way of handling memory). The &lt;strong&gt;v14&lt;/strong&gt; layers carry Wine&#39;s own fix (&lt;a href=&quot;https://gitlab.winehq.org/wine/wine/-/merge_requests/12262&quot;&gt;MR 12262&lt;/a&gt;) and the toggle (Advanced tab, container and per game) is &lt;strong&gt;on by default&lt;/strong&gt;; older layers get the bit back through a small add-on. Biggest gains expected on Snapdragon 8 Elite (Oryon) in CPU-heavy games.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;v14 layers&lt;/strong&gt; — all ten Proton layers, both Proton 10 layers included again, in the catalog (&lt;a href=&quot;https://github.com/The412Banner/proton-wine/releases/tag/build-bionic-layers-20261007-v14&quot;&gt;release notes&lt;/a&gt;).&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Mali on Wayland&lt;/strong&gt; — a &lt;strong&gt;Mali (PanVK)&lt;/strong&gt; section in the Wayland driver settings, and &lt;strong&gt;System&lt;/strong&gt; offered as the Wayland driver on Mali (experimental).&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Menu button&lt;/strong&gt; — Input Controls › Device: pick a controller button that opens the in-game side menu (off by default; B can&#39;t be picked). Also a Toy Story 2 window fix.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;🆕 SteamLite Steam Input &amp;amp; Wayland xdg-shell v3 (3.1.6)&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;First in &lt;a href=&quot;https://github.com/The412Banner/Bannerlator/releases/tag/3.1.6-pre2&quot;&gt;3.1.6-pre2&lt;/a&gt;: Steam Input for SteamLite and xdg-shell version 3 to the Wayland compositor.&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;SteamLite Steam Input&lt;/strong&gt; — a per-game toggle and layout pick in the SteamLite launch options hands the controller to the game through Valve&#39;s own Steam Input layer (needs the &lt;strong&gt;SteamLite v8&lt;/strong&gt; package, offered by the app). Keep it off for games that already read a controller themselves; the default layout keeps the pad a pad.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Wayland xdg-shell v3&lt;/strong&gt; — the compositor now implements real positioners, pop-up windows and &lt;code&gt;reposition&lt;/code&gt; and advertises version 3, which the Wayland driver of the new &lt;strong&gt;Proton-CachyOS 11.0-20261005&lt;/strong&gt; layer requires to open any window. Layers asking for version 1 or 2 are unchanged.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Proton-CachyOS 11.0-20261005&lt;/strong&gt; (arm64ec + x86_64, v13) is in the catalog — on app builds before 3.1.6-pre2 use it with X11.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;🎮 Headless Steam &amp;amp; Server Browser (3.1.6)&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;Since &lt;a href=&quot;https://github.com/The412Banner/Bannerlator/releases/tag/3.1.6-pre1&quot;&gt;3.1.6-pre1&lt;/a&gt;, Steam games have a second online launch option next to SteamLite.&lt;/strong&gt; &lt;strong&gt;Headless Steam&lt;/strong&gt; runs a game on the app&#39;s own signed-in Steam session: a small native host (Valve&#39;s Android Steam library, driven by the app) signs in on your account in about a second and the game talks to it through the Steam bridge in the Proton 11 layers — no Steam client window, nothing installed in the prefix, every Steam call native. Cloud saves, stats, achievements and multiplayer work; Counter-Strike: Source was the proving case, including a live community match.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;How to use it:&lt;/strong&gt; sign in to Steam in the app, then pick &lt;strong&gt;Headless Steam&lt;/strong&gt; in a Steam shortcut&#39;s launch popup (Headless Steam / SteamLite / Goldberg / Raw). Needs the &lt;strong&gt;v13&lt;/strong&gt; Proton 11 &lt;strong&gt;arm64ec&lt;/strong&gt; layers from the catalog (the x86_64 layers and the Proton 10 layers have no Steam bridge).&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Find Servers works.&lt;/strong&gt; Valve&#39;s Android library has no working server browser, so the v13 layers carry their own: the app fetches the master list through Steam&#39;s Web API, the layer pings every server and feeds the game, and a small x86-64 front keeps the game&#39;s sort lookups inside the emulator — the list refreshes at 316 to 376 fps.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;VAC:&lt;/strong&gt; Headless Steam is &lt;strong&gt;not&lt;/strong&gt; VAC-protected — Valve&#39;s Android library has no VAC scanner (only the Windows and x86 Linux clients do). Secure servers may admit you, but for a VAC session use &lt;strong&gt;SteamLite&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Log Manager:&lt;/strong&gt; a Headless Steam toggle writes a per-game &lt;code&gt;headless_steam.txt&lt;/code&gt; with a PASS/FAIL checklist of the session and the server browser.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Box64EC (experimental, unofficial):&lt;/strong&gt; arm64ec containers also gain an &lt;strong&gt;Emulator (64-bit)&lt;/strong&gt; picker (FEXCore, the supported default, or Box64EC). Box64EC components are built by The412Banner from the &lt;a href=&quot;https://github.com/ptitSeb/box64&quot;&gt;box64&lt;/a&gt; project&#39;s work-in-progress ARM64EC target and &lt;a href=&quot;https://github.com/ptitSeb/box64/pull/4480&quot;&gt;airidosas252&#39;s PR #4480&lt;/a&gt;; they are not releases of the box64 project and the picker only appears once a Box64EC component is installed from the catalog.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;🎬 Cutscenes &amp;amp; Codecs (3.1.5)&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/The412Banner/Bannerlator/releases/tag/3.1.5&quot;&gt;3.1.5&lt;/a&gt; makes in-game cutscenes play on every DXVK version, and on x86_64 layers for the first time.&lt;/strong&gt; The fixes ship in the &lt;strong&gt;v12 Proton layers&lt;/strong&gt; (the catalog default; take the in-place update) plus two app pieces: a &lt;strong&gt;Codecs&lt;/strong&gt; block in Win Components — builtin decoder &lt;strong&gt;GStreamer&lt;/strong&gt; (default) or &lt;strong&gt;FFmpeg&lt;/strong&gt; (winedmo, arm64ec only) and &lt;strong&gt;software decoding&lt;/strong&gt; — and new defaults for new containers: &lt;strong&gt;Box64 0.4.5-gst&lt;/strong&gt; (box64 with the GStreamer-wrapper fix, so x86_64 containers can decode video; upstream &lt;a href=&quot;https://github.com/ptitSeb/box64/pull/4528&quot;&gt;ptitSeb/box64#4528&lt;/a&gt;) and &lt;strong&gt;FEXCore 2609-unix&lt;/strong&gt;. Existing x86_64 containers: pick Box64 0.4.5-gst once in Advanced. 3.1.5 also brings X11 raw mouse (XInput 2), full-colour game cursors, pointer auto-hide and a non-blocking X server, and Steam Cloud save-sync fixes — details in the release notes.&lt;/p&gt; 
&lt;h2&gt;⚡ Fast OpenGL (3.1.4)&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/The412Banner/Bannerlator/releases/tag/3.1.4&quot;&gt;3.1.4&lt;/a&gt; makes OpenGL games on X11 about 4 to 5 times faster, on every Wine version.&lt;/strong&gt; A new &lt;strong&gt;Fast OpenGL&lt;/strong&gt; setting (on by default) sends OpenGL frames straight to the screen through Vulkan instead of copying each one back first. It picks the right method by itself: Wine&#39;s EGL route on Wine 11 / Proton 11 arm64ec, and a new GLX route on everything else (Proton 10, Wine 9.5, every x86_64 layer). Old DirectDraw games through WineD3D get about 2 times faster too, and no freedreno is needed, just your Turnip driver. 3.1.4 also brings one compact &lt;strong&gt;OpenGL&lt;/strong&gt; card (Fast, Show FPS, Vsync off), a &lt;strong&gt;Sync&lt;/strong&gt; selector, &lt;strong&gt;Android games&lt;/strong&gt; in the Games tab, and on Wayland one driver choice through the new adapter, no tap to start and uncapped DirectX 12. Full details are in the &lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/docs/releases/3.1.4.md&quot;&gt;release notes&lt;/a&gt;.&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;📘 &lt;strong&gt;Plain-language explainer, with before-and-after screenshots and fps for every Wine version: &lt;a href=&quot;https://the412banner.github.io/Bannerlator/fast-opengl/&quot;&gt;Fast OpenGL — OpenGL games now run 4 to 5 times faster&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h2&gt;🐧 Linux Steam Client (3.1.3)&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;Since &lt;a href=&quot;https://github.com/The412Banner/Bannerlator/releases/tag/3.1.3&quot;&gt;3.1.3&lt;/a&gt;, Bannerlator runs Valve&#39;s own native ARM64 Linux Steam client&lt;/strong&gt;. Sign in, install a game from your library and play it through Valve&#39;s ARM64 Proton, with no Wine container involved. Proton is ready at first sign-in. Big Picture works with your fingers as well as a controller, a &lt;strong&gt;Components&lt;/strong&gt; tab swaps FEX, DXVK and VKD3D per Proton, and the games in the app&#39;s Games tab show up in Steam with shared saves. It&#39;s an &lt;strong&gt;optional, experimental extra&lt;/strong&gt; in the stable release: nothing changes unless you download it.&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;⚠️ &lt;strong&gt;Adreno GPUs only&lt;/strong&gt;, and it needs Android&#39;s &lt;strong&gt;Disable child process restrictions&lt;/strong&gt; developer setting. Mali, Xclipse and PowerVR phones get sound over a black screen. Leave the experimental &lt;strong&gt;Steam Deck mode&lt;/strong&gt; off: it breaks game controllers. Full caveats are in the &lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/docs/releases/3.1.3.md&quot;&gt;release notes&lt;/a&gt;.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;📖 Step-by-step in plain English — a brand-new install, or upgrading&lt;/b&gt; (tap to expand)&lt;/summary&gt; 
 &lt;h3&gt;🆕 New here? Installing for the first time&lt;/h3&gt; 
 &lt;p&gt;&lt;strong&gt;Before you start — check two things:&lt;/strong&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;Your phone needs an Adreno GPU&lt;/strong&gt; (Snapdragon). Mali, Xclipse and PowerVR phones will get sound over a black screen. &lt;strong&gt;Contents → Linux Runtime&lt;/strong&gt; warns you about this before the download.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Turn on one Android setting first:&lt;/strong&gt; go to &lt;strong&gt;Settings → Developer options → Disable child process restrictions&lt;/strong&gt; and switch it &lt;strong&gt;on&lt;/strong&gt;. Do not see Developer options? Go to &lt;strong&gt;Settings → About phone&lt;/strong&gt; and tap &lt;strong&gt;Build number&lt;/strong&gt; seven times, then it appears. Without this switch, Android randomly kills the Steam client and your session just dies for no visible reason. Some phones do not have the switch at all — on those, the client won&#39;t stay up yet.&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;&lt;strong&gt;Then:&lt;/strong&gt;&lt;/p&gt; 
 &lt;ol&gt; 
  &lt;li&gt;&lt;strong&gt;Download and install the APK.&lt;/strong&gt; There are four — just take &lt;strong&gt;standard&lt;/strong&gt; unless you specifically use the pubg, ludashi or antutu build already.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Open the app and go to Contents → Linux Runtime → Download.&lt;/strong&gt; This is about &lt;strong&gt;755 MB&lt;/strong&gt;, once. It is not in the APK, so this step is required.&lt;/li&gt; 
  &lt;li&gt;When it finishes, a &lt;strong&gt;Steam (Linux)&lt;/strong&gt; entry appears in your games list. &lt;strong&gt;Tap it.&lt;/strong&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;First launch takes a few minutes.&lt;/strong&gt; A loading screen first downloads &lt;strong&gt;Proton Experimental (ARM64)&lt;/strong&gt; (about 400 MB), then lets Steam download and update itself. There&#39;s a clock on screen so you know it&#39;s still working.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Sign in&lt;/strong&gt; with your Steam account. Password, or the QR code with the Steam mobile app — both work.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Install a game and play.&lt;/strong&gt; There&#39;s nothing to pick and no restart to wait for, because Proton is already there.&lt;/li&gt; 
 &lt;/ol&gt; 
 &lt;p&gt;If the Proton download on the loading screen fails, the app skips it and Steam fetches Proton itself instead. In that case, watch for the &lt;strong&gt;Proton Experimental (ARM64)&lt;/strong&gt; install box, let the client &lt;strong&gt;restart itself once&lt;/strong&gt;, and only then install a game. A game installed before that restart fails to launch.&lt;/p&gt; 
 &lt;p&gt;&lt;strong&gt;That&#39;s it.&lt;/strong&gt; Your existing Wine containers and games are completely untouched by any of this.&lt;/p&gt; 
 &lt;p&gt;&lt;strong&gt;Optional tweaks&lt;/strong&gt; — the ⚙️ next to the Steam (Linux) entry holds resolution (720p by default, because Steam&#39;s own interface is expensive to draw), drivers, cores, audio, frame generation, the HUD, &lt;strong&gt;Touch&lt;/strong&gt;, &lt;strong&gt;Components&lt;/strong&gt;, &lt;strong&gt;Your games in Steam&lt;/strong&gt; and the Steam client update channel. &lt;strong&gt;GE-Proton&lt;/strong&gt; and &lt;strong&gt;proton-cachyos&lt;/strong&gt; (ARM64 builds) can be downloaded in &lt;strong&gt;Contents → Linux Runtime&lt;/strong&gt; and picked per game on Steam&#39;s own &lt;em&gt;Compatibility&lt;/em&gt; page.&lt;/p&gt; 
 &lt;h3&gt;⬆️ Upgrading&lt;/h3&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;From 3.1.2:&lt;/strong&gt; install over. Nothing else changes until you download the Linux Runtime.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;From a 3.1.3 pre-release:&lt;/strong&gt; install over. You stay signed in, and your games, Proton and settings are kept.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;From the September 21 test build:&lt;/strong&gt; install over, then open &lt;strong&gt;Contents → Linux Runtime&lt;/strong&gt; once. That moves the Steam (Linux) entry out of its old Wine container and carries your settings over (HUD, LSFG, audio, drivers). &lt;strong&gt;Don&#39;t remove or re-download the runtime.&lt;/strong&gt; If you made a container &lt;em&gt;only&lt;/em&gt; for Steam, you can delete it afterwards (the &lt;strong&gt;Linux Desktop&lt;/strong&gt; entry stays in the container — leave that one alone if you use it).&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;h3&gt;🐞 If something goes wrong&lt;/h3&gt; 
 &lt;p&gt;Post the &lt;strong&gt;whole&lt;/strong&gt; session folder from &lt;code&gt;Download/Bannerlator-LinuxSteam/session-&amp;lt;date&amp;gt;-&amp;lt;time&amp;gt;/&lt;/code&gt;. It is already scrubbed — tokens, Steam IDs and login files are masked or never copied, so it is safe to post.&lt;/p&gt; 
 &lt;p&gt;Known and already on the list, no need to report: &lt;strong&gt;Steam Deck mode breaks game controllers&lt;/strong&gt;, &lt;strong&gt;FlatOut shrinks to the corner after Guide → Resume&lt;/strong&gt;, &lt;strong&gt;TF2 says &quot;insecure&quot;&lt;/strong&gt;, GTA V &lt;em&gt;Enhanced&lt;/em&gt; does not run, Serious Sam Shatterverse is killed for memory, NFS Hot Pursuit Remastered faults. Almost everything was proven on one AYANEO Pocket FIT — reports from any other device are the single most useful thing right now.&lt;/p&gt; 
&lt;/details&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🆕 What&#39;s New in 3.1.2&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;The Wayland update.&lt;/strong&gt; Bannerlator can now draw a game through its &lt;strong&gt;own embedded Wayland compositor&lt;/strong&gt; instead of the Java X server — a second display backend, chosen per container. It does things X11 cannot: &lt;strong&gt;HDR10&lt;/strong&gt;, &lt;strong&gt;launching a game on your TV&lt;/strong&gt;, &lt;strong&gt;zero-copy presentation&lt;/strong&gt;, &lt;strong&gt;eight bundled game drivers&lt;/strong&gt; to pick from per game, real &lt;strong&gt;mouse-look&lt;/strong&gt;, and frame generation in HDR.&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;🧪 &lt;strong&gt;Wayland is EXPERIMENTAL and is not a replacement for X11.&lt;/strong&gt; It is very new and it has bugs — some games run worse than on X11, some will not run at all. &lt;strong&gt;X11 remains the default and stays fully supported&lt;/strong&gt;, and is still the right choice for anything you actually want to play. Wayland is &lt;strong&gt;off unless you turn it on&lt;/strong&gt;, per container, and your existing containers are untouched.&lt;/p&gt; 
 &lt;p&gt;It only works on the new &lt;strong&gt;versionCode 8 arm64ec Proton 11 layers&lt;/strong&gt; (the &lt;strong&gt;(v8)&lt;/strong&gt; rows in the catalog) — not on the x86_64 (box64) layers and not on the Proton 10 layers, which stay on v7. It also needs an &lt;strong&gt;Adreno&lt;/strong&gt; GPU, because the bundled drivers are Turnip; Mali, Xclipse and PowerVR phones stay on X11.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;🌊 Wayland display backend (experimental).&lt;/strong&gt; Turn it on per container. A game draws straight into Bannerlator&#39;s compositor, and you pick one of &lt;strong&gt;eight bundled Wayland Turnip drivers&lt;/strong&gt; per game.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;🌈 HDR10 on HDR screens.&lt;/strong&gt; Your screen&#39;s real peak, frame-average and black level are described to Windows, so a game&#39;s own HDR option stops being greyed out.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;📺 Play on your TV.&lt;/strong&gt; A &lt;strong&gt;TV&lt;/strong&gt; tab appears while an external screen is connected: launch the session straight onto the TV (in HDR when it supports it), with a companion screen on the handheld. Unplug and the game moves back and carries on.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;🎭 GPU name spoof on Wayland&lt;/strong&gt;, plus a DXVK memory cap and present-mode picker in the driver gear.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;⚡ Wayland performance, phase 1&lt;/strong&gt; — measured on an Adreno 750: &lt;strong&gt;+9% Vulkan, +12% D3D12, +20% DirectDraw&lt;/strong&gt;, with higher 1% lows.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;📦 New versionCode 8 compatibility layers&lt;/strong&gt; — every Proton / GE-Proton &lt;strong&gt;11.x&lt;/strong&gt; layer rebuilt with the Wayland driver and HDR10, plus &lt;strong&gt;Proton-CachyOS&lt;/strong&gt; joining the catalog and x86_64 builds for GE 11.0-7, 11.0-7.1 and CachyOS. Proton 10.0-4 and GE 10.0-34 stay at v7.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;🎮 A physical controller stick can move the mouse&lt;/strong&gt; with the on-screen controls switched off.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;🆕 Earlier — 3.1.1 (the XMB update)&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;The XMB update.&lt;/strong&gt; The Games tab gets an &lt;strong&gt;XMB view&lt;/strong&gt; — scroll through your games side to side, the way the PlayStation 3&#39;s menu works, and open every setting and tool for the game in focus right there, without pop-ups; built for a controller, in portrait and landscape. &lt;strong&gt;LSFG Native&lt;/strong&gt; gets two experimental options from community contributor &lt;strong&gt;clintOnSky&lt;/strong&gt; — a lower &lt;strong&gt;capture resolution&lt;/strong&gt; that makes frame generation much lighter on weaker phones, and support for stock drivers that only report Vulkan 1.1 — and it starts faster when you turn it on. Entirely app-side — &lt;strong&gt;no ImageFS reinstall&lt;/strong&gt;; install over 3.1.0 and everything carries over. Full notes: &lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/docs/releases/3.1.1.md&quot;&gt;&lt;code&gt;docs/releases/3.1.1.md&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;🎮 XMB view.&lt;/strong&gt; Tap the Games tab&#39;s view button until you reach &lt;strong&gt;XMB&lt;/strong&gt;. Games run across, the focused game&#39;s options run down, with an info panel (store badges, settings chips, playtime, genres, Metacritic, description) and an animated background in your accent colour. Settings, Game Details, Properties, Clone, Remove, logs, community configs, cover scraping, Copy to Drive C, save backup / restore and Change executable all open as further XMB columns instead of pop-ups, and changes save as you go. Controller: left / right games, up / down options, &lt;strong&gt;A&lt;/strong&gt; picks, &lt;strong&gt;B&lt;/strong&gt; goes back, &lt;strong&gt;LB / RB&lt;/strong&gt; jump five games or switch sections. Tested on an AYANEO Pocket FIT in both orientations.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;🎞️ LSFG Native: capture resolution and Vulkan 1.1 drivers (experimental, off by default).&lt;/strong&gt; Run frame generation at a lower height (Panel / Game / a height, never below a quarter of the screen) and scale the result up — far cheaper on the GPU, post effects and upscalers still work. A &lt;strong&gt;Vulkan 1.1 compat&lt;/strong&gt; switch lets it run on a stock driver that has the right extensions. From &lt;strong&gt;clintOnSky&lt;/strong&gt; (&lt;a href=&quot;https://github.com/The412Banner/Bannerlator/pull/512&quot;&gt;#512&lt;/a&gt;), tested on his Adreno 710.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;⚡ LSFG Native starts faster.&lt;/strong&gt; In some setups it built its shaders twice when turned on; it now builds them once.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;🕹️ Per-game settings pop-up:&lt;/strong&gt; &lt;strong&gt;L1 / R1&lt;/strong&gt; switch between its sections from anywhere.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;🎮 Steam Controller over a USB cable&lt;/strong&gt; is now tested (thanks to &lt;strong&gt;TAR&lt;/strong&gt;).&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;🆕 Earlier — 3.1.0 (the Steam Controller update)&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;The Steam Controller update.&lt;/strong&gt; Bannerlator now talks to the &lt;strong&gt;Steam Controller&lt;/strong&gt; directly — the 2026 model, and the original over Bluetooth — so it works as a real controller in games, with your bindings, remappable back buttons and a trackpad mouse. Frame generation now &lt;strong&gt;fits your screen by itself&lt;/strong&gt; and warns when your numbers can&#39;t work. Plus &lt;strong&gt;SGSR HQ&lt;/strong&gt; upscaling, per-game &lt;strong&gt;texture filtering&lt;/strong&gt;, and new containers that start at a screen size matching your panel. Entirely app-side — &lt;strong&gt;no ImageFS reinstall&lt;/strong&gt;; install over 3.0.9 and everything carries over. Full notes: &lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/docs/releases/3.1.0.md&quot;&gt;&lt;code&gt;docs/releases/3.1.0.md&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;🎮 Steam Controller support (opt-in).&lt;/strong&gt; Input Controls → Device → &lt;strong&gt;Steam Controller&lt;/strong&gt;. Out of the box a Steam Controller acts as a keyboard and mouse; Bannerlator now opens it through &lt;strong&gt;SDL3&lt;/strong&gt;&#39;s Steam Controller driver and reads it as a full controller — its own player slot, rumble, your profile&#39;s &lt;strong&gt;Default / Any Controller&lt;/strong&gt; bindings, &lt;strong&gt;extra buttons&lt;/strong&gt; (L4 / L5 / R4 / R5 and the &lt;strong&gt;…&lt;/strong&gt; button) mappable to any button, click or key, a &lt;strong&gt;trackpad mouse&lt;/strong&gt; (right, left or both), and the Input Controls &lt;strong&gt;Test&lt;/strong&gt; dialog. Tested over Bluetooth and a USB cable; the wireless puck is supported but not tested yet. Thanks to &lt;strong&gt;TAR&lt;/strong&gt; for testing it through six builds.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;🎞️ Frame generation that fits your screen.&lt;/strong&gt; A side-menu warning when Max FPS × multiplier is more than your screen can show, with a one-tap &lt;strong&gt;Set Max FPS to N&lt;/strong&gt;; &lt;strong&gt;Auto (match FPS)&lt;/strong&gt; fits the display to exactly Max FPS × multiplier (or the closest rate above it) and turns on while frame generation runs — turn it off and that game remembers; and a plain &quot;can&#39;t run here&quot; reason (Renderer Driver below Vulkan 1.3, missing &lt;code&gt;Lossless.dll&lt;/code&gt;, non-Vulkan renderer) with the multiplier buttons greyed out.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;🖼️ SGSR HQ.&lt;/strong&gt; A new Scaling mode next to SGSR that follows the direction of edges for cleaner diagonals, at about the same cost (Vulkan and OpenGL).&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;🧵 Per-game texture filtering.&lt;/strong&gt; &lt;strong&gt;Anisotropic filtering&lt;/strong&gt; (2×–16×) and &lt;strong&gt;Texture sharpness&lt;/strong&gt; (&lt;em&gt;Auto&lt;/em&gt; matches your upscaling) in the DXVK / VEGAS settings, for DirectX 9–11 games.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;📐 New containers fit your panel.&lt;/strong&gt; 1280×800 on 16:10 and 3:2 screens, 1280×960 on 4:3 ones; 16:9 stays at 1280×720. Existing containers are never changed.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;📘 LSFG Native guide updated&lt;/strong&gt; for 3.1.0 — &lt;a href=&quot;https://the412banner.github.io/Bannerlator/lsfg-native-guide.html&quot;&gt;LSFG Native Made Simple&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;🆕 Earlier — 3.0.9 (the frame-generation update)&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;Win-FG Native&lt;/strong&gt;, Bannerlator&#39;s own frame generation, moved into Bannerlator&#39;s compositor — where it finally works: nothing to buy, nothing to import, an exact 2× on real hardware, and its source is public (MIT). Full notes: &lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/docs/releases/3.0.9.md&quot;&gt;&lt;code&gt;docs/releases/3.0.9.md&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;🎞️ Win-FG Native in the compositor.&lt;/strong&gt; Measured 45 → 90 fps at 2× on an Adreno 750 — as an in-game layer it had been losing its generated frames — and it switches on in about 124 ms. Source: &lt;a href=&quot;https://github.com/The412Banner/win-fg&quot;&gt;The412Banner/win-fg&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;🩹 LSFG Native — three fixes.&lt;/strong&gt; No smear on switch-on, the switch-on stall roughly halved (4.8 s → 2.25 s), and two freeze paths closed.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;💾 Save backups carry the emulator&#39;s account id&lt;/strong&gt;, so a restored save no longer shows only &lt;em&gt;New Game&lt;/em&gt; after a container rebuild.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;💽 Move an installed Steam game&lt;/strong&gt; between internal storage and the SD card, from the game&#39;s ⋮ menu.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;🎛️ Preset editing&lt;/strong&gt; on the Container screen and in a game&#39;s own settings, scoped to where you make the edit.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;📦 New &lt;code&gt;-arm64ec-6&lt;/code&gt; compatibility layers&lt;/strong&gt; — controllers no longer stop working part-way through a game.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;🆕 Earlier — 3.0.8 (the downloads-and-containers update)&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;The downloads-and-containers update.&lt;/strong&gt; Epic, GOG and Amazon downloads move onto the same Rust engine Steam uses — two to nearly three times faster on the same titles. Containers are no longer stuck on the compatibility layer they were created with: when a newer layer appears, the container card offers &lt;strong&gt;Update layer&lt;/strong&gt;, downloads it if needed, keeps your games, saves, shortcuts and settings, and can put the old one back. New &lt;code&gt;-arm64ec-5&lt;/code&gt; layers fix the Denuvo unwinder crash (&lt;strong&gt;Need for Speed Heat&lt;/strong&gt; now reaches gameplay). Also: one-tap &lt;strong&gt;Screen Effect Looks&lt;/strong&gt;, a &lt;strong&gt;Media tab&lt;/strong&gt; on every store page, and the file-manager and EA fixes reported since 3.0.7. Entirely app-side — &lt;strong&gt;no ImageFS reinstall&lt;/strong&gt;; install over 3.0.7 and everything carries over. Full notes: &lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/docs/releases/3.0.8.md&quot;&gt;&lt;code&gt;docs/releases/3.0.8.md&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;⬇️ Epic, GOG and Amazon downloads on the Rust engine.&lt;/strong&gt; The last three Java download managers are replaced by the adaptive-concurrency engine Steam already uses. Same title, same Wi-Fi: GOG 4.5 s → &lt;strong&gt;2.2 s&lt;/strong&gt;, Epic 11.4 s → &lt;strong&gt;4.3 s&lt;/strong&gt;, Amazon 68 s → &lt;strong&gt;48 s&lt;/strong&gt;. A &lt;strong&gt;Store download speed&lt;/strong&gt; row in Log Manager (Slow/Medium/Fast/Blazing, default Fast) sets how many pieces are pulled at once; the Java engines stay as a fallback.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;🔄 Update a container&#39;s compatibility layer in place.&lt;/strong&gt; When a newer build of your container&#39;s layer exists, the container card offers &lt;strong&gt;Update layer → vN&lt;/strong&gt; with a &lt;strong&gt;?&lt;/strong&gt; explainer. It backs up the registry, switches the layer and refreshes only Wine&#39;s own files — &lt;strong&gt;games, saves, shortcuts and container settings are kept&lt;/strong&gt;, DXVK / FEX / game files untouched. If the layer is only in the catalog it is downloaded first. The old layer stays installed and &lt;strong&gt;Revert layer&lt;/strong&gt; is in the ⋮ menu.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;📦 New &lt;code&gt;-arm64ec-5&lt;/code&gt; compatibility layers.&lt;/strong&gt; All seven Proton / GE-Proton layers rebuilt (&lt;a href=&quot;https://github.com/The412Banner/proton-wine/releases/tag/build-bionic-layers-20260907-eccode&quot;&gt;&lt;code&gt;build-bionic-layers-20260907-eccode&lt;/code&gt;&lt;/a&gt;, now the catalog default): a Wine &lt;code&gt;RtlIsEcCode&lt;/code&gt; bounds check that stops Denuvo-protected games dying in the exception unwinder (&lt;strong&gt;Need for Speed Heat&lt;/strong&gt; now reaches gameplay, and &lt;strong&gt;Titanfall 2&lt;/strong&gt; boots), DirectAudio v1.3.2, and one &lt;code&gt;.wcp&lt;/code&gt; per layer for both 4 KB and 16 KB page sizes. &lt;em&gt;Components matter: Heat was proven on this layer with a FEXCore nightly, and black-screens on a different one — see the release notes.&lt;/em&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;🎨 Screen Effect &quot;Looks&quot;.&lt;/strong&gt; One-tap presets heading the drawer&#39;s Screen Effects section on both renderer paths — Game Clarity, Vivid, Cinematic, Competitive, Filmic, Arcade, Retro CRT and more — plus a new &lt;strong&gt;Saturation&lt;/strong&gt; control on both paths so the colour Looks grade identically.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;🛒 Store Media tab.&lt;/strong&gt; Screenshots and trailers on the Steam, GOG, Epic and Amazon detail pages; the official catalog can also be used as a Contents repository, and a download can be kept as a save archive only.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;🛠️ Fixes.&lt;/strong&gt; File manager: the up arrow and Back work after opening a Favorite or a side-bar shortcut, and every folder lists a &lt;strong&gt;&lt;code&gt;..&lt;/code&gt;&lt;/strong&gt; row (&lt;a href=&quot;https://github.com/The412Banner/Bannerlator/issues/476&quot;&gt;#476&lt;/a&gt;); EA setup finds games added before EA support existed (the Need for Speed Heat &quot;couldn&#39;t locate the install folder&quot; report); layers with a version code of 10 or higher resolve instead of falling back to Proton 9; Relative Mouse saved per game (&lt;a href=&quot;https://github.com/The412Banner/Bannerlator/issues/431&quot;&gt;#431&lt;/a&gt;); uniform file-manager card height (&lt;a href=&quot;https://github.com/The412Banner/Bannerlator/issues/475&quot;&gt;#475&lt;/a&gt;); the launch failure card&#39;s Close works from the Games screen.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;🆕 Earlier — 3.0.7 (the EA update)&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;EA-published games from your Steam library&lt;/strong&gt; launch the way they do on a PC — Steam starts EA Desktop, EA Desktop starts the game. A one-time &lt;strong&gt;Set up EA Desktop&lt;/strong&gt; session per container, an &lt;strong&gt;EA&lt;/strong&gt; badge on detected titles, a card naming EA&#39;s reason when it refuses a licence, &lt;code&gt;-arm64ec-4&lt;/code&gt; layers with the EA networking and installer fixes, and a rebuilt &lt;strong&gt;Input Controls import&lt;/strong&gt; flow with live previews. Full notes: &lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/docs/releases/3.0.7.md&quot;&gt;&lt;code&gt;docs/releases/3.0.7.md&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;🎮 EA games from your Steam library.&lt;/strong&gt; Origin-era and EA-app-era titles are detected and get an &lt;strong&gt;EA&lt;/strong&gt; badge. The first launch offers a one-time &lt;strong&gt;Set up EA Desktop&lt;/strong&gt; session (you click through EA&#39;s installer; the app handles Mono, Gecko, the registry and the Steam install script). After that it is press-play: the game starts through Steam and EA Desktop in the right order, and the session stays alive through EA&#39;s hand-offs. Device-proven with &lt;strong&gt;Need for Speed Payback / Most Wanted (2012) / Rivals&lt;/strong&gt; and &lt;strong&gt;STAR WARS Jedi: Survivor&lt;/strong&gt;. Needs the &lt;strong&gt;SteamLite&lt;/strong&gt; launch mode (selected and remembered for EA titles), the new &lt;strong&gt;&lt;code&gt;-4&lt;/code&gt; compatibility layers&lt;/strong&gt; from the catalog and the hosted &lt;strong&gt;SteamLite v7&lt;/strong&gt; client. Titles using EA&#39;s Javelin anti-cheat are refused up front. &lt;em&gt;Researched and implemented by The412Banner by reverse-engineering GameHub&#39;s EA launch methods and techniques.&lt;/em&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;📦 New compatibility layers.&lt;/strong&gt; All seven Proton / GE-Proton layers rebuilt into a new &lt;code&gt;-arm64ec-4&lt;/code&gt; slot (&lt;a href=&quot;https://github.com/The412Banner/proton-wine/releases/tag/build-bionic-layers-20260906-eanet2&quot;&gt;&lt;code&gt;build-bionic-layers-20260906-eanet2&lt;/code&gt;&lt;/a&gt;): EA Desktop can go online (dual-stack DNS + a real default route) and, on the Wine 11 layers, EA&#39;s installer no longer aborts on a GDI+ assertion. Create a fresh container on a &lt;code&gt;-4&lt;/code&gt; layer for EA titles; existing containers keep their layer.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;⚠️ EA limits to know.&lt;/strong&gt; Older EA games (e.g. Payback) ask for the EA sign-in on every launch, and EA counts each one — too many in a short period and EA refuses the game for a while (&quot;too many computers&quot;; clears in hours, or via &lt;em&gt;Deauthorize computers&lt;/em&gt; in your EA account). Every container looks like a separate PC to EA. Need for Speed (2015) goes black after activation — open.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;🛑 When EA says no, you see why.&lt;/strong&gt; If EA Desktop refuses to license a game, a card names EA&#39;s reason with Retry / Open log folder / Close instead of a black screen.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;🕹️ Input Controls import rebuilt.&lt;/strong&gt; Arrows point the right way, a proper import chooser (in-app file manager / system picker / community list), and a per-row &lt;strong&gt;preview&lt;/strong&gt; in Download Profiles so you can see a layout before importing it.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;🎞️ LSFG Native follow-ups.&lt;/strong&gt; Each generated frame is presented as soon as it is ready; the drawer shows the chain&#39;s GPU cost in ms per generated frame; the shader cache is built at import; the pacer&#39;s ceiling comes from the panel&#39;s top refresh mode.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;🛠️ Fixes.&lt;/strong&gt; HUD API line reads the game&#39;s real API on EA titles (D3D11 · DXVK, not D3D12); stray &quot;EA&quot; cards no longer appear in the Games grid; SteamLite / Goldberg updates can&#39;t leave the client missing; one broken shortcut file no longer crashes the app at start; EA titles render on app-built containers (ASCII install path); install-script registry parity with the real Steam client.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;🆕 Earlier — 3.0.2 (the Steam-focused update)&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;A Steam-focused update&lt;/strong&gt; on top of the &lt;code&gt;3.0.1&lt;/code&gt; point release — Friends &amp;amp; Chat, real-Steam (VAC) online play, achievements &amp;amp; cloud saves, one-touch save syncing and SD-card installs, plus graphics / frame-gen and runtime polish. Entirely app-side — &lt;strong&gt;no ImageFS reinstall&lt;/strong&gt;; install over 3.0.x and your containers, Wine installs, themes, accent colour and per-game settings all carry over. (Real-Steam is a separate one-time in-app download.)&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;🖥️ Steam Friends &amp;amp; Chat (off by default).&lt;/strong&gt; A full friends list with live presence (online / in-game / away), unread badges and collapsible sections; &lt;strong&gt;per-friend chat with text &lt;em&gt;and&lt;/em&gt; images&lt;/strong&gt;, persisted history that opens at the newest / first-unread message, add-by-code / name-search / quick-invite, an in-app friend profile, a landscape two-pane view, chat notifications with a sound toggle, typing indicators, and instant reconnect after a background drop. The whole feature is a &lt;strong&gt;master opt-in&lt;/strong&gt; that stays dormant until you turn it on. 🙏 Thanks to &lt;strong&gt;iamtooshaar&lt;/strong&gt; (Discord) for helping test and shake out the bugs.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;🔐 SteamLite — real Steam (VAC) online.&lt;/strong&gt; A new launch mode that runs a game through the &lt;strong&gt;genuine Steam client&lt;/strong&gt; for a VAC-eligible, online session — chosen per game in the launch popup (RealSteam / Goldberg / Raw). It watches the game&#39;s &lt;strong&gt;launcher exe&lt;/strong&gt; (not the arch-specific &lt;code&gt;…_win64&lt;/code&gt;) so the game launches &lt;em&gt;secure&lt;/em&gt; regardless of which exe the shortcut names, pops the in-game gold achievement pill for real-Steam unlocks, and can capture an opt-in scrubbed log for diagnosing a launch. The Steam client + clean-room headless agent ship as a downloadable &lt;strong&gt;&lt;a href=&quot;https://github.com/The412Banner/winlator-contents/releases/tag/steamlite-v1&quot;&gt;&lt;code&gt;steamlite-v1&lt;/code&gt;&lt;/a&gt;&lt;/strong&gt; content package, installed from inside the app. &lt;strong&gt;Device-proven online&lt;/strong&gt; on &lt;strong&gt;Counter-Strike 1.6&lt;/strong&gt;, &lt;strong&gt;Counter-Strike: Source&lt;/strong&gt;, &lt;strong&gt;Team Fortress 2&lt;/strong&gt; and &lt;strong&gt;Left 4 Dead 2&lt;/strong&gt; (VAC-secured), plus &lt;strong&gt;Brawlhalla&lt;/strong&gt; and &lt;strong&gt;Stumble Guys&lt;/strong&gt; (live-service); &lt;strong&gt;Borderlands 2&lt;/strong&gt; is in testing.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;🏆 Achievements &amp;amp; cloud saves — in both launch modes.&lt;/strong&gt; Real Steam achievements are seeded from your account into a &lt;strong&gt;tabbed detail-page grid&lt;/strong&gt;, with in-game &lt;strong&gt;gold pills&lt;/strong&gt; as you unlock them — and they unlock &lt;strong&gt;and&lt;/strong&gt; sync whether you play through &lt;strong&gt;Goldberg&lt;/strong&gt; (emulated) or &lt;strong&gt;SteamLite&lt;/strong&gt; (real Steam / VAC), the same pill and the same sync-back either way. Cloud saves keep parity around each play session, and a new one-touch &lt;strong&gt;&quot;Sync Now&quot;&lt;/strong&gt; button on the Save Manager banner syncs &lt;strong&gt;every&lt;/strong&gt; flagged game at once — each in the correct direction (upload what&#39;s newer locally, pull what&#39;s newer in the cloud) — with a live &quot;Syncing 3/7…&quot; count instead of tapping each game.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;💾 Install Steam games to an SD card.&lt;/strong&gt; A per-game toggle installs a Steam download onto a removable SD card to free internal space; the shortcut resolves through a &lt;strong&gt;container drive letter&lt;/strong&gt;, so secure launch, saves and achievements are unaffected.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;🏪 Rebuilt Steam store.&lt;/strong&gt; The per-game detail screen was redesigned into a cleaner, &lt;strong&gt;landscape-aware tabbed&lt;/strong&gt; layout (overview · achievements grid · DLC) with the store badge, connection state and launch actions in one place — plus a live connection pill, auto-connect on launch, download hardening and full owned-DLC listing.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;🎞️ Graphics &amp;amp; frame-gen fixes.&lt;/strong&gt; A fuller frame-gen pause / teardown / resume reset on level / model / preset change, a swapchain-recreate config reload, an Adreno-840 present-id freeze fix, and in-app frame-gen diagnostics.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;🎛️ Containers, launch &amp;amp; file manager.&lt;/strong&gt; &lt;strong&gt;DXVK HUD is now off by default&lt;/strong&gt; on new containers (still toggleable in the env-var editor), a redesigned source- and orientation-adaptive launch popup, a &lt;strong&gt;CUSTOM&lt;/strong&gt; origin badge for games you add yourself, and file attributes (Read-only / Hidden) shown in the File Manager.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Also rolled up from the &lt;strong&gt;&lt;code&gt;3.0.1&lt;/code&gt;&lt;/strong&gt; point release on 3.0.0: &lt;strong&gt;swipeable on-screen controls&lt;/strong&gt; (slide-to-press, a per-element toggle and a dedicated &lt;strong&gt;Swipe&lt;/strong&gt; drawer tab), an LSFG frame-gen fix, a Steam depot &lt;strong&gt;OOM&lt;/strong&gt; fix (&lt;a href=&quot;https://github.com/The412Banner/Bannerlator/issues/408&quot;&gt;#408&lt;/a&gt;), a controls-alignment fix (&lt;a href=&quot;https://github.com/The412Banner/Bannerlator/issues/413&quot;&gt;#413&lt;/a&gt;), and assorted File-Manager / ETA / crash fixes.&lt;/p&gt; 
&lt;h3&gt;🆕 Earlier — 3.0.0 (the big 3.0 stable)&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;The big 3.0 stable&lt;/strong&gt; — rolls up everything since 2.9.9, including the &lt;code&gt;3.0.0-pre1&lt;/code&gt; / &lt;code&gt;pre2&lt;/code&gt; opt-in betas. Entirely app-side — &lt;strong&gt;no ImageFS reinstall&lt;/strong&gt;; install over 2.9.9 and your containers, Wine installs, themes, accent colour and per-game settings all carry over. Full notes on the &lt;a href=&quot;https://github.com/The412Banner/Bannerlator/releases/tag/3.0.0&quot;&gt;&lt;strong&gt;3.0.0 release page&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;🔊 New three-engine audio stack (the headline).&lt;/strong&gt; The ground-up audio rebuild that was &quot;coming soon&quot; in 2.9.9 has landed: a new &lt;strong&gt;adaptive PulseAudio engine&lt;/strong&gt; (grows its buffer on crackle/underruns, re-opens cleanly when your output changes), a second &lt;strong&gt;adaptive ALSA&lt;/strong&gt; engine, and an experimental third &lt;strong&gt;DirectAudio&lt;/strong&gt; driver — each with an Audio cog in the container editor, per-game shortcut settings and the in-game side-menu, presets + fine-tune rows, a per-row &lt;strong&gt;&quot;?&quot;&lt;/strong&gt; explanation, and a latency slider that really drives the buffer. Strict per-engine / per-scope settings mean changing one never rewrites another.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;🛒 Storefronts + automatic cloud saves across GOG, Epic &amp;amp; Steam.&lt;/strong&gt; GOG gets a major overhaul — automatic cloud saves (auto-path, upload-on-exit / download-on-launch, content-hash skip), MD5 verify + repair, redistributable auto-install, per-DLC installs, faster parallel downloads, and a Save Manager tab with cover art. Epic / EOS adds cloud saves, real launch-time sign-in + EOS game IDs, EPIC/EOS badges, Denuvo &amp;amp; offline support, and a robust cancelable downloader. Steam adds one-tap &lt;strong&gt;Lossless Scaling &quot;Detect from store&quot;&lt;/strong&gt;, beta-branch selection, and non-game apps in your library.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;🎮 Games &amp;amp; shortcuts.&lt;/strong&gt; The internal-storage intro-movie hang fix — &lt;strong&gt;add a game from Drive C&lt;/strong&gt; and &lt;strong&gt;Copy game to Drive C&lt;/strong&gt; (moves a game onto the container&#39;s fast C: drive and re-points the shortcut), plus &lt;strong&gt;Change executable&lt;/strong&gt;, a file picker that opens at your storage root with a working Back button, responsive shortcut settings, per-DLL toggles, per-game graphics persistence, and an opt-in &lt;strong&gt;Big Picture games wall&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;🖥️ Graphics &amp;amp; performance.&lt;/strong&gt; Hardened Native Rendering with a per-container / per-game &lt;strong&gt;backend picker&lt;/strong&gt;, clean-room &lt;strong&gt;win-fg&lt;/strong&gt; frame generation (replaces bionic-fg, adapts AMD FidelityFX FSR3), Samsung Galaxy &lt;strong&gt;no-root power control&lt;/strong&gt;, a live &lt;strong&gt;Performance dashboard&lt;/strong&gt;, an upgraded &lt;strong&gt;Fusion HUD&lt;/strong&gt; (battery temp, accurate DXVK/VKD3D label), and a new &lt;strong&gt;Contents hub&lt;/strong&gt; for browsing/installing/removing GPU drivers &amp;amp; components. Plus a &lt;strong&gt;wrapper + Adreno Vulkan fix (&lt;a href=&quot;https://github.com/The412Banner/Bannerlator/issues/403&quot;&gt;#403&lt;/a&gt;)&lt;/strong&gt; — DXVK/games start again on wrapper drivers and low-tier Adreno (e.g. 610).&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;🐛 Stability.&lt;/strong&gt; Rootless native crash-capture with real backtraces, a background-pause fix for games with very long executable names, malformed-environment-variable resilience, and assorted X-server leak/crash fixes.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🎞️ Frame Generation &amp;amp; Present Modes&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;Frame generation&lt;/strong&gt; inserts in-between frames to make motion look smoother — it helps most when a game runs &lt;em&gt;below&lt;/em&gt; your screen&#39;s refresh rate. It runs on the &lt;strong&gt;Vulkan renderer&lt;/strong&gt;, and there are two engines:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Engine&lt;/th&gt; 
   &lt;th&gt;Where it runs&lt;/th&gt; 
   &lt;th&gt;Needs&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Win-FG Native&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;inside Bannerlator&#39;s compositor (Android side)&lt;/td&gt; 
   &lt;td&gt;nothing — Bannerlator&#39;s own, weightless&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;LSFG Native&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;inside Bannerlator&#39;s compositor (Android side)&lt;/td&gt; 
   &lt;td&gt;your own &lt;code&gt;Lossless.dll&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;em&gt;(The older &lt;strong&gt;lsfg-vk&lt;/strong&gt; engine, which ran the same shaders as a layer inside the game, is retired: its generated frames were routinely lost on the way to the screen. LSFG Native uses the same DLL and replaces it; containers still set to lsfg-vk run LSFG Native.)&lt;/em&gt;&lt;/p&gt; 
&lt;p&gt;Both engines are what to reach for on a game you&#39;ve capped: lock the game at &lt;strong&gt;30&lt;/strong&gt;, pick &lt;strong&gt;4×&lt;/strong&gt;, and the panel gets &lt;strong&gt;120&lt;/strong&gt; — with the game itself untouched, the device cooler than running it uncapped, and the in-game HUD showing &lt;code&gt;30→120&lt;/code&gt;. They work best at or under &lt;strong&gt;panel ÷ 4&lt;/strong&gt; (36 fps on a 144 Hz screen fills every refresh). &lt;strong&gt;Win-FG Native&lt;/strong&gt; needs no files at all; &lt;strong&gt;LSFG Native&lt;/strong&gt; runs the Lossless Scaling shaders out of your own DLL.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Present mode&lt;/strong&gt; decides how finished frames are handed to your screen:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Mode&lt;/th&gt; 
   &lt;th&gt;What it does&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;FIFO&lt;/strong&gt; (default)&lt;/td&gt; 
   &lt;td&gt;&quot;Vsync on&quot; — smooth, tear-free, most battery-friendly, but it makes the game wait for the display.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Mailbox&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&quot;Fast vsync&quot; — never makes the game wait, still tear-free.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Immediate&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&quot;Vsync off&quot; — lowest input lag, but can tear.&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;Bannerlator handles the present mode for you. &lt;strong&gt;Both native engines force FIFO&lt;/strong&gt; while they&#39;re generating — they queue the real and generated frames together and need FIFO to show them one per refresh; under Mailbox the display would keep only the newest and discard the rest. Your chosen mode is restored the moment frame generation turns off. While a native engine is generating it also switches the &lt;strong&gt;FPS limiter on&lt;/strong&gt; and turns &lt;strong&gt;Auto (match FPS)&lt;/strong&gt; on, which fits the screen to Max FPS × multiplier — the exact rate, or the closest one above it (turn Auto off and that game remembers). If Max FPS × multiplier is more than your screen can show, the side menu warns you and offers a one-tap fix. Both controls come back as you had them when frame generation stops. New to it? Read &lt;strong&gt;&lt;a href=&quot;https://the412banner.github.io/Bannerlator/lsfg-native-guide.html&quot;&gt;LSFG Native Made Simple&lt;/a&gt;&lt;/strong&gt;. You can also switch modes live from the &lt;strong&gt;Present Mode selector&lt;/strong&gt; in the in-game Graphics tab, and every mode is explained by a &lt;strong&gt;&quot;?&quot;&lt;/strong&gt; button and in the in-app &lt;strong&gt;&quot;What is all this?&quot;&lt;/strong&gt; glossary.&lt;/p&gt; 
&lt;h3&gt;Should I switch my games to Wayland?&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;No — not the ones you care about.&lt;/strong&gt; Wayland is &lt;strong&gt;experimental&lt;/strong&gt; and new. X11 is still the default, still fully supported, and still the right choice for playing. Wayland exists so you can &lt;em&gt;try&lt;/em&gt; the things X11 cannot do — HDR10, playing on a TV, zero-copy presentation, picking a game driver per game — ideally on a spare container rather than the one with your save files.&lt;/p&gt; 
&lt;p&gt;It also has hard requirements: a &lt;strong&gt;versionCode 8 arm64ec Proton 11 layer&lt;/strong&gt; (the &lt;strong&gt;(v8)&lt;/strong&gt; rows in the catalog) and an &lt;strong&gt;Adreno&lt;/strong&gt; GPU. On anything else the option is greyed out and a launch falls back to X11 with a notice. If a game misbehaves on Wayland, switch that container back to X11 — one setting — and report it with the log from &lt;code&gt;Download/Wayland-logs/&lt;/code&gt;.&lt;/p&gt; 
&lt;h3&gt;Why is my FPS reading different from another emulator?&lt;/h3&gt; 
&lt;p&gt;With frame generation on, two apps&#39; FPS numbers can look very different — because they &lt;strong&gt;count frames at different points in the pipeline&lt;/strong&gt;:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;An app that reads the game&#39;s &lt;strong&gt;raw output&lt;/strong&gt; shows a clean &lt;strong&gt;2× / 3× / 4×&lt;/strong&gt; — impressive, but it counts frames your screen never actually displays.&lt;/li&gt; 
 &lt;li&gt;Bannerlator&#39;s HUD counts the frames the &lt;strong&gt;game&lt;/strong&gt; delivers. With either native engine the generated frames are added &lt;em&gt;after&lt;/em&gt; that point, so every HUD style shows both numbers — &lt;strong&gt;&lt;code&gt;30→120&lt;/code&gt;&lt;/strong&gt; — the game&#39;s rate and what actually reaches the panel. On a guest-side layer (the frame-gen training-capture path) the same arrow appears only if frames are being &lt;em&gt;lost&lt;/em&gt; between the game and the panel (e.g. &lt;code&gt;70→35&lt;/code&gt;), which is a problem rather than a feature.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Neither number is &quot;frames on glass.&quot;&lt;/strong&gt; Your panel&#39;s refresh rate (e.g. 120 or 144 Hz) is the true ceiling — above it, frames are generated but not shown. A result like &lt;strong&gt;65 → 107 fps at 2×&lt;/strong&gt; on a demanding game, with the frametime roughly &lt;strong&gt;halving&lt;/strong&gt;, is frame generation working correctly.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;✨ Full Features&lt;/h2&gt; 
&lt;p&gt;Everything Bannerlator offers, at a glance. No PC and no root required — it runs Windows apps and games directly on your Android device.&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;🍷 Windows compatibility&lt;/b&gt;&lt;/summary&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;Wine&lt;/strong&gt; Windows compatibility layer — run native Win32/Win64 applications and games.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Box64 / Box86&lt;/strong&gt; x86 &amp;amp; x86-64 → ARM translation, with selectable performance presets.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;WOWBox64&lt;/strong&gt; for arm64ec containers (correctly labelled per container).&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;FEXCore&lt;/strong&gt; as an alternative x86/x64 emulation backend — with &lt;strong&gt;automatic unixlib (&lt;code&gt;.so&lt;/code&gt;) matching&lt;/strong&gt;: whichever FEXCore version you pick per game or container, the native &lt;code&gt;.so&lt;/code&gt; companion is kept in sync on every launch (matched for unixlib builds, cleared for DLL-only), so there&#39;s never a stale or mismatched &lt;code&gt;.so&lt;/code&gt;.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;arm64ec&lt;/strong&gt; and &lt;strong&gt;x64&lt;/strong&gt; container support.&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;🎨 Graphics &amp;amp; translation layers&lt;/b&gt;&lt;/summary&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;📖 &lt;strong&gt;Not sure which graphics driver or wrapper to use? &lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/docs/graphics-wrappers-guide.md&quot;&gt;Read the wrapper &amp;amp; driver guide →&lt;/a&gt;&lt;/strong&gt; — what a wrapper actually does, a pick-by-GPU table (Adreno / Mali / Xclipse / PowerVR), every built-in driver explained, all 18 catalog wrappers with their authors and upstream links, which of them are &lt;strong&gt;byte-identical across projects&lt;/strong&gt; (so you don&#39;t test the same file twice), and troubleshooting.&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;DXVK&lt;/strong&gt; — DirectX 8 / 9 / 10 / 11 → Vulkan (with GPLAsync and Sarek variants).&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;VKD3D-Proton&lt;/strong&gt; — DirectX 12 → Vulkan.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;WineD3D / DirectDraw&lt;/strong&gt; OpenGL fallback paths for older titles.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;D7VK&lt;/strong&gt; — DirectX 7 / DirectDraw (Direct3D 3–7) → Vulkan for old 2D/3D titles that otherwise take the slow OpenGL path (&lt;a href=&quot;https://github.com/WinterSnowfall/d7vk&quot;&gt;WinterSnowfall&lt;/a&gt;&#39;s DXVK-lineage Vulkan implementation). Selectable in the &lt;strong&gt;DDraw Wrapper&lt;/strong&gt; picker &lt;strong&gt;per container and per game&lt;/strong&gt;; ships &lt;strong&gt;bundled&lt;/strong&gt; as the default and is &lt;strong&gt;catalog-backed&lt;/strong&gt; — a &lt;strong&gt;&quot;D7VK Version&quot;&lt;/strong&gt; dropdown lets you download and switch between nightly d7vk builds.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Proton bionic&lt;/strong&gt; translation layers (via GameNative) — including &lt;strong&gt;Proton 11.0-1&lt;/strong&gt; in &lt;strong&gt;arm64ec&lt;/strong&gt; and &lt;strong&gt;x86-64&lt;/strong&gt; builds, packaged per Android SDK (&lt;strong&gt;SDK 28&lt;/strong&gt; for Android 9-era, &lt;strong&gt;SDK 35&lt;/strong&gt; for Android 15) and downloadable from the Compatibility Layers menu.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;VEGAS&lt;/strong&gt; — Adreno-optimized DXVK for reduced stutter and real-time upscaling on mobile GPUs. 
   &lt;ul&gt; 
    &lt;li&gt; 
     &lt;blockquote&gt; 
      &lt;p&gt;📖 &lt;strong&gt;New to VEGAS?&lt;/strong&gt; Read the &lt;strong&gt;&lt;a href=&quot;https://htmlpreview.github.io/?https://github.com/The412Banner/Bannerlator/raw/main/docs/vegas_faq.html&quot;&gt;VEGAS DXVK FAQ&lt;/a&gt;&lt;/strong&gt; — install, config, FSR, tiers, frame generation &amp;amp; shader-stutter troubleshooting.&lt;/p&gt; 
     &lt;/blockquote&gt; &lt;/li&gt; 
    &lt;li&gt; 
     &lt;blockquote&gt; 
      &lt;p&gt;🚀 &lt;strong&gt;Support VEGAS Development&lt;/strong&gt; — low-level graphics dev &amp;amp; vibecoder: debugging, refactoring &amp;amp; improving original DXVK code for Adreno. &lt;strong&gt;&lt;a href=&quot;https://github.com/sponsors/isygold&quot;&gt;❤️ Sponsor isygold →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; 
     &lt;/blockquote&gt; &lt;/li&gt; 
   &lt;/ul&gt; &lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Per-game texture filtering&lt;/strong&gt; &lt;em&gt;(new in 3.1.0)&lt;/em&gt; — &lt;strong&gt;Anisotropic filtering&lt;/strong&gt; (2× / 4× / 8× / 16×) and &lt;strong&gt;Texture sharpness&lt;/strong&gt; (Game default / Auto / −0.25 to −1.0; &lt;em&gt;Auto&lt;/em&gt; matches your upscaling, following AMD&#39;s FSR guidance) in the DXVK / VEGAS settings, per container or per game. DirectX 9–11 (DXVK) only; nothing changes at &lt;em&gt;Game default&lt;/em&gt;.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Turnip / Mesa&lt;/strong&gt; open-source Adreno Vulkan drivers, with Timeline Semaphore patches for newer DXVK; bundled and downloadable driver options.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Driver-source management&lt;/strong&gt; — add, toggle and remove your own &lt;strong&gt;adrenotools GPU-driver feeds&lt;/strong&gt; (a custom JSON URL or a GitHub &lt;code&gt;owner/repo&lt;/code&gt;) on top of the built-in sources, so you can pull Turnip / driver builds straight from the repos you trust. &lt;em&gt;(Requested in &lt;a href=&quot;https://github.com/The412Banner/Bannerlator/issues/160&quot;&gt;#160&lt;/a&gt;.)&lt;/em&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;BCn transcoding for Mali / Xclipse&lt;/strong&gt; — a &lt;strong&gt;&quot;Wrapper + bcn_layer&quot;&lt;/strong&gt; graphics driver (&lt;a href=&quot;https://github.com/leegao&quot;&gt;leegao&lt;/a&gt;&#39;s &lt;a href=&quot;https://github.com/leegao/bcn_layer&quot;&gt;bcn_layer&lt;/a&gt;, shader-v3) that decodes BC textures on the GPU, so BCn games run on GPUs without hardware BC support — with a &lt;strong&gt;BCn Layer Settings&lt;/strong&gt; panel (force-decode, ETC2 / ASTC transcode, image-view mode, debug logging). An experimental &lt;strong&gt;&quot;Wrapper-gamenative&quot;&lt;/strong&gt; driver (BCn baked into the wrapper, Adreno-only) is also selectable. &lt;em&gt;(Device-proven on Mali-G57.)&lt;/em&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Wrapper Version Manager&lt;/strong&gt; — bring your own graphics wrapper: &lt;strong&gt;import / update / delete&lt;/strong&gt; any &lt;code&gt;.tzst&lt;/code&gt; wrapper (from another project or your own build), browse a &lt;strong&gt;curated downloadable catalog&lt;/strong&gt; of wrappers from across the Winlator family (each credited to its source, flagged &lt;strong&gt;&quot;Mali only&quot;&lt;/strong&gt; where relevant), and get &lt;strong&gt;auto-detected settings&lt;/strong&gt; — real toggles / sliders / dropdowns read straight from what each wrapper actually supports, with driver internals and log noise filtered out. Per-entry &lt;strong&gt;Update / Reset / Edit / Delete / Details&lt;/strong&gt; plus a pre-import inspection view. &lt;em&gt;(Modeled on &lt;a href=&quot;https://github.com/GunaCharanTeja/WinlatorMali&quot;&gt;WinlatorMali&lt;/a&gt;&#39;s graphics-driver manager; requested in &lt;a href=&quot;https://github.com/The412Banner/Bannerlator/issues/132&quot;&gt;#132&lt;/a&gt;.)&lt;/em&gt; 📖 &lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/docs/graphics-wrappers-guide.md&quot;&gt;Which wrapper for my device? →&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Mali DX12 (experimental)&lt;/strong&gt; — a new opt-in &lt;strong&gt;6th graphics driver, &quot;Wrapper + compat + bcn&quot;&lt;/strong&gt;, pairing &lt;a href=&quot;https://github.com/leegao&quot;&gt;leegao&lt;/a&gt;&#39;s BCn transcode layer with a &lt;strong&gt;DX12 compat layer&lt;/strong&gt; and a &lt;strong&gt;&quot;Use GameNative engine (DX12)&quot;&lt;/strong&gt; toggle, for &lt;strong&gt;Valhall-class Mali&lt;/strong&gt; GPUs. Inert unless selected and unaffected on Qualcomm / Adreno; DX12 on Mali is still being proven on hardware — treat it as a &lt;strong&gt;test path&lt;/strong&gt; and report back with logs.&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;🖥️ Renderers&lt;/b&gt;&lt;/summary&gt; 
 &lt;ul&gt; 
  &lt;li&gt;Multiple host renderers — &lt;strong&gt;Vulkan&lt;/strong&gt;, &lt;strong&gt;OpenGL&lt;/strong&gt;, &lt;strong&gt;SurfaceFlinger&lt;/strong&gt;, and &lt;strong&gt;VirGL&lt;/strong&gt;.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Wayland display backend&lt;/strong&gt; &lt;em&gt;(experimental, new in 3.1.2)&lt;/em&gt; — an alternative to the Java X server: the game draws into Bannerlator&#39;s own embedded &lt;strong&gt;Wayland compositor&lt;/strong&gt;. Brings &lt;strong&gt;HDR10&lt;/strong&gt;, &lt;strong&gt;launching a game on an external screen / TV&lt;/strong&gt;, &lt;strong&gt;zero-copy presentation&lt;/strong&gt;, real &lt;strong&gt;mouse-look&lt;/strong&gt; and &lt;strong&gt;eight bundled Wayland Turnip drivers&lt;/strong&gt; selectable per game. Chosen &lt;strong&gt;per container&lt;/strong&gt;, off by default. &lt;em&gt;(3.1.4 pre-release 1: a built-in adapter runs your normal Turnip driver on Wayland too, so it&#39;s one driver choice, like X11.)&lt;/em&gt; 
   &lt;ul&gt; 
    &lt;li&gt; 
     &lt;blockquote&gt; 
      &lt;p&gt;⚠️ &lt;strong&gt;Experimental, and not a replacement for X11.&lt;/strong&gt; Expect bugs; X11 stays the default and stays supported. Requires a &lt;strong&gt;versionCode 8 arm64ec Proton 11 layer&lt;/strong&gt; (the &lt;strong&gt;(v8)&lt;/strong&gt; catalog rows) and an &lt;strong&gt;Adreno&lt;/strong&gt; GPU — Mali / Xclipse / PowerVR stay on X11.&lt;/p&gt; 
     &lt;/blockquote&gt; &lt;/li&gt; 
   &lt;/ul&gt; &lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;SurfaceFlinger renderer colour fix&lt;/strong&gt; — the SurfaceFlinger (ASurfaceRenderer) host renderer got a crash + colour-accuracy fix (red/blue channel swap corrected, GPU-side format converter, proper fencing), with a &lt;strong&gt;&quot;Correct SurfaceFlinger colours&quot;&lt;/strong&gt; toggle available &lt;strong&gt;per container and per game&lt;/strong&gt; (shown inline under the Renderer picker when SurfaceFlinger is selected, on by default). &lt;em&gt;(Ported from &lt;a href=&quot;https://github.com/utkarshdalal/GameNative&quot;&gt;GameNative&lt;/a&gt; #1620 / #1644.)&lt;/em&gt;&lt;/li&gt; 
  &lt;li&gt; 
   &lt;blockquote&gt; 
    &lt;p&gt;ℹ️ The &lt;strong&gt;Vulkan host renderer&lt;/strong&gt; uses the rendering path from &lt;strong&gt;&lt;a href=&quot;https://github.com/StevenMXZ/Winlator-Ludashi&quot;&gt;StevenMXZ&lt;/a&gt;&lt;/strong&gt; (Winlator-Ludashi); its &lt;code&gt;AHardwareBuffer&lt;/code&gt; present path — what makes Vulkan / DXVK / VKD3D content actually display correctly — was ported from / cross-examined against &lt;strong&gt;&lt;a href=&quot;https://github.com/utkarshdalal/GameNative&quot;&gt;GameNative&lt;/a&gt;&lt;/strong&gt;. See &lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/#-credits&quot;&gt;Credits&lt;/a&gt;.&lt;/p&gt; 
   &lt;/blockquote&gt; &lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Native Rendering (Low-Latency Mode)&lt;/strong&gt; — low-latency direct-scanout presentation on &lt;strong&gt;both the Vulkan &lt;em&gt;and&lt;/em&gt; OpenGL renderers&lt;/strong&gt;, skipping the compositor blit to cut input lag (mutually exclusive with that renderer&#39;s post-processing effects / scaling, since it bypasses the compositor).&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Spatial upscalers on &lt;em&gt;both&lt;/em&gt; the Vulkan &lt;em&gt;and&lt;/em&gt; OpenGL renderers&lt;/strong&gt; — &lt;strong&gt;SGSR&lt;/strong&gt; (Snapdragon GSR 1.0), &lt;strong&gt;SGSR HQ&lt;/strong&gt; &lt;em&gt;(new in 3.1.0 — its edge-direction variant, for cleaner diagonals)&lt;/em&gt; and &lt;strong&gt;FSR / FSR-Fit&lt;/strong&gt; (AMD FidelityFX Super Resolution 1.0), plus &lt;strong&gt;NIS&lt;/strong&gt; (NVIDIA Image Scaling, Vulkan), a &lt;strong&gt;Sharpen&lt;/strong&gt; (RCAS) mode and Linear / Nearest, all switchable live in the in-game drawer. On Vulkan it engages when a game renders below display resolution; on OpenGL it renders the scene at a reduced internal resolution and reconstructs it back up. Every sharpness slider runs 0 (off) → 100 (max). Your chosen scaling mode is now &lt;strong&gt;remembered per game&lt;/strong&gt; across relaunch.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Fullscreen aspect-ratio modes&lt;/strong&gt; — control how a game fills the screen, &lt;strong&gt;per container and per game&lt;/strong&gt;: &lt;strong&gt;Off&lt;/strong&gt; (windowed, letterboxed), &lt;strong&gt;Fit&lt;/strong&gt; (fullscreen, aspect preserved), &lt;strong&gt;Stretch&lt;/strong&gt; (fills, ignores aspect), &lt;strong&gt;Fill&lt;/strong&gt; (fills with aspect kept, cropping the overflow — no bars, no distortion) and &lt;strong&gt;Integer&lt;/strong&gt; (largest whole-number scale, pixel-perfect and centered). A five-button selector in the in-game drawer switches modes live without closing the drawer, on all three host renderers. Your choice is saved per game.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Supersampling (Render scale)&lt;/strong&gt; — render above display resolution (1.25× / 1.5× / 2×) and downsample with a Lanczos-2 filter for DSR / OGSSAA-style anti-aliasing; set per container / per shortcut.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Screen effects on both the OpenGL &lt;em&gt;and&lt;/em&gt; Vulkan renderers&lt;/strong&gt; — FXAA, Toon, CRT, NTSC, Color grading, &lt;strong&gt;CAS&lt;/strong&gt; sharpening, and fake-HDR (the Vulkan path runs them through a new post-processing pipeline; previously they were OpenGL-only).&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Debanding (Vulkan)&lt;/strong&gt; — an optional terminal dither pass that removes the visible banding from smooth gradients, skies, and dark scenes on 8-bit output, with an adjustable strength.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;ReShade post-processing&lt;/strong&gt; — run real ReShade &lt;code&gt;.fx&lt;/code&gt; effects (colour grading, sharpen, film grain, CRT, tonemap…) on &lt;strong&gt;DXVK / VKD3D&lt;/strong&gt; games. Effects compile &lt;strong&gt;on-device&lt;/strong&gt; via a bundled &lt;strong&gt;&lt;a href=&quot;https://github.com/DadSchoorse/vkBasalt&quot;&gt;vkBasalt&lt;/a&gt;&lt;/strong&gt; layer; pick from an &lt;strong&gt;on-demand catalog&lt;/strong&gt; of ~100 curated MIT/CC0 effects or drop your own into the &lt;code&gt;ReShade/&lt;/code&gt; folder. A dedicated in-game &lt;strong&gt;ReShade tab&lt;/strong&gt; auto-generates properly typed controls (sliders / toggles / dropdowns / colour pickers) from each shader, so you can &lt;strong&gt;toggle and tune effects live&lt;/strong&gt; with a Reset-to-defaults button. Effects are configured &lt;strong&gt;per game&lt;/strong&gt; (container or shortcut), persist across relaunch, and can be run &lt;strong&gt;solo or stacked&lt;/strong&gt;. &lt;em&gt;(Color effects today; depth effects such as SSAO/DOF are not included yet.)&lt;/em&gt; 
   &lt;ul&gt; 
    &lt;li&gt; 
     &lt;blockquote&gt; 
      &lt;p&gt;⚠️ &lt;strong&gt;Stacking multiple effects? Add them a few at a time.&lt;/strong&gt; Each effect compiles on-device and costs GPU — &lt;strong&gt;selecting too many at once can stop a game from starting&lt;/strong&gt;, showing a &lt;strong&gt;flat / blank screen&lt;/strong&gt; instead of the game. If that happens, &lt;strong&gt;uncheck effects one at a time&lt;/strong&gt; (or the specific heavy one) in the per-game &lt;strong&gt;ReShade effect&lt;/strong&gt; settings until it boots, then add more gradually.&lt;/p&gt; 
     &lt;/blockquote&gt; &lt;/li&gt; 
   &lt;/ul&gt; &lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Match refresh rate to FPS (VRR)&lt;/strong&gt; — the display&#39;s refresh rate can follow your frame rate: an &lt;strong&gt;Auto (match FPS)&lt;/strong&gt; toggle or a manual &lt;strong&gt;60 / 90 / 120 / 144 Hz&lt;/strong&gt; slider, on all three host renderers, auto-disabled on displays that don&#39;t support variable refresh.&lt;/li&gt; 
  &lt;li&gt;Adjustable resolution and frame-rate limit.&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;🎞️ Frame generation &amp;amp; pacing&lt;/b&gt;&lt;/summary&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;Two selectable frame-generation engines&lt;/strong&gt; — pick &lt;strong&gt;Off / Win-FG Native / LSFG Native&lt;/strong&gt; per container; the running engine is shown as a badge in the in-game drawer. &lt;strong&gt;Both now run inside Bannerlator&#39;s own compositor&lt;/strong&gt;, which is what lets their generated frames actually reach the panel. 
   &lt;ul&gt; 
    &lt;li&gt;&lt;strong&gt;Win-FG Native&lt;/strong&gt; — Bannerlator&#39;s own &lt;strong&gt;clean-room&lt;/strong&gt; frame generation (&lt;a href=&quot;https://github.com/The412Banner/win-fg&quot;&gt;source, MIT&lt;/a&gt;): FSR3-family optical flow plus from-scratch synthesis, no proprietary weights, &lt;strong&gt;nothing to buy and nothing to import&lt;/strong&gt;. Built in and ready out of the box. Device-proven 45 → 90 fps at 2× on an Adreno 750, and it arms in ~124 ms because its shaders are compiled in rather than parsed from a file. It previously ran as a layer &lt;em&gt;inside the game&lt;/em&gt;, where the compositor discarded most of its generated frames — the in-game counter read 2× while the panel showed 1×; running it natively removes that hop.&lt;/li&gt; 
    &lt;li&gt;&lt;strong&gt;LSFG Native&lt;/strong&gt; &lt;em&gt;(new in 3.0.6)&lt;/em&gt; — Lossless Scaling&#39;s frame generation running &lt;strong&gt;inside Bannerlator&#39;s own compositor&lt;/strong&gt;, ported from the &lt;strong&gt;Eden&lt;/strong&gt; emulator&#39;s native present path with &lt;strong&gt;WinNative&lt;/strong&gt;&#39;s implementation as the reference. The shaders come from &lt;em&gt;your own&lt;/em&gt; &lt;code&gt;Lossless.dll&lt;/code&gt;, extracted on device. Device-proven 30 → 120 fps at the panel. &lt;strong&gt;Device support:&lt;/strong&gt; generally Adreno &lt;strong&gt;A7xx and newer&lt;/strong&gt; GPUs, plus some MediaTek &lt;strong&gt;Dimensity&lt;/strong&gt; devices in community testing; elsewhere it reports itself unsupported in-game or may not keep up. &lt;strong&gt;Experimental (3.1.1, off by default):&lt;/strong&gt; a &lt;strong&gt;capture resolution&lt;/strong&gt; that runs the frame generation at a lower height and scales it up — far cheaper on weaker GPUs — and a &lt;strong&gt;Vulkan 1.1 compat&lt;/strong&gt; switch for stock drivers that report only Vulkan 1.1 but have the needed extensions (&lt;a href=&quot;https://github.com/The412Banner/Bannerlator/pull/512&quot;&gt;#512&lt;/a&gt; by clintOnSky). &lt;em&gt;(The former &lt;strong&gt;lsfg-vk&lt;/strong&gt; in-game layer engine is retired; anything still set to it runs LSFG Native.)&lt;/em&gt;&lt;/li&gt; 
   &lt;/ul&gt; &lt;/li&gt; 
  &lt;li&gt; 
   &lt;blockquote&gt; 
    &lt;p&gt;ℹ️ &lt;strong&gt;Why win-fg exists, and what it is.&lt;/strong&gt; Bannerlator previously bundled a different frame-generation layer that was later found to embed compute shaders whose model weights were &lt;strong&gt;essentially identical to the proprietary Lossless Scaling frame-generation model&lt;/strong&gt; — which cannot be redistributed. That layer was &lt;strong&gt;removed&lt;/strong&gt;, and &lt;strong&gt;win-fg&lt;/strong&gt; is its &lt;strong&gt;clean-room replacement&lt;/strong&gt;: a frame-gen engine we built from the ground up. Its motion estimation is our MIT adaptation of &lt;strong&gt;AMD FidelityFX FSR3 optical flow&lt;/strong&gt; (an algorithm — no learned weights), and its frame synthesis is written from first principles using published, permissively-licensed math. It bundles &lt;strong&gt;no proprietary code or weights&lt;/strong&gt;. That&#39;s also why the two engines sit side by side: &lt;strong&gt;LSFG Native&lt;/strong&gt; relies on &lt;em&gt;your own&lt;/em&gt; legally-owned &lt;code&gt;Lossless.dll&lt;/code&gt;, while &lt;strong&gt;Win-FG Native&lt;/strong&gt; is entirely Bannerlator&#39;s own and needs nothing to run. Its full source, shader-by-shader provenance and engineering log are public at &lt;strong&gt;&lt;a href=&quot;https://github.com/The412Banner/win-fg&quot;&gt;The412Banner/win-fg&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt; 
   &lt;/blockquote&gt; &lt;/li&gt; 
  &lt;li&gt; 
   &lt;blockquote&gt; 
    &lt;p&gt;⚠️ &lt;strong&gt;LSFG Native requires you to supply your own &lt;code&gt;Lossless.dll&lt;/code&gt;.&lt;/strong&gt; Bannerlator bundles &lt;strong&gt;no&lt;/strong&gt; proprietary Lossless Scaling files. You must own &lt;strong&gt;&lt;a href=&quot;https://store.steampowered.com/app/993090/Lossless_Scaling/&quot;&gt;Lossless Scaling&lt;/a&gt;&lt;/strong&gt; (THS, on Steam) and import its &lt;code&gt;Lossless.dll&lt;/code&gt; via &lt;strong&gt;Settings → Frame Generation — LSFG Native&lt;/strong&gt; (Detect from the in-app Steam store, or import a copy). The DLL is copied into app storage, its shaders are extracted and cached on device, and it serves all containers. Until you import a valid &lt;code&gt;Lossless.dll&lt;/code&gt;, the &lt;strong&gt;LSFG Native&lt;/strong&gt; option stays greyed out; &lt;strong&gt;Win-FG Native&lt;/strong&gt; needs no DLL and works without it.&lt;/p&gt; 
   &lt;/blockquote&gt; &lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Live in-game controls&lt;/strong&gt; for whichever engine the container runs: switch between &lt;strong&gt;Off / 2× / 3× / 4×&lt;/strong&gt; and adjust the &lt;strong&gt;flow-scale&lt;/strong&gt; slider right from the in-game Graphics drawer, hot-reloaded with no restart.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Screen fit &amp;amp; warnings&lt;/strong&gt; &lt;em&gt;(new in 3.1.0)&lt;/em&gt; — while frame generation runs, &lt;strong&gt;Auto (match FPS)&lt;/strong&gt; fits the display to Max FPS × multiplier (the exact rate or the closest one above; a per-game opt-out), the side menu warns when your numbers are more than the screen can show and offers a one-tap &lt;strong&gt;Set Max FPS to N&lt;/strong&gt;, and a plain reason appears when frame generation can&#39;t run on your driver or renderer.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;FPS Limiter&lt;/strong&gt; — a &lt;strong&gt;standalone, engine-independent&lt;/strong&gt; live frame cap. It paces the X11 Present extension by delaying the &lt;code&gt;IdleNotify&lt;/code&gt; that frees the guest&#39;s buffer, so the game itself throttles (the in-game HUD reflects the cap and GPU/power draw drops). Works the same with frame gen &lt;strong&gt;Off&lt;/strong&gt;, &lt;strong&gt;win-fg&lt;/strong&gt;, or &lt;strong&gt;LSFG Native&lt;/strong&gt;, on both host renderers, all guest APIs. While &lt;strong&gt;LSFG Native&lt;/strong&gt; is generating the limiter is &lt;strong&gt;locked on&lt;/strong&gt; — a steady, capped game is what frame generation is built on — and restored when it stops. This guest-side present-pacing mechanism was ported from &lt;strong&gt;&lt;a href=&quot;https://github.com/utkarshdalal/GameNative&quot;&gt;GameNative&lt;/a&gt;&lt;/strong&gt; (see &lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/#-credits&quot;&gt;Credits&lt;/a&gt;).&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Performance model&lt;/strong&gt; — LSFG Native always runs Lossless Scaling&#39;s lighter &quot;performance&quot; model (about 2 ms of GPU per generated frame on an Adreno 750). &lt;em&gt;(The lsfg-vk Performance-mode toggle requested by &lt;a href=&quot;https://github.com/Tony57319&quot;&gt;@Tony57319&lt;/a&gt; in &lt;a href=&quot;https://github.com/The412Banner/Bannerlator/issues/152&quot;&gt;#152&lt;/a&gt; is retired with lsfg-vk; that model is now the one LSFG Native uses.)&lt;/em&gt;&lt;/li&gt; 
  &lt;li&gt;Confirmed on &lt;strong&gt;both&lt;/strong&gt; the OpenGL and Vulkan host renderers.&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;⚡ Performance &amp;amp; thermal controls&lt;/b&gt;&lt;/summary&gt; 
 &lt;p&gt;Power-user device-tuning, reachable from &lt;strong&gt;App Settings → Performance&lt;/strong&gt; and mirrored live in the in-game &lt;strong&gt;Debug&lt;/strong&gt; tab (kept in two-way sync), with &lt;strong&gt;global defaults&lt;/strong&gt; and optional &lt;strong&gt;per-game overrides&lt;/strong&gt; — an override is honored only when it differs from the global default, and each has a one-tap &lt;strong&gt;reset-to-global&lt;/strong&gt;.&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;No root required&lt;/strong&gt; — &lt;strong&gt;Sustained Performance Mode&lt;/strong&gt; (steadies clock speeds over long sessions), &lt;strong&gt;Thread Priority Boost&lt;/strong&gt; (raises the guest CPU-worker threads for more CPU time, never downgrading an already-hot thread), and &lt;strong&gt;Prefer Big Cores&lt;/strong&gt; (pins the running game to the fastest CPU cluster instead of the efficiency cores).&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Opt-in root tier&lt;/strong&gt; (&lt;strong&gt;Magisk / KernelSU / APatch&lt;/strong&gt;) — behind a &lt;strong&gt;Grant Root&lt;/strong&gt; gate and a scroll-to-accept &lt;em&gt;&lt;strong&gt;&quot;USE AT YOUR OWN RISK&quot;&lt;/strong&gt;&lt;/em&gt; disclaimer: &lt;strong&gt;CPU governor → performance&lt;/strong&gt;, &lt;strong&gt;lock CPU frequency to max&lt;/strong&gt;, &lt;strong&gt;keep all cores online&lt;/strong&gt;, &lt;strong&gt;lock GPU to max clock&lt;/strong&gt;, &lt;strong&gt;disable thermal throttling&lt;/strong&gt;, &lt;strong&gt;fan to maximum&lt;/strong&gt;, and a one-shot &lt;strong&gt;&quot;Free memory now&quot;&lt;/strong&gt; action. Entirely optional — nothing writes to your system files unless you grant root and accept the warning.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Always-on snapshot-revert&lt;/strong&gt; — the first time a setting is touched its exact prior value is captured, and everything is restored to precisely that value on &lt;strong&gt;game-exit, app-background or crash&lt;/strong&gt;. The snapshot is &lt;strong&gt;persisted to disk&lt;/strong&gt;, so even a hard kill is repaired on next launch. It never guesses defaults and can&#39;t be disabled.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Temperature Watchdog&lt;/strong&gt; — anchored to your device&#39;s &lt;strong&gt;own thermal trip points&lt;/strong&gt;, it polls the hottest CPU/GPU zone and force-reverts all performance state &lt;em&gt;before&lt;/em&gt; the device overheats. Presets &lt;strong&gt;Conservative / Balanced / Aggressive / Manual&lt;/strong&gt;, on by default (turning it off needs the same scroll-to-accept disclaimer).&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;In-app help&lt;/strong&gt; — a &lt;strong&gt;&quot;?&quot;&lt;/strong&gt; explainer on every toggle, an &lt;strong&gt;&quot;Explain toggles&quot;&lt;/strong&gt; overview, a watchdog &lt;strong&gt;&quot;What&#39;s this?&quot;&lt;/strong&gt;, and live &lt;strong&gt;CPU / GPU temps&lt;/strong&gt; plus your device&#39;s own thermal limits shown inline. &lt;em&gt;(Device-verified on an AYANEO Pocket FIT / Adreno.)&lt;/em&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;📦 Containers&lt;/b&gt;&lt;/summary&gt; 
 &lt;ul&gt; 
  &lt;li&gt;Create and manage &lt;strong&gt;multiple isolated Wine containers&lt;/strong&gt;.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Redesigned container cards&lt;/strong&gt; — a clean spec-chip layout (renderer · DXVK on top, driver · VKD3D · backend beneath) that matches the game cards.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Auto-close on game exit&lt;/strong&gt; — the session closes itself once the launched game quits (per-container &quot;Close when game exits&quot; toggle, on by default), so you&#39;re not left at a black Wine desktop.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Import / export&lt;/strong&gt; containers to move or back up setups.&lt;/li&gt; 
  &lt;li&gt;Per-container control of Wine version, graphics driver, DXVK / VKD3D version, Box64 preset, drive mappings, Z-drive selector, and environment variables — the &lt;strong&gt;Add Environment Variable&lt;/strong&gt; picker includes a large set of &lt;strong&gt;presets&lt;/strong&gt; (DXVK / VKD3D / Wine / Mesa) with typed value editors, so common tuning vars are one tap away.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Desktop wallpaper picker&lt;/strong&gt; — set an image as a container&#39;s Wine desktop wallpaper from the container editor, and choose whether it applies to &lt;strong&gt;just this container&lt;/strong&gt; or &lt;strong&gt;globally&lt;/strong&gt; to all of them.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Compatibility Layers download menu&lt;/strong&gt; — a cloud button on each component (Wine/Proton, DXVK, VKD3D, Box64/WOWBox64, FEXCore) opens a downloader to browse, install or remove versions, with &lt;strong&gt;Wine/Proton tabs&lt;/strong&gt;, an &lt;strong&gt;&quot;in use&quot;&lt;/strong&gt; marker, &lt;strong&gt;install-from-file&lt;/strong&gt;, and &lt;strong&gt;byte-accurate download + install progress bars&lt;/strong&gt;.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;In-game refresh-rate unlock&lt;/strong&gt; — a per-container / per-game toggle that lets a game pick a refresh rate above 60 Hz from its own display menu (requires a &quot;Refreshed&quot; Proton 10.0-4 / 11.0-1 layer; stays off on older layers by design). Distinct from the display&#39;s &lt;em&gt;Match refresh rate to FPS (VRR)&lt;/em&gt;.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Custom startup-services mode&lt;/strong&gt; — alongside Normal / Essential / Aggressive, a &lt;strong&gt;Custom&lt;/strong&gt; startup option starts with every Wine service off so you enable only the ones you need. &lt;em&gt;(Requested in &lt;a href=&quot;https://github.com/The412Banner/Bannerlator/issues/168&quot;&gt;#168&lt;/a&gt;.)&lt;/em&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;DXVK HUD off by default (new in 3.0.2)&lt;/strong&gt; — new containers no longer show the DXVK overlay on top of the game. The &lt;code&gt;DXVK_HUD&lt;/code&gt; variable stays &lt;strong&gt;listed but empty&lt;/strong&gt; in the env-var editor, so it&#39;s one tap to opt back in whenever you want it.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Screen size that fits your panel&lt;/strong&gt; &lt;em&gt;(new in 3.1.0)&lt;/em&gt; — new containers start at 1280×720 on 16:9 screens, 1280×800 on 16:10 and 3:2, and 1280×960 on 4:3 (Retroid Pocket, foldable inner screens). Existing containers and games are never changed.&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;🕹️ Games, shortcuts &amp;amp; input&lt;/b&gt;&lt;/summary&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;Game library&lt;/strong&gt; with grid or list layout, sorting, and installed/updated filters.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Redesigned game cards&lt;/strong&gt; — primary chips (renderer · DXVK · frame-gen) over a muted driver · VKD3D · backend line, with the resolution in the subtitle; long component names no longer blank the game title.&lt;/li&gt; 
  &lt;li&gt;Add shortcuts from external storage — a single &lt;strong&gt;&lt;code&gt;.exe&lt;/code&gt;&lt;/strong&gt;, or a whole &lt;strong&gt;games folder&lt;/strong&gt; (point at a library folder and every game subfolder is scanned for its real executable, named and cover-arted for one-tap batch add).&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Smart import&lt;/strong&gt; — importing an &lt;code&gt;.exe&lt;/code&gt; auto-resolves the &lt;strong&gt;authoritative game name and cover art from the Steam store&lt;/strong&gt;, fixing generic launcher-exe misnames, with a &lt;strong&gt;Search Steam&lt;/strong&gt; confirm step.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Recommended components&lt;/strong&gt; — a game&#39;s bundled redistributables are detected and surfaced as one-tap install chips.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Back up &amp;amp; restore game saves&lt;/strong&gt; as &lt;strong&gt;GameHub-compatible zips&lt;/strong&gt;, with per-game save discovery and a confirm checklist before anything is overwritten.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;SteamGridDB&lt;/strong&gt; cover-art scraping.&lt;/li&gt; 
  &lt;li&gt;Per-game settings including display language / locale.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Virtual Controller Pro on-screen controls&lt;/strong&gt; — a Compose-rebuilt controls editor with an &lt;strong&gt;in-game live editor&lt;/strong&gt;, control types &lt;strong&gt;Button / D-Pad / Range / Stick / Trackpad&lt;/strong&gt; plus &lt;strong&gt;Dynamic Stick&lt;/strong&gt;, &lt;strong&gt;Mouse Area&lt;/strong&gt;, &lt;strong&gt;Button Grid&lt;/strong&gt; (with optional multitouch and QWERTY / F-row / NumPad quick-fill) and &lt;strong&gt;Expandable Buttons&lt;/strong&gt; (radial or list fly-outs). Includes &lt;strong&gt;control groups&lt;/strong&gt; (show/hide a whole set), &lt;strong&gt;key combos&lt;/strong&gt;, &lt;strong&gt;per-element dead zones&lt;/strong&gt;, a &lt;strong&gt;Hold key&lt;/strong&gt;, &lt;strong&gt;custom control icons&lt;/strong&gt; (import, tint or use as the whole button), a category-filtered binding picker, an editor &lt;strong&gt;reference image&lt;/strong&gt;, and a &lt;strong&gt;control scale up to 300%&lt;/strong&gt;. Profiles export as &lt;strong&gt;ICpx&lt;/strong&gt; (or best-effort legacy &lt;strong&gt;ICP&lt;/strong&gt;). Overlays &lt;strong&gt;follow your app theme&lt;/strong&gt; or take a &lt;strong&gt;per-game custom colour&lt;/strong&gt; set in the Controls editor. &lt;em&gt;(PR &lt;a href=&quot;https://github.com/The412Banner/Bannerlator/pull/156&quot;&gt;#156&lt;/a&gt; by &lt;a href=&quot;https://github.com/arro000&quot;&gt;arro000&lt;/a&gt;.)&lt;/em&gt; &lt;strong&gt;Swipeable controls (new in 3.0.1)&lt;/strong&gt; — a per-element &lt;strong&gt;slide-to-press&lt;/strong&gt; toggle plus live per-category swipe gates (Buttons / D-Pad / Sticks), mirrored to a dedicated &lt;strong&gt;Swipe&lt;/strong&gt; tab in the in-game drawer so you can slide across buttons instead of tapping each one.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Physical controller&lt;/strong&gt; support (SDL2), plus touchpad / mouse emulation with adjustable cursor speed. The &lt;strong&gt;external controller-binding screen&lt;/strong&gt; lists each input as a card with readable labels, and buttons you press while binding appear instantly.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Steam Controller support&lt;/strong&gt; &lt;em&gt;(new in 3.1.0, opt-in)&lt;/em&gt; — the &lt;strong&gt;2026 Steam Controller&lt;/strong&gt;, and the original over Bluetooth, read directly through &lt;strong&gt;SDL3&lt;/strong&gt;&#39;s Steam Controller driver (&lt;strong&gt;Input Controls → Device → Steam Controller&lt;/strong&gt;): a real controller in games with rumble and your &lt;strong&gt;Default / Any Controller&lt;/strong&gt; bindings, &lt;strong&gt;extra buttons&lt;/strong&gt; (L4 / L5 / R4 / R5 and the &lt;strong&gt;…&lt;/strong&gt; button) mappable to any button, click or key, a &lt;strong&gt;trackpad mouse&lt;/strong&gt; (right / left / both / off), and full support in the Input Controls &lt;strong&gt;Test&lt;/strong&gt; dialog. Other controllers are untouched.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Controller vibration&lt;/strong&gt; — &lt;strong&gt;PC-accurate dual-motor&lt;/strong&gt; rumble (strong/weak driven independently) with a &lt;strong&gt;per-container vibration mode and intensity&lt;/strong&gt;, backed by a &lt;strong&gt;winebus duration patch&lt;/strong&gt; so sustained rumble doesn&#39;t auto-expire mid-effect (Proton 10/11, arm64ec + x86-64). Plus &lt;strong&gt;per-slot&lt;/strong&gt; rumble toggles and a &lt;strong&gt;master switch&lt;/strong&gt; (in the in-game Vibration section) that silences all rumble regardless of slot, saved globally.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Gyroscope — motion aim&lt;/strong&gt; — tilt to aim, driving the &lt;strong&gt;right stick&lt;/strong&gt;, &lt;strong&gt;left stick&lt;/strong&gt; or the &lt;strong&gt;mouse&lt;/strong&gt;, in either &lt;strong&gt;Rate&lt;/strong&gt; mode (how fast you turn) or &lt;strong&gt;Tilt to Aim&lt;/strong&gt; orientation mode (the angle you hold), with a choice of &lt;strong&gt;activator button&lt;/strong&gt; (L1 / L2 / R1 / R3 / always-on), &lt;strong&gt;Hold or Toggle&lt;/strong&gt; activation, adjustable &lt;strong&gt;sensitivity / deadzone / smoothing / invert&lt;/strong&gt;, &lt;strong&gt;device-level drift calibration&lt;/strong&gt;, and settings &lt;strong&gt;saved per container and per game&lt;/strong&gt;. 📖 &lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/docs/gyro-controls-guide.md&quot;&gt;Full guide →&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;🌐 Community Configs&lt;/b&gt;&lt;/summary&gt; 
 &lt;p&gt;Browse &lt;strong&gt;community-shared, per-game / per-device tuning configs&lt;/strong&gt; in-app and apply a known-good setup in one tap.&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;Catalog browser&lt;/strong&gt; (globe button in the Games header) with search, Steam / Title filters, sort by upvotes / name / device count, and a &lt;strong&gt;&quot;Matches my device&quot;&lt;/strong&gt; filter that narrows to configs shared from hardware like yours.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Per-config cards&lt;/strong&gt; showing &lt;strong&gt;★ upvotes&lt;/strong&gt; and &lt;strong&gt;↓ downloads&lt;/strong&gt; (best-rated first), the source device / SoC and the date, aggregated across every folder a game is known by.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;One-tap Apply&lt;/strong&gt; that &lt;strong&gt;surgically merges&lt;/strong&gt; just the config&#39;s settings — DXVK / VKD3D / Turnip driver / FEX preset / renderer / resolution / launch args / environment variables — into your shortcut, &lt;strong&gt;preserving everything else you&#39;ve set&lt;/strong&gt;. Applies to any shortcut, warning you if it doesn&#39;t match the game.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Smart install&lt;/strong&gt; of a config&#39;s missing &lt;strong&gt;DXVK / VKD3D / FEXCore&lt;/strong&gt; build or &lt;strong&gt;Turnip GPU driver&lt;/strong&gt;: an exact match installs with one confirm, otherwise pick from the closest versions (or browse all), and the config &lt;strong&gt;auto-applies&lt;/strong&gt; afterward. FEX date builds match by their &lt;strong&gt;YYMM&lt;/strong&gt; monthly tag; components you already have are recognised, not re-installed.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Config detail page&lt;/strong&gt; — provenance (source device / SoC / app / date), a plain-language list of &lt;strong&gt;what the config sets&lt;/strong&gt; in Bannerlator&#39;s own component terms, and a &lt;strong&gt;before-you-apply diff&lt;/strong&gt; against your shortcut, plus the config&#39;s &lt;strong&gt;live description, upvotes, downloads and comments&lt;/strong&gt; — you can &lt;strong&gt;upvote&lt;/strong&gt; and &lt;strong&gt;comment&lt;/strong&gt; yourself.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Read-only for your setup&lt;/strong&gt; — nothing changes unless &lt;em&gt;you&lt;/em&gt; tap Apply; your containers, imagefs and existing settings are never touched.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Share your own setups&lt;/strong&gt; — export a game&#39;s working settings and &lt;strong&gt;upload&lt;/strong&gt; them for the community in a couple of taps. The export captures the full recipe (graphics translator + all its options, driver, renderer, resolution, launch args, env vars and the rest) plus your device / graphics chip — but &lt;strong&gt;never your files, store logins, or device-specific driver tuning&lt;/strong&gt;. Sharing is &lt;strong&gt;anonymous by default&lt;/strong&gt; and Bannerlator keeps its configs in &lt;strong&gt;its own space&lt;/strong&gt;, separate from other apps&#39; libraries. &lt;strong&gt;My uploads&lt;/strong&gt; lets you edit a description inline or delete an upload any time.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Optional account (no email needed)&lt;/strong&gt; — you never &lt;em&gt;need&lt;/em&gt; one, but a &lt;strong&gt;username + password&lt;/strong&gt; account makes your uploads &lt;strong&gt;follow you to a new device&lt;/strong&gt;, puts &lt;strong&gt;your name and picture&lt;/strong&gt; on configs you share, and is recovered with a &lt;strong&gt;one-time recovery key&lt;/strong&gt; instead of an email reset. Everything — browse, apply, share, manage, upvote, comment — works fully &lt;strong&gt;anonymously&lt;/strong&gt; without it.&lt;/li&gt; 
  &lt;li&gt;📖 &lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/docs/community-configs-guide.md&quot;&gt;Read the full plain-English guide →&lt;/a&gt;&lt;/strong&gt; for a friendly, non-technical walkthrough of browsing, applying, sharing, and the optional account/recovery-key system.&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;🛒 Built-in stores &amp;amp; cross-store Download Manager&lt;/b&gt;&lt;/summary&gt; 
 &lt;p&gt;Sign in to your existing storefronts and play from libraries &lt;strong&gt;you already own&lt;/strong&gt; — Bannerlator does not sell, bundle or circumvent any game or DRM.&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;Steam&lt;/strong&gt; — sign in with &lt;strong&gt;username / password or QR code&lt;/strong&gt;, browse your owned library, and &lt;strong&gt;download + install&lt;/strong&gt; games through a built-in &lt;strong&gt;depot engine&lt;/strong&gt; (built on &lt;strong&gt;&lt;a href=&quot;https://github.com/Longi94/JavaSteam&quot;&gt;JavaSteam&lt;/a&gt;&lt;/strong&gt;). Includes a &lt;strong&gt;4-tier download-speed&lt;/strong&gt; picker (Slow / Medium / Fast / Blazing), &lt;strong&gt;session hardening&lt;/strong&gt; that recovers from Steam&#39;s ~1-hour connection-manager logoff so long installs finish, a &lt;strong&gt;connection / login status pill&lt;/strong&gt;, and a depot-download &lt;strong&gt;OOM fix&lt;/strong&gt;. 
   &lt;ul&gt; 
    &lt;li&gt;&lt;strong&gt;DLC picker&lt;/strong&gt; — a &lt;strong&gt;&quot;Choose DLC&quot;&lt;/strong&gt; sheet lets you opt out of owned DLC before downloading, with the download size updating live as you check and uncheck, plus an &lt;strong&gt;&quot;Includes DLC&quot;&lt;/strong&gt; line and a &lt;strong&gt;size breakdown&lt;/strong&gt; (footprint / download / catalog / free space) and &lt;strong&gt;download ETA + speed&lt;/strong&gt; on the detail page. A &lt;strong&gt;true-size install fix&lt;/strong&gt; fetches real depot-manifest sizes so fully-downloaded games are no longer wrongly flagged &quot;incomplete.&quot;&lt;/li&gt; 
    &lt;li&gt;&lt;strong&gt;Optional Goldberg auto-patch&lt;/strong&gt; on a game&#39;s detail page — a &lt;strong&gt;&lt;a href=&quot;https://mr_goldberg.gitlab.io/goldberg_emulator/&quot;&gt;Goldberg&lt;/a&gt; / gbe_fork&lt;/strong&gt; Steam-emulator patch for &lt;strong&gt;offline / emulated&lt;/strong&gt; play, in &lt;strong&gt;Regular / Experimental / ColdClient&lt;/strong&gt; tiers, installed automatically and cleanly reverted on switch-back. &lt;em&gt;(Modifies a game&#39;s shipped files — &lt;strong&gt;use at your own risk&lt;/strong&gt;, for games you own.)&lt;/em&gt;&lt;/li&gt; 
    &lt;li&gt;&lt;strong&gt;Real-Steam (VAC) online — &quot;SteamLite&quot; launch mode&lt;/strong&gt; — a per-game launch option (&lt;strong&gt;RealSteam / Goldberg / Raw&lt;/strong&gt;) that runs the game through the &lt;strong&gt;genuine Steam client&lt;/strong&gt; driven by a &lt;strong&gt;clean-room headless agent&lt;/strong&gt;, for a &lt;strong&gt;VAC-eligible online&lt;/strong&gt; session with real friends, matchmaking and achievements. It stages the game so Steam sees it &lt;em&gt;installed&lt;/em&gt; (secure &lt;code&gt;LaunchApp&lt;/code&gt;, not an insecure CreateProcess) and watches the &lt;strong&gt;launcher exe&lt;/strong&gt; so the game launches secure regardless of which exe the shortcut names. The Steam client + agent ship as a downloadable &lt;strong&gt;&lt;a href=&quot;https://github.com/The412Banner/winlator-contents/releases/tag/steamlite-v1&quot;&gt;&lt;code&gt;steamlite-v1&lt;/code&gt;&lt;/a&gt;&lt;/strong&gt; content package, installed from inside the app. &lt;strong&gt;Device-proven online:&lt;/strong&gt; CS 1.6, CS: Source, Team Fortress 2, Left 4 Dead 2 (VAC-secured), Brawlhalla and Stumble Guys (live-service); Borderlands 2 in testing.&lt;/li&gt; 
    &lt;li&gt;&lt;strong&gt;EA games from your Steam library&lt;/strong&gt; &lt;em&gt;(new in 3.0.7)&lt;/em&gt; — EA-published Steam titles get an &lt;strong&gt;EA&lt;/strong&gt; badge and a one-time &lt;strong&gt;Set up EA Desktop&lt;/strong&gt; session; after that the game launches through Steam → EA Desktop automatically (SteamLite mode, GE-Proton 11.0-6 / Proton 11 layers). Proven with Need for Speed Payback / Most Wanted / Rivals and STAR WARS Jedi: Survivor. &lt;em&gt;Origin-era titles ask for the EA sign-in every launch and EA rate-limits those activations — see the 3.0.7 notes.&lt;/em&gt;&lt;/li&gt; 
    &lt;li&gt;&lt;strong&gt;Steam Friends &amp;amp; Chat&lt;/strong&gt; &lt;em&gt;(off by default)&lt;/em&gt; — a &lt;strong&gt;master-opt-in&lt;/strong&gt; friends list with live presence (online / in-game / away), unread badges and collapsible sections; &lt;strong&gt;per-friend chat with text and images&lt;/strong&gt;, persisted history, add-by-code / name-search / quick-invite, an in-app friend profile, a landscape two-pane layout, notifications with a sound toggle, typing indicators, and instant reconnect after a background drop.&lt;/li&gt; 
    &lt;li&gt;&lt;strong&gt;Steam achievements&lt;/strong&gt; — seeded from your account into a &lt;strong&gt;tabbed detail-page grid&lt;/strong&gt;, with in-game &lt;strong&gt;gold unlock pills&lt;/strong&gt; — working &lt;strong&gt;and syncing in both launch modes&lt;/strong&gt;: unlocks fire and sync back whether you play through &lt;strong&gt;Goldberg&lt;/strong&gt; (emulated) or &lt;strong&gt;SteamLite&lt;/strong&gt; (real Steam / VAC).&lt;/li&gt; 
    &lt;li&gt;&lt;strong&gt;Steam cloud saves + Save Manager &quot;Sync Now&quot;&lt;/strong&gt; — automatic cloud-save parity around each play session, plus a &lt;strong&gt;one-touch &quot;Sync Now&quot;&lt;/strong&gt; button on the Save Manager banner that syncs &lt;strong&gt;every&lt;/strong&gt; flagged game at once, each in the correct direction (upload what&#39;s newer locally, pull what&#39;s newer in the cloud), with a live &quot;Syncing 3/7…&quot; count.&lt;/li&gt; 
    &lt;li&gt;&lt;strong&gt;Install to an SD card&lt;/strong&gt; — a per-game toggle installs a Steam download onto a removable SD card to free internal space; the shortcut resolves through a container &lt;strong&gt;drive letter&lt;/strong&gt;, so secure launch, saves and achievements are unaffected.&lt;/li&gt; 
    &lt;li&gt;&lt;strong&gt;Rebuilt game detail pages&lt;/strong&gt; — a redesigned, &lt;strong&gt;landscape-aware tabbed&lt;/strong&gt; per-game screen (overview · achievements grid · DLC) with the store badge, connection state and launch actions together in one place.&lt;/li&gt; 
   &lt;/ul&gt; &lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Epic Games&lt;/strong&gt; — sign in, browse your library, and &lt;strong&gt;download / install / launch&lt;/strong&gt; your titles (including Epic &lt;strong&gt;free games&lt;/strong&gt;).&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Amazon Games&lt;/strong&gt; — sign in, browse your library, and &lt;strong&gt;download / install / launch&lt;/strong&gt; your titles.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://www.gog.com/&quot;&gt;GOG&lt;/a&gt;&lt;/strong&gt; — sign in and browse your owned library; &lt;strong&gt;download and install&lt;/strong&gt; your &lt;strong&gt;DRM-free&lt;/strong&gt; games with &lt;strong&gt;cloud-save&lt;/strong&gt; sync and one-tap launch into a container.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;⬇ Cross-store Download Manager&lt;/strong&gt; — one unified manager across &lt;strong&gt;all four stores&lt;/strong&gt;: see every active download and your whole installed library in one place, with &lt;strong&gt;live two-bar&lt;/strong&gt; download/install progress, &lt;strong&gt;background downloads + notification-shade&lt;/strong&gt; support (a foreground service keeps them running when you leave the app), and &lt;strong&gt;launch / verified uninstall&lt;/strong&gt; for any installed game. Install state, cover art and update-available status stay in sync across a game&#39;s detail page, its download card and the store list.&lt;/li&gt; 
  &lt;li&gt; 
   &lt;blockquote&gt; 
    &lt;p&gt;🔒 These sign-ins are a &lt;strong&gt;third-party login system, exactly like any other emulator/launcher&lt;/strong&gt; that logs into these stores — &lt;strong&gt;use them at your own risk&lt;/strong&gt; (see &lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/#-security-hardening--your-store-accounts&quot;&gt;Security Hardening&lt;/a&gt;).&lt;/p&gt; 
   &lt;/blockquote&gt; &lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;🔒 Security Hardening &amp;amp; your store accounts&lt;/b&gt;&lt;/summary&gt; 
 &lt;p&gt;The Steam / Epic / GOG / Amazon sign-ins are a &lt;strong&gt;third-party login system, exactly like any other emulator or launcher&lt;/strong&gt; that logs into these stores. &lt;strong&gt;Bannerlator is not affiliated with, authorised by, or endorsed by Valve/Steam, Epic Games, GOG, or Amazon.&lt;/strong&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;Use at your own risk.&lt;/strong&gt; You are logging your &lt;strong&gt;real store account&lt;/strong&gt; into a community app. That&#39;s a normal trade-off for this kind of tool — but it&#39;s your account and your call.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Steam save sync &amp;amp; achievements — use at your own risk.&lt;/strong&gt; Steam cloud-save sync and achievements run through &lt;strong&gt;third-party systems&lt;/strong&gt; (Valve&#39;s Steam and Goldberg), exactly like the store sign-ins. They depend on your connection — an &lt;strong&gt;unstable or dropped internet connection or network, while downloading (syncing saves, achievements or games) or uploading, can leave data un-synced, incomplete or out of date&lt;/strong&gt;. It is &lt;strong&gt;your responsibility&lt;/strong&gt; to ensure a proper, stable connection and to complete the sync/download/upload when required; verify it finished before relying on it across devices.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Your credentials are redacted from logs.&lt;/strong&gt; This release strips sensitive values out of everything the stores write, to &lt;strong&gt;logcat &lt;em&gt;and&lt;/em&gt; the shareable diagnostic files&lt;/strong&gt;, via a new &lt;code&gt;StoreLog.redactUrl&lt;/code&gt; helper: &lt;strong&gt;signed download / manifest URLs&lt;/strong&gt; (Amazon / Epic / GOG CDN links carry access tokens in the query), &lt;strong&gt;OAuth authorization codes&lt;/strong&gt;, &lt;strong&gt;GOG &lt;code&gt;client_secret&lt;/code&gt; + &lt;code&gt;refresh_token&lt;/code&gt;&lt;/strong&gt;, and &lt;strong&gt;account identity IDs&lt;/strong&gt; (Epic account ID, GOG user ID). Steam credentials were already redacted. None of this changes how login, downloads or cloud saves work — only what gets written to a log.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Still be careful sharing logs.&lt;/strong&gt; Even with redaction, a log or debug file can contain other diagnostic detail — so only share one publicly if you&#39;re comfortable doing so.&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;🧰 Bundled Start-menu utilities&lt;/b&gt;&lt;/summary&gt; 
 &lt;ul&gt; 
  &lt;li&gt;New containers ship with handy Windows tools in the Start menu — &lt;strong&gt;&lt;a href=&quot;https://github.com/The412Banner/banner-file-manager&quot;&gt;Banner File Manager&lt;/a&gt;&lt;/strong&gt; (our own file manager — see below), &lt;strong&gt;&lt;a href=&quot;https://github.com/The412Banner/AIO-Graphics-Test&quot;&gt;AIO Graphics Test&lt;/a&gt;&lt;/strong&gt;, and &lt;strong&gt;Game Controller Test&lt;/strong&gt;.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;&lt;code&gt;.lnk&lt;/code&gt; working-directory (&quot;Start in&quot;) support&lt;/strong&gt; so shortcuts for apps that only run from their own folder launch correctly.&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;📁 Banner File Manager&lt;/b&gt;&lt;/summary&gt; 
 &lt;p&gt;The bundled Windows file manager (&lt;code&gt;C:\windows\wfm.exe&lt;/code&gt;) is &lt;strong&gt;&lt;a href=&quot;https://github.com/The412Banner/banner-file-manager&quot;&gt;Banner File Manager&lt;/a&gt;&lt;/strong&gt; — our own native Win32 file manager, forked from &lt;a href=&quot;https://github.com/brunodev85/wfm&quot;&gt;BrunoSX&#39;s Winlator File Manager&lt;/a&gt; (MIT). It ships in every new container&#39;s Start menu.&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;Dual-pane split view&lt;/strong&gt; (&lt;code&gt;View ▸ Split View&lt;/code&gt;) — two independent panes, active one highlighted, copy between them.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;File actions&lt;/strong&gt; — Open as administrator, Open with ▸ (registered apps + choose another program), Properties.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Native Win32 copy / move / delete&lt;/strong&gt; instead of shell32 &lt;code&gt;SHFileOperation&lt;/code&gt; — sidesteps the Wine shell32 copy-paste crash on Proton 10.0-4.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Quality of life&lt;/strong&gt; — keyboard shortcuts (F2 / Del / F5 / F6 / Backspace / Enter / Ctrl+C·X·V·A), Show Hidden Files, byte-accurate copy progress bar with cancel, status-bar total size.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Theme-aware&lt;/strong&gt; (light + dark, follows the container theme; owner-drawn header / status bar / search to match) and &lt;strong&gt;universal x86-64&lt;/strong&gt; (Box64 / wowbox64 / FEXCore).&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;Source, releases &amp;amp; issues: &lt;strong&gt;&lt;a href=&quot;https://github.com/The412Banner/banner-file-manager&quot;&gt;github.com/The412Banner/banner-file-manager&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;🎛️ Interface &amp;amp; in-game overlay&lt;/b&gt;&lt;/summary&gt; 
 &lt;ul&gt; 
  &lt;li&gt;Modern &lt;strong&gt;Jetpack Compose&lt;/strong&gt; user interface with a redesigned, icon-led navigation drawer.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Theme-aware everywhere&lt;/strong&gt; — your selected preset / accent recolours the &lt;strong&gt;whole app &lt;em&gt;and&lt;/em&gt; the in-game side drawer&lt;/strong&gt;, including dialogs, chips, sliders and overlays.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Customizable themes&lt;/strong&gt; — &lt;strong&gt;16 presets&lt;/strong&gt; (AMOLED default, Classic Dark, Ocean, Forest, Sunset, Rose, Steel, plus Midnight Cobalt, Phosphor, Carbon &amp;amp; Ember, Amethyst, Crimson, Synthwave, Royal Gold, Frost and Monochrome) plus an &lt;strong&gt;HSV custom-accent picker&lt;/strong&gt;.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;XMB view&lt;/strong&gt; &lt;em&gt;(new in 3.1.1)&lt;/em&gt; — a fourth Games-tab layout after List, Grid and Compact: games run across and the focused game&#39;s options run down, with every per-game setting and tool (Settings, Game Details, Properties, Clone, Remove, logs, community configs, cover scraping, Copy to Drive C, save backup / restore, Change executable) opening as further XMB columns instead of pop-ups. Built for a controller (A / B, LB / RB, ◀ ▶ to change values), with touch and swipe too; portrait and landscape.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Big Picture mode&lt;/strong&gt; — a &lt;strong&gt;Compose-built couch launcher&lt;/strong&gt; for TV / handheld use: full D-pad navigation, direct rails to your games, settings and features, and &lt;strong&gt;per-game spec chips&lt;/strong&gt; showing what each title is actually set to.&lt;/li&gt; 
  &lt;li&gt;In-game overlay drawer for settings, input, and quick toggles, with a Task Manager that lists processes as cards and can launch new tasks on any renderer. The &lt;strong&gt;Controls tab is split into Touch / Mouse / Vibration / Gyro sub-tabs&lt;/strong&gt;, with a uniform 3-across grid of toggle chips.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;In-game Task Manager — a full control panel.&lt;/strong&gt; Beyond the process cards it now offers Windows-style &lt;strong&gt;per-process Processor Affinity&lt;/strong&gt; (&quot;Set affinity&quot; on a process&#39;s ⋮ menu — pin it to specific CPU cores &lt;strong&gt;live, mid-game&lt;/strong&gt;, applied through the guest&#39;s real affinity path with no relaunch), a &lt;strong&gt;live telemetry header&lt;/strong&gt; (CPU &amp;amp; GPU usage and temperatures, GPU clock, FPS + minimum, RAM, swap, battery level / watts / temperature / charging, and a per-core clock strip), and a collapsible &lt;strong&gt;container info panel&lt;/strong&gt; (Wine/Proton, DX wrapper, renderer, driver, resolution, device).&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Built-in File Manager with Favorites&lt;/strong&gt; — bookmark folders and jump to them from a dedicated list, each labelled by storage source (Internal / SD card / a container&#39;s Drive C: or Z:) and full path. Image files show &lt;strong&gt;real thumbnails&lt;/strong&gt;, and the File Manager doubles as the app&#39;s &lt;strong&gt;file picker for every import&lt;/strong&gt; (WCP / ICP / wallpaper / drivers / assets) — reliable on OEM skins where Android&#39;s system picker fails, with the system picker still available as a secondary option. It also handles &lt;strong&gt;multi-select bulk operations&lt;/strong&gt;, &lt;strong&gt;archive extraction&lt;/strong&gt; (zip / 7z / tar / tar.gz / xz / bz2 / zst, Zip-Slip-guarded with progress and cancel), and &lt;strong&gt;search / sort / hidden-file toggle / free-space&lt;/strong&gt; display.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Performance HUD&lt;/strong&gt; — FPS, frame time, CPU/GPU temperature, and RAM, in vertical or horizontal layout, with its on-screen &lt;strong&gt;position saved per game&lt;/strong&gt;. Four switchable overlay styles — &lt;strong&gt;Classic&lt;/strong&gt;, &lt;strong&gt;GameHub&lt;/strong&gt;, a &lt;strong&gt;GameNative-style&lt;/strong&gt; HUD with live graphs, and the new &lt;strong&gt;Fusion HUD&lt;/strong&gt; (MangoHud-style: size modes Full / Tiles / Pill / Minimal / Mega, VRAM, GPU model, 1% / 0.1% lows and a frametime graph) — with &lt;strong&gt;long-press to lock any HUD in place&lt;/strong&gt;.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;FEX runtime indicator&lt;/strong&gt; — a live badge in the Graphics tab shows what&#39;s actually translating the running game: &lt;strong&gt;arm64ec&lt;/strong&gt; vs &lt;strong&gt;x86-64&lt;/strong&gt;, the translator (&lt;strong&gt;FEXCore / wowbox64 / Box64&lt;/strong&gt;), and — for FEXCore — whether the native &lt;strong&gt;unixlib (&lt;code&gt;.so&lt;/code&gt;)&lt;/strong&gt; or the classic &lt;strong&gt;DLL&lt;/strong&gt; path is active. Read straight from the running process, so it reflects reality, not just the setting.&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;📥 Builds &amp;amp; distribution&lt;/b&gt;&lt;/summary&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;Three build flavors&lt;/strong&gt; with distinct package IDs — &lt;em&gt;standard&lt;/em&gt;, &lt;em&gt;PuBG&lt;/em&gt;, and &lt;em&gt;Ludashi&lt;/em&gt;.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Optimized release builds&lt;/strong&gt; (not debug) for a smoother Compose UI, AOSP-testkey signed so updates install over previous installs.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;In-app updater&lt;/strong&gt; — &lt;strong&gt;Settings → Updates&lt;/strong&gt; checks GitHub for a newer release and installs the correct &lt;strong&gt;flavor APK&lt;/strong&gt; for you, with &lt;strong&gt;notify-on-update&lt;/strong&gt; and an opt-in &lt;strong&gt;include-prereleases&lt;/strong&gt; (beta channel) toggle.&lt;/li&gt; 
  &lt;li&gt;Continuous &lt;strong&gt;GitHub Actions&lt;/strong&gt; action builds and tagged stable releases.&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🎨 Adding your own ReShade effects&lt;/h2&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;Show / hide&lt;/b&gt;&lt;/summary&gt; 
 &lt;p&gt;Besides the built-in download catalog, you can add &lt;strong&gt;any&lt;/strong&gt; ReShade effect yourself by dropping it into a folder. Follow these steps exactly:&lt;/p&gt; 
 &lt;p&gt;&lt;strong&gt;1. Open the ReShade drop-in folder on your device&lt;/strong&gt; (create the &lt;code&gt;ReShade&lt;/code&gt; folder if it isn&#39;t there yet):&lt;/p&gt; 
 &lt;pre&gt;&lt;code&gt;Android/data/com.winlator.banner/files/ReShade/
&lt;/code&gt;&lt;/pre&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;📁 That path is for the &lt;strong&gt;Standard&lt;/strong&gt; build. For the other builds, swap the package name: &lt;strong&gt;PuBG&lt;/strong&gt; → &lt;code&gt;Android/data/com.tencent.ig/files/ReShade/&lt;/code&gt; · &lt;strong&gt;Ludashi&lt;/strong&gt; → &lt;code&gt;Android/data/com.ludashi.benchmark/files/ReShade/&lt;/code&gt; · &lt;strong&gt;AnTuTu&lt;/strong&gt; → &lt;code&gt;Android/data/com.antutu.ABenchMark/files/ReShade/&lt;/code&gt;.&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;2. Make one folder per effect.&lt;/strong&gt; Name the folder whatever you want the effect to be &lt;strong&gt;called in the menu&lt;/strong&gt; — for example &lt;code&gt;MySepia&lt;/code&gt;.&lt;/p&gt; 
 &lt;p&gt;&lt;strong&gt;3. Put the effect&#39;s files inside that folder — all in the same place, next to the &lt;code&gt;.fx&lt;/code&gt;:&lt;/strong&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;the effect&#39;s &lt;strong&gt;&lt;code&gt;.fx&lt;/code&gt;&lt;/strong&gt; file (required),&lt;/li&gt; 
  &lt;li&gt;any &lt;strong&gt;&lt;code&gt;.fxh&lt;/code&gt;&lt;/strong&gt; files it &lt;code&gt;#include&lt;/code&gt;s (very common — e.g. &lt;code&gt;ReShade.fxh&lt;/code&gt;, &lt;code&gt;ReShadeUI.fxh&lt;/code&gt;),&lt;/li&gt; 
  &lt;li&gt;any &lt;strong&gt;image / texture&lt;/strong&gt; files the effect uses.&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;pre&gt;&lt;code&gt;ReShade/
  MySepia/
    MySepia.fx          ← the effect (folder name match = used first)
    ReShade.fxh         ← copy in any .fxh the .fx #includes
    ReShadeUI.fxh
    noise.png           ← copy in any textures it uses
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;&lt;strong&gt;4. Pick it in the app.&lt;/strong&gt; Open the app → edit a &lt;strong&gt;container&lt;/strong&gt; or a &lt;strong&gt;game shortcut&lt;/strong&gt; → &lt;strong&gt;ReShade effect&lt;/strong&gt; picker. Your folder now appears in the list — select it.&lt;/p&gt; 
 &lt;p&gt;&lt;strong&gt;5. Use it in-game.&lt;/strong&gt; Launch a &lt;strong&gt;DirectX (DXVK / VKD3D) game&lt;/strong&gt;, open the in-game drawer → &lt;strong&gt;ReShade tab&lt;/strong&gt;, and turn the effect on/off and tune its sliders &lt;strong&gt;live&lt;/strong&gt;.&lt;/p&gt; 
 &lt;blockquote&gt; 
  &lt;h4&gt;⚠️ Read this if something doesn&#39;t show up or work&lt;/h4&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;strong&gt;Only colour effects work&lt;/strong&gt; — sharpen, colour grading, film grain, CRT, tonemap, vignette, etc. &lt;strong&gt;Depth effects (SSAO, depth-of-field, MXAO) do not work yet.&lt;/strong&gt;&lt;/li&gt; 
   &lt;li&gt;ReShade only affects &lt;strong&gt;DirectX games running through DXVK / VKD3D&lt;/strong&gt; — it does nothing on OpenGL / WineD3D / older 2D titles.&lt;/li&gt; 
   &lt;li&gt;&lt;strong&gt;Effect not in the list?&lt;/strong&gt; Make sure it&#39;s in &lt;strong&gt;its own subfolder&lt;/strong&gt; and that the subfolder actually contains a &lt;code&gt;.fx&lt;/code&gt; file (a loose &lt;code&gt;.fx&lt;/code&gt; sitting directly in &lt;code&gt;ReShade/&lt;/code&gt; is ignored).&lt;/li&gt; 
   &lt;li&gt;&lt;strong&gt;Effect selected but no change in-game?&lt;/strong&gt; Most often a missing &lt;code&gt;#include&lt;/code&gt; — open the &lt;code&gt;.fx&lt;/code&gt; in a text editor, find any &lt;code&gt;#include &quot;Something.fxh&quot;&lt;/code&gt; lines, and make sure each of those &lt;code&gt;.fxh&lt;/code&gt; files is copied into the &lt;strong&gt;same folder&lt;/strong&gt; as the &lt;code&gt;.fx&lt;/code&gt;. Same for any texture files.&lt;/li&gt; 
   &lt;li&gt;&lt;strong&gt;Game won&#39;t start / flat or blank screen after enabling effects?&lt;/strong&gt; You likely &lt;strong&gt;stacked too many effects at once&lt;/strong&gt;. Each one compiles on-device and costs GPU, and too many together can stop the game from launching. Go back into the per-game &lt;strong&gt;ReShade effect&lt;/strong&gt; settings and &lt;strong&gt;uncheck the effects one at a time&lt;/strong&gt; (or the specific heavy one) until the game boots correctly, then re-enable them gradually. Adding effects &lt;strong&gt;a few at a time&lt;/strong&gt; avoids this.&lt;/li&gt; 
   &lt;li&gt;&lt;strong&gt;Can&#39;t even find &lt;code&gt;Android/data&lt;/code&gt;?&lt;/strong&gt; Many stock file managers hide it on Android 11+. Use a file manager that can open &lt;code&gt;Android/data&lt;/code&gt;, or copy the effect folder over from a PC via a USB cable, then drop it in.&lt;/li&gt; 
  &lt;/ul&gt; 
 &lt;/blockquote&gt; 
&lt;/details&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🎮 Frontends Workaround&lt;/h2&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;Show / hide&lt;/b&gt;&lt;/summary&gt; 
 &lt;p&gt;Bannerlator does not work by itself on frontends out of the box. See the &lt;a href=&quot;https://github.com/The412Banner/Bannerlator/raw/main/marcescence-frontends.md&quot;&gt;frontends workaround guide&lt;/a&gt; to get it running.&lt;/p&gt; 
&lt;/details&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🛠️ Building&lt;/h2&gt; 
&lt;p&gt;This project is built via &lt;strong&gt;GitHub Actions only&lt;/strong&gt; — local builds are not supported.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Action builds&lt;/strong&gt; — every fix is compiled and published as a downloadable workflow artifact.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Releases&lt;/strong&gt; — tagged stable builds are published as GitHub Releases.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🤖 Ask Me Anything&lt;/h2&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;Show / hide&lt;/b&gt;&lt;/summary&gt; 
 &lt;p&gt;Got a question about Bannerlator? &lt;strong&gt;Ask the codebase directly.&lt;/strong&gt; An AI reads the actual source code and answers with the exact file names and line numbers, so you can check it yourself. It never guesses — if the answer isn&#39;t in the code, it says so.&lt;/p&gt; 
 &lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://github.com/The412Banner/Bannerlator/issues/new&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/%F0%9F%92%AC%2520Ask%2520a%2520Question-Open%2520an%2520issue-7b2ff7?style=for-the-badge&amp;amp;logo=claude&amp;amp;logoColor=white&quot; alt=&quot;Ask a Question&quot; /&gt; &lt;/a&gt; &lt;/p&gt; 
 &lt;p&gt;&lt;strong&gt;It&#39;s three steps:&lt;/strong&gt;&lt;/p&gt; 
 &lt;ol&gt; 
  &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/The412Banner/Bannerlator/issues/new&quot;&gt;Open an issue&lt;/a&gt;&lt;/strong&gt; (you&#39;ll need a free GitHub account).&lt;/li&gt; 
  &lt;li&gt;Type your question — be specific, and name a feature, setting, or file.&lt;/li&gt; 
  &lt;li&gt;Submit. The AI replies in a comment on your issue, usually within &lt;strong&gt;1–2 minutes&lt;/strong&gt;.&lt;/li&gt; 
 &lt;/ol&gt; 
 &lt;p&gt;That&#39;s it — no form, no approval step, nothing else to do.&lt;/p&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;ℹ️ The AI replies to &lt;strong&gt;every&lt;/strong&gt; new issue automatically. A few per person per day are free; past that, it will ask you to try again later.&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Good things to ask:&lt;/strong&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;em&gt;&quot;How does the FPS limiter work?&quot;&lt;/em&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;em&gt;&quot;Where is the GOG store integration implemented?&quot;&lt;/em&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;em&gt;&quot;What values does the scaling mode picker accept?&quot;&lt;/em&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;em&gt;&quot;How are release builds signed and distributed?&quot;&lt;/em&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;&lt;em&gt;Avoid device-specific troubleshooting like &quot;why is my game slow?&quot; — the AI explains what the &lt;strong&gt;code&lt;/strong&gt; does, not how a game runs on your phone.&lt;/em&gt;&lt;/p&gt; 
 &lt;details&gt; 
  &lt;summary&gt;Prefer the command line?&lt;/summary&gt; 
  &lt;p&gt;With &lt;a href=&quot;https://opencode.ai&quot;&gt;opencode&lt;/a&gt; installed (&lt;code&gt;npm install -g opencode-ai&lt;/code&gt;), run the same agent locally against a clone of this repo:&lt;/p&gt; 
  &lt;pre&gt;&lt;code&gt;opencode run &quot;your question&quot; --agent ama-agent --model opencode/big-pickle
&lt;/code&gt;&lt;/pre&gt; 
 &lt;/details&gt; 
 &lt;details&gt; 
  &lt;summary&gt;&lt;b&gt;Maintainers / forks — one-time setup&lt;/b&gt;&lt;/summary&gt; 
  &lt;p&gt;The bot runs on the &lt;strong&gt;opencode/big-pickle&lt;/strong&gt; model via your opencode credentials (not a separate API key). To enable it on a fork:&lt;/p&gt; 
  &lt;ol&gt; 
   &lt;li&gt;Locally run &lt;code&gt;cat ~/.local/share/opencode/auth.json&lt;/code&gt; and copy the whole JSON.&lt;/li&gt; 
   &lt;li&gt;Add it as a repository secret named &lt;strong&gt;&lt;code&gt;OPENCODE_AUTH&lt;/code&gt;&lt;/strong&gt; under &lt;strong&gt;Settings → Secrets and variables → Actions&lt;/strong&gt;.&lt;/li&gt; 
   &lt;li&gt;Make sure the &lt;code&gt;answered&lt;/code&gt; and &lt;code&gt;question&lt;/code&gt; labels exist.&lt;/li&gt; 
  &lt;/ol&gt; 
  &lt;p&gt;Every newly opened issue is answered automatically, bounded by a per-user daily limit and a monthly cap — tune both at the top of &lt;code&gt;.github/workflows/ama-answer.yml&lt;/code&gt; (&lt;code&gt;PER_USER_PER_DAY&lt;/code&gt;, &lt;code&gt;MONTHLY_CAP&lt;/code&gt;; maintainers are exempt from the daily limit). You can also force a re-run on an older issue by adding the &lt;strong&gt;&lt;code&gt;question&lt;/code&gt;&lt;/strong&gt; label. Without the secret, the bot posts a notice explaining what&#39;s missing.&lt;/p&gt; 
 &lt;/details&gt; 
&lt;/details&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🙏 Credits&lt;/h2&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;Show / hide&lt;/b&gt;&lt;/summary&gt; 
 &lt;p&gt;This build stands on a long chain of prior work — its direct lineage, plus the projects whose commits and work are cherry-picked and implemented here:&lt;/p&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Contributor&lt;/th&gt; 
    &lt;th&gt;Contribution&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;brunodev85&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;Original &lt;a href=&quot;https://github.com/brunodev85/winlator&quot;&gt;Winlator&lt;/a&gt; — Wine + Box64 + Turnip on Android. Foundation of every fork below. Also serves the &lt;code&gt;input_controls&lt;/code&gt; profiles consumed by this fork: &lt;a href=&quot;https://raw.githubusercontent.com/brunodev85/winlator/main/input_controls/&quot;&gt;https://raw.githubusercontent.com/brunodev85/winlator/main/input_controls/&lt;/a&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;coffincolors&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;a href=&quot;https://github.com/coffincolors/winlator&quot;&gt;&lt;code&gt;cmod&lt;/code&gt; Winlator fork&lt;/a&gt; — package &lt;code&gt;com.winlator.cmod&lt;/code&gt; and the customization layer this codebase is built on.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Pipetto-crypto&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;a href=&quot;https://github.com/Pipetto-crypto/winlator&quot;&gt;Winlator Bionic fork&lt;/a&gt; (the &quot;Bionic&quot; half of &lt;em&gt;Star Bionic&lt;/em&gt;) and the upstream &lt;a href=&quot;https://github.com/Pipetto-crypto/box64&quot;&gt;Box64 fix branch&lt;/a&gt;. Co-credited on cmod. Also packaged &lt;strong&gt;vkBasalt&lt;/strong&gt; into the Winlator shortcut pipeline — the integration Bannerlator&#39;s &lt;strong&gt;ReShade&lt;/strong&gt; feature builds on.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;jacojayy&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;Maintainer of the &lt;a href=&quot;https://github.com/jacojayy/star&quot;&gt;Star&lt;/a&gt; line. Timeline Semaphore patches in the bundled Turnip driver for newer DXVK compatibility. Official site developer and maintainer.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Star / Frost dev team&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;The &lt;a href=&quot;https://github.com/star-emu&quot;&gt;star-emu&lt;/a&gt; team behind the original &lt;em&gt;Star Bionic&lt;/em&gt; and &lt;em&gt;Winlator Frost&lt;/em&gt; lines this build continues from.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;isygold&lt;/strong&gt; (AGBOOLA Israel Oluwagbogo)&lt;/td&gt; 
    &lt;td&gt;&lt;a href=&quot;https://github.com/isygold/vegas-releases&quot;&gt;Star Engine / VEGAS&lt;/a&gt; — the Adreno-optimized DXVK fork this build&#39;s &lt;code&gt;v1.3-vegas&lt;/code&gt; is named for, eliminating stutter and adding real-time upscaling on mobile GPUs, plus tuned &lt;a href=&quot;https://github.com/isygold/DXVK.CONF-FILE-SETTINGS-&quot;&gt;dxvk.conf profiles&lt;/a&gt;. See the &lt;strong&gt;&lt;a href=&quot;https://htmlpreview.github.io/?https://github.com/The412Banner/Bannerlator/raw/main/docs/vegas_faq.html&quot;&gt;VEGAS DXVK FAQ&lt;/a&gt;&lt;/strong&gt; for help &amp;amp; configuration.&lt;br /&gt;🚀 &lt;strong&gt;Support VEGAS Development&lt;/strong&gt; — low-level graphics dev &amp;amp; vibecoder: debugging, refactoring &amp;amp; improving original DXVK code for Adreno. &lt;strong&gt;&lt;a href=&quot;https://github.com/sponsors/isygold&quot;&gt;❤️ Sponsor →&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;vivsi&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;Controller support contributions.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;arro000&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;strong&gt;Virtual Controller Pro&lt;/strong&gt; (&lt;a href=&quot;https://github.com/The412Banner/Bannerlator/pull/156&quot;&gt;#156&lt;/a&gt;) — a ground-up on-screen touch-controls overhaul: new control types (Dynamic Stick, Mouse Area, Button Grid, Expandable Buttons), a Jetpack Compose-rebuilt controls editor with an &lt;strong&gt;in-game live editor&lt;/strong&gt;, control groups, key combos, per-element dead zones, custom control icons, and a control scale limit raised to 300%.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;clintOnSky&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;strong&gt;LSFG Native capture resolution + Vulkan 1.1 driver compat&lt;/strong&gt; (&lt;a href=&quot;https://github.com/The412Banner/Bannerlator/pull/512&quot;&gt;#512&lt;/a&gt;, 3.1.1) — runs LSFG Native&#39;s frame generation and the post-effect chain at a lower capture height and scales the result up, and lowers the LSFG shaders&#39; SPIR-V so a Vulkan 1.1 stock driver with the right extensions can run them; tested on his Adreno 710. Also found the double shader build that slowed LSFG Native&#39;s start.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;StevenMXZ&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;a href=&quot;https://github.com/StevenMXZ/Winlator-Ludashi&quot;&gt;Winlator-Ludashi&lt;/a&gt; and extensive cherry-picked work implemented in this build. This includes the &lt;strong&gt;new user interface&lt;/strong&gt; and the &lt;strong&gt;Vulkan rendering&lt;/strong&gt; path — both of which were &lt;strong&gt;still unreleased and unfinished at the time these builds and this repo were created&lt;/strong&gt; — along with various other cherry-picked commits. This work is set to be released properly in his upcoming &lt;strong&gt;3.1&lt;/strong&gt;.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;GameNative&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;a href=&quot;https://github.com/utkarshdalal/GameNative&quot;&gt;GameNative&lt;/a&gt; by &lt;strong&gt;utkarshdalal&lt;/strong&gt; — Proton bionic translation layers and cherry-picked commits adapted into this build. Its rendering pipeline was also the &lt;strong&gt;reference used to fix and rewire Bannerlator&#39;s render options&lt;/strong&gt; — the &lt;code&gt;AHardwareBuffer&lt;/code&gt; present path that makes Vulkan / DXVK / VKD3D content render correctly on both the OpenGL and Vulkan host renderers (GPUImage socket-buffer locking + EGLImage sampling, DRI3 direct-scanout, the Present extension&#39;s FLIP / COPY branches, and the Native Rendering+ direct-scanout path) was ported from and cross-examined against GameNative&#39;s implementation. The &lt;strong&gt;standalone FPS limiter&lt;/strong&gt; is GameNative&#39;s too — its guest-side present-pacing mechanism (delaying the X11 Present &lt;code&gt;IdleNotify&lt;/code&gt; to throttle the game itself, plus the rule that lsfg-vk&#39;s own pacing governs when its multiplier is ≥ 2) was ported from GameNative. For the &lt;strong&gt;Steam store&lt;/strong&gt; (2.3), the &lt;strong&gt;session-hardening patterns&lt;/strong&gt; (derived-&lt;code&gt;loggedIn&lt;/code&gt; state, off-pump PICS sync, single reconnect funnel, dead-token clearing, keep-alive / watchdog) and the &lt;strong&gt;&lt;code&gt;DownloadSpeedConfig&lt;/code&gt; cores × ratio 4-tier download-speed model&lt;/strong&gt; were also ported / adapted from GameNative. The &lt;strong&gt;PC-accurate controller vibration&lt;/strong&gt; feature (dual-motor rumble with per-container mode + intensity) originates from GameNative &lt;strong&gt;#1214&lt;/strong&gt;, reaching this build via &lt;strong&gt;TideGear&lt;/strong&gt;&#39;s port (see below). &lt;strong&gt;In 2.9.8&lt;/strong&gt;, the &lt;strong&gt;external-display (&quot;game on TV&quot;) concept&lt;/strong&gt; and the &lt;strong&gt;suspend-sink audio-recovery approach&lt;/strong&gt; (re-establishing the guest&#39;s audio output after backgrounding or a mid-game output-route change) were referenced from GameNative and reimplemented clean-room — the TV Options suite and Bannerlator&#39;s native &lt;code&gt;pasink&lt;/code&gt; libpulse audio client are original work, and the &lt;strong&gt;wireless casting&lt;/strong&gt; feature is entirely Bannerlator&#39;s own with no upstream equivalent.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;TideGear&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;a href=&quot;https://github.com/TideGear/GameHub-Vibration-Fix&quot;&gt;GameHub-Vibration-Fix&lt;/a&gt; — the &lt;strong&gt;PC-accurate controller vibration&lt;/strong&gt; work this build&#39;s rumble is built on. TideGear authored both halves: the original vibration feature PR (carrying &lt;a href=&quot;https://github.com/utkarshdalal/GameNative&quot;&gt;GameNative&lt;/a&gt; &lt;strong&gt;#1214&lt;/strong&gt; forward) and the &lt;strong&gt;preload-free &lt;code&gt;winebus.so&lt;/code&gt; rumble-duration patch&lt;/strong&gt; (PR &lt;strong&gt;#91&lt;/strong&gt;) that drops the &lt;code&gt;libevshim&lt;/code&gt; &lt;code&gt;LD_PRELOAD&lt;/code&gt; hook and instead byte-patches SDL&#39;s rumble duration to never auto-expire — which is what makes sustained rumble actually &lt;em&gt;hold&lt;/em&gt; instead of dying after ~1s. Adopted with the author&#39;s permission. Bannerlator re-derived the patch patterns per Proton build (9.0 / 10 / 11 aarch64 + Wine 10.0 x86-64) and added a build-agnostic structural fallback.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;WinNative&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;a href=&quot;https://github.com/WinNative-Emu/WinNative&quot;&gt;WinNative&lt;/a&gt; — the reference for Bannerlator&#39;s &lt;strong&gt;gyroscope (motion aim)&lt;/strong&gt; support. Its rate-mode gyro implementation is what ours is derived from: the sensor→stick pipeline (deadzone → sensitivity → exponential low-pass → clamp), the axis and sign conventions, and the fractional-remainder accumulator that keeps slow tilts from rounding away to nothing. Bannerlator adapted it to our evdev gamepad-injection path and extended the &lt;strong&gt;gyro-mouse&lt;/strong&gt; mode to also drive the X pointer directly, so motion control works on a Wine container desktop and not only in captured mouse-look games. &lt;strong&gt;In 3.0.6&lt;/strong&gt;, WinNative&#39;s native-side LSFG frame-generation implementation was the design reference for &lt;strong&gt;LSFG Native&lt;/strong&gt; — its choice to run the shaders in the emulator&#39;s own present path rather than as a guest layer, verified against its merged code stage by stage. GPL-3.0, same as this project.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/The412Banner/win-fg&quot;&gt;Win-FG Native&lt;/a&gt;&lt;/strong&gt; (Bannerlator)&lt;/td&gt; 
    &lt;td&gt;Bannerlator&#39;s own &lt;strong&gt;clean-room&lt;/strong&gt; frame generation — FSR3-family optical flow (MIT, AMD FidelityFX) plus a from-scratch synthesis, compiled into the compositor. No third-party frame-generation code or weights are bundled. Public repo, MIT, with per-shader provenance.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Eden Team / camillelavey&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;a href=&quot;https://git.eden-emu.dev/eden-emu/eden&quot;&gt;Eden&lt;/a&gt; — &lt;strong&gt;LSFG Native&lt;/strong&gt; (new in 3.0.6) is ported from Eden&#39;s native Lossless Scaling frame-generation present path (PR #4263 by &lt;strong&gt;camillelavey&lt;/strong&gt;, GPL-3.0): the PE-resource shader map, the ALPHA/BETA/GAMMA/DELTA stage decomposition and the pacer, re-hosted inside Bannerlator&#39;s compositor. Bannerlator bundles no Lossless Scaling shaders — they are extracted on device from the user&#39;s own &lt;code&gt;Lossless.dll&lt;/code&gt; (&lt;a href=&quot;https://store.steampowered.com/app/993090/Lossless_Scaling/&quot;&gt;Lossless Scaling&lt;/a&gt; by THS).&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;doitsujin (DXVK)&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;a href=&quot;https://github.com/doitsujin/dxvk&quot;&gt;DXVK&lt;/a&gt; — its &lt;code&gt;dxbc&lt;/code&gt; shader compiler (Zlib) is vendored to translate the Lossless Scaling DXBC shaders from the user&#39;s DLL into SPIR-V for &lt;strong&gt;LSFG Native&lt;/strong&gt;, the same step &lt;strong&gt;lsfg-vk&lt;/strong&gt; takes.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;PancakeTAS&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;a href=&quot;https://github.com/PancakeTAS/lsfg-vk&quot;&gt;lsfg-vk&lt;/a&gt; — the open-source Vulkan frame-generation layer (a Vulkan-layer reimplementation of Lossless Scaling&#39;s frame generation) that Bannerlator&#39;s former &lt;strong&gt;lsfg-vk&lt;/strong&gt; engine was built on, and whose DXBC→SPIR-V translation approach &lt;strong&gt;LSFG Native&lt;/strong&gt;&#39;s on-device shader step follows. &lt;em&gt;(The lsfg-vk engine itself is retired in 3.0.6.)&lt;/em&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;FrankBarretta&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;a href=&quot;https://github.com/FrankBarretta/lsfg-vk-android&quot;&gt;lsfg-vk-android&lt;/a&gt; — the Android/bionic port of lsfg-vk (AHardwareBuffer path + &lt;code&gt;vkCmdPipelineBarrier2&lt;/code&gt; shim) that ran as Bannerlator&#39;s lsfg-vk engine on the Turnip stack through 3.0.5. The in-game live multiplier/flow-scale reload uses the &lt;code&gt;conf.toml&lt;/code&gt; mtime-watch mechanism from &lt;strong&gt;GameNative&#39;s&lt;/strong&gt; &lt;a href=&quot;https://github.com/GameNative&quot;&gt;lsfg-vk-android fork&lt;/a&gt;. No proprietary shaders are bundled — users supply their own &lt;code&gt;Lossless.dll&lt;/code&gt; (&lt;a href=&quot;https://store.steampowered.com/app/993090/Lossless_Scaling/&quot;&gt;Lossless Scaling&lt;/a&gt; by THS) via the in-app picker.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;DadSchoorse&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;a href=&quot;https://github.com/DadSchoorse/vkBasalt&quot;&gt;vkBasalt&lt;/a&gt; (zlib) — the Vulkan post-processing layer that embeds the ReShade FX compiler. Bannerlator&#39;s &lt;strong&gt;ReShade&lt;/strong&gt; feature is a continuation of this work: the bundled layer is built from DadSchoorse&#39;s source, patched for live on-device toggle and slider control. The bundled / catalog &lt;code&gt;.fx&lt;/code&gt; effects are MIT / CC0 shaders by the &lt;strong&gt;ReShade (&lt;a href=&quot;https://github.com/crosire/reshade-shaders&quot;&gt;crosire&lt;/a&gt;)&lt;/strong&gt;, &lt;strong&gt;prod80 (&lt;a href=&quot;https://github.com/prod80/prod80-reshade-repository&quot;&gt;prod80-reshade-repository&lt;/a&gt;)&lt;/strong&gt;, &lt;strong&gt;luluco250 (&lt;a href=&quot;https://github.com/luluco250/FXShaders&quot;&gt;FXShaders&lt;/a&gt;)&lt;/strong&gt; and &lt;strong&gt;fubax&lt;/strong&gt; authors, each under their own MIT / CC0 license.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;leegao&lt;/strong&gt; (Lee Gao)&lt;/td&gt; 
    &lt;td&gt;Vulkan texture-compression work used for mobile-GPU compatibility and performance — the &lt;a href=&quot;https://github.com/leegao/bcn_layer&quot;&gt;BCn decompression layer&lt;/a&gt; (&lt;strong&gt;shader-v3&lt;/strong&gt;, powering 2.5&#39;s &lt;strong&gt;&quot;Wrapper + bcn_layer&quot;&lt;/strong&gt; Mali driver) and the &lt;strong&gt;DX12 &lt;code&gt;compat_layer&lt;/code&gt;&lt;/strong&gt; that, alongside it, powers 2.7&#39;s new opt-in &lt;strong&gt;&quot;Wrapper + compat + bcn&quot;&lt;/strong&gt; Mali DX12 driver — including the just-landed &lt;strong&gt;layer-composition fix&lt;/strong&gt; — plus real-time &lt;a href=&quot;https://github.com/leegao&quot;&gt;ASTC/ETC compute-shader encoders&lt;/a&gt; and the &lt;a href=&quot;https://github.com/leegao/bionic-vulkan-wrapper&quot;&gt;bionic-vulkan-wrapper&lt;/a&gt; (&lt;strong&gt;ETC2-Milestone-2&lt;/strong&gt;) bundled as the base wrapper for the Mali BCn path.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;WinterSnowfall&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;a href=&quot;https://github.com/WinterSnowfall/d7vk&quot;&gt;d7vk&lt;/a&gt; — the DXVK-lineage Vulkan implementation of DirectX 7 / DirectDraw (Direct3D 3–7) that powers Bannerlator&#39;s new &lt;strong&gt;D7VK&lt;/strong&gt; DDraw-wrapper option (new in 2.9.6). Bundled as the default and offered as downloadable nightly catalog builds.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;WinlatorMali&lt;/strong&gt; (GunaCharanTeja / Charan)&lt;/td&gt; 
    &lt;td&gt;&lt;a href=&quot;https://github.com/GunaCharanTeja/WinlatorMali&quot;&gt;WinlatorMali&lt;/a&gt; — the &lt;strong&gt;Wrapper Version Manager&lt;/strong&gt; (new in 2.7) is modeled on WinlatorMali&#39;s graphics-driver manager, introduced in &lt;a href=&quot;https://github.com/GunaCharanTeja/WinlatorMali/releases/tag/bionic-mali-1.1&quot;&gt;Winlator Mali Bionic 1.1&lt;/a&gt;; a number of the downloadable catalog wrappers come from WinlatorMali too (each credited in-app). The feature was requested in &lt;a href=&quot;https://github.com/The412Banner/Bannerlator/issues/132&quot;&gt;#132&lt;/a&gt; by &lt;a href=&quot;https://github.com/6ui99uhkllj&quot;&gt;@6ui99uhkllj&lt;/a&gt;.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;BrunoSX&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;The bundled Windows file manager is &lt;strong&gt;&lt;a href=&quot;https://github.com/The412Banner/banner-file-manager&quot;&gt;Banner File Manager&lt;/a&gt;&lt;/strong&gt; (new in 2.7.1), Bannerlator&#39;s fork of BrunoSX&#39;s &lt;a href=&quot;https://github.com/brunodev85/wfm&quot;&gt;Winlator File Manager&lt;/a&gt; (&lt;strong&gt;MIT&lt;/strong&gt;) — rebuilt with &lt;strong&gt;native Win32 file operations&lt;/strong&gt; (sidestepping the Proton 10.0-4 shell32 copy-paste crash), a &lt;strong&gt;dual-pane split view&lt;/strong&gt;, and &lt;strong&gt;Open-as-administrator / Open-with&lt;/strong&gt;.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/Tony57319&quot;&gt;@Tony57319&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;Reported / requested the &lt;strong&gt;lsfg Performance mode&lt;/strong&gt; frame-gen toggle new in 2.7.1 (&lt;a href=&quot;https://github.com/The412Banner/Bannerlator/issues/152&quot;&gt;#152&lt;/a&gt;).&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/clintOnSky&quot;&gt;@clintOnSky&lt;/a&gt;&lt;/strong&gt; 🌱 &lt;em&gt;(first-time contributor)&lt;/em&gt;&lt;/td&gt; 
    &lt;td&gt;Downstream fixes surfaced in &lt;a href=&quot;https://github.com/The412Banner/Bannerlator/pull/96&quot;&gt;#96&lt;/a&gt;, applied to &lt;code&gt;main&lt;/code&gt; individually: the &lt;strong&gt;Xiaomi/HyperOS &lt;code&gt;libjpeg.so&lt;/code&gt; symlink-shadow removal&lt;/strong&gt; that lets the frame-gen Vulkan layer load; the &lt;strong&gt;sign-agnostic battery-wattage fix&lt;/strong&gt; for Xiaomi/MTK devices that report discharge current as positive; and the &lt;strong&gt;&lt;code&gt;WOWBOX64&lt;/code&gt; content-type fix&lt;/strong&gt; for arm64ec Box64 downloads with live refresh of the component version lists after a download sheet closes.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;JavaSteam&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;a href=&quot;https://github.com/Longi94/JavaSteam&quot;&gt;JavaSteam&lt;/a&gt; (&lt;code&gt;in.dragonbra:javasteam&lt;/code&gt;) by &lt;strong&gt;Longi94&lt;/strong&gt; — the Steam &lt;strong&gt;connection-manager client&lt;/strong&gt; the built-in Steam store logs in and talks to Steam with, and — via the &lt;strong&gt;&lt;code&gt;javasteam-depotdownloader&lt;/code&gt;&lt;/strong&gt; fork by &lt;strong&gt;joshuatam&lt;/strong&gt; — the &lt;strong&gt;entire depot-download engine&lt;/strong&gt; Bannerlator&#39;s Steam store is built on.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Goldberg Steam Emu / gbe_fork&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;a href=&quot;https://mr_goldberg.gitlab.io/goldberg_emulator/&quot;&gt;Goldberg Steam Emu&lt;/a&gt; by &lt;strong&gt;Mr_Goldberg&lt;/strong&gt;, and &lt;strong&gt;gbe_fork&lt;/strong&gt; by &lt;strong&gt;&lt;a href=&quot;https://github.com/Detanup01/gbe_fork&quot;&gt;Detanup01&lt;/a&gt;&lt;/strong&gt; — the Steam emulator Bannerlator&#39;s &lt;strong&gt;Goldberg auto-patch&lt;/strong&gt; installs (Regular / Experimental / ColdClient tiers) for offline / emulated play of games you own.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Pluvia&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;a href=&quot;https://github.com/oxters168/Pluvia&quot;&gt;Pluvia&lt;/a&gt; — an Android Steam client whose patterns were &lt;strong&gt;referenced alongside GameNative&lt;/strong&gt; while building the Steam store&#39;s login / session handling.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;The412Banner&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;Full Jetpack Compose UI migration, in-game overlay rewrite, controller-support restore (SDL2 SoName fix + four event files), Box64 edit-dialog fix, theme system, and CI/release infrastructure. &lt;strong&gt;In 2.3&lt;/strong&gt;, building on JavaSteam / GameNative / Goldberg, the original engineering is Bannerlator&#39;s own: the &lt;strong&gt;cross-store Download Manager&lt;/strong&gt;, the &lt;strong&gt;four storefront integrations&lt;/strong&gt; (Steam / Epic / GOG / Amazon), the multi-week &lt;strong&gt;Steam session-hardening&lt;/strong&gt; work, the depot &lt;strong&gt;OOM fix&lt;/strong&gt;, the &lt;strong&gt;Goldberg auto-patch&lt;/strong&gt; integration, the store &lt;strong&gt;Material-3 restyle&lt;/strong&gt;, and the store-log &lt;strong&gt;credential redaction&lt;/strong&gt; (&lt;code&gt;StoreLog.redactUrl&lt;/code&gt;). &lt;strong&gt;In 2.4&lt;/strong&gt;, the &lt;strong&gt;fullscreen aspect-ratio pipeline&lt;/strong&gt; (Off/Fit/Stretch/Fill/Integer across all three renderers), the &lt;strong&gt;in-app File-Manager import picker&lt;/strong&gt; replacing SAF (with image thumbnails + percent/ETA import progress), the &lt;strong&gt;DLC picker&lt;/strong&gt;, the &lt;strong&gt;true-size depot install fix&lt;/strong&gt;, &lt;strong&gt;per-game persistence&lt;/strong&gt; of scaling / fullscreen / HUD position, and the &lt;strong&gt;container wallpaper picker&lt;/strong&gt;. &lt;strong&gt;In 2.5&lt;/strong&gt;, the &lt;strong&gt;Mali / BCn hardening&lt;/strong&gt; — wiring leegao&#39;s bcn_layer (shader-v3) + ETC2-Milestone-2 wrapper into the &lt;strong&gt;&quot;Wrapper + bcn_layer&quot;&lt;/strong&gt; and experimental &lt;strong&gt;&quot;Wrapper-gamenative&quot;&lt;/strong&gt; drivers, the &lt;strong&gt;BCn Layer Settings&lt;/strong&gt; UI, and the &lt;strong&gt;in-game logging overhaul&lt;/strong&gt; (copy-logs button, selectable log location, co-located DXVK/VKD3D logs, scrollable debug-channels dialog). &lt;strong&gt;In 2.5.1&lt;/strong&gt;, the &lt;strong&gt;SurfaceFlinger colour + crash fix&lt;/strong&gt; and per-container / per-game &lt;strong&gt;&quot;Correct SurfaceFlinger colours&quot;&lt;/strong&gt; toggle (ASurfaceRenderer R/B-swap fix + GPU converter, ported from GameNative #1620 / #1644), the in-game &lt;strong&gt;FEX runtime indicator&lt;/strong&gt; (arm64ec / x86-64 · FEXCore / wowbox64 / Box64 · unixlib / DLL, read live from &lt;code&gt;/proc/&amp;lt;pid&amp;gt;/maps&lt;/code&gt;), the &lt;strong&gt;FEXCore unixlib (&lt;code&gt;.so&lt;/code&gt;) auto-match&lt;/strong&gt; at launch (per-game version sync + uninstall cleanup), and &lt;strong&gt;18 new Environment Variable presets&lt;/strong&gt; (DXVK / VKD3D / Wine / Mesa). &lt;strong&gt;In 2.5.2&lt;/strong&gt;, the &lt;strong&gt;Community Configs&lt;/strong&gt; system — the in-app catalog browser, per-uploaded-config cards with live upvotes / downloads / comments, the surgical config-apply engine, and the smart inline installer for DXVK / VKD3D / FEXCore + Turnip drivers — plus &lt;strong&gt;two new Proton 11.0-1 x86-64 compatibility layers&lt;/strong&gt; (SDK 28 / SDK 35) built and published to the downloadable catalog. Also maintains the &lt;a href=&quot;https://github.com/The412Banner/Nightlies&quot;&gt;Nightlies WCP Hub&lt;/a&gt; and &lt;a href=&quot;https://github.com/The412Banner/Banners-Turnip&quot;&gt;Banners-Turnip&lt;/a&gt;.&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
 &lt;h3&gt;Upstream stack&lt;/h3&gt; 
 &lt;p&gt;The Wine/translation stack this app bundles or downloads:&lt;/p&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Component&lt;/th&gt; 
    &lt;th&gt;Author&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Wine&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;a href=&quot;https://www.winehq.org/&quot;&gt;WineHQ&lt;/a&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Box64 / Box86&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;a href=&quot;https://github.com/ptitSeb&quot;&gt;ptitSeb&lt;/a&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;FEXCore&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;a href=&quot;https://github.com/FEX-Emu&quot;&gt;FEX-Emu&lt;/a&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;DXVK&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;a href=&quot;https://github.com/doitsujin&quot;&gt;doitsujin / Philip Rebohle&lt;/a&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;DXVK-GPLAsync patch&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;a href=&quot;https://gitlab.com/Ph42oN&quot;&gt;Ph42oN&lt;/a&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;DXVK-Sarek&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;a href=&quot;https://github.com/pythonlover02&quot;&gt;pythonlover02&lt;/a&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;VEGAS&lt;/strong&gt; (Adreno-tuned DXVK / GPLAsync fork — &lt;code&gt;v1.3-vegas&lt;/code&gt;)&lt;/td&gt; 
    &lt;td&gt;&lt;a href=&quot;https://github.com/isygold/vegas-releases&quot;&gt;isygold&lt;/a&gt; · &lt;a href=&quot;https://htmlpreview.github.io/?https://github.com/The412Banner/Bannerlator/raw/main/docs/vegas_faq.html&quot;&gt;FAQ&lt;/a&gt; · &lt;a href=&quot;https://github.com/sponsors/isygold&quot;&gt;❤️ Sponsor&lt;/a&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;D7VK&lt;/strong&gt; (DirectX 7 / DirectDraw → Vulkan)&lt;/td&gt; 
    &lt;td&gt;&lt;a href=&quot;https://github.com/WinterSnowfall/d7vk&quot;&gt;WinterSnowfall&lt;/a&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;VKD3D-Proton&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;a href=&quot;https://github.com/HansKristian-Work&quot;&gt;Hans-Kristian Arntzen&lt;/a&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Turnip / Mesa&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;a href=&quot;https://gitlab.freedesktop.org/mesa/mesa&quot;&gt;Freedreno team @ Mesa&lt;/a&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Proton layers (bionic)&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;a href=&quot;https://github.com/utkarshdalal/GameNative&quot;&gt;GameNative&lt;/a&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Steam depot engine&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;a href=&quot;https://github.com/Longi94/JavaSteam&quot;&gt;JavaSteam&lt;/a&gt; by &lt;a href=&quot;https://github.com/Longi94&quot;&gt;Longi94&lt;/a&gt; · depotdownloader fork &lt;a href=&quot;https://github.com/joshuatam&quot;&gt;joshuatam&lt;/a&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Steam emulator (Goldberg auto-patch)&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;a href=&quot;https://mr_goldberg.gitlab.io/goldberg_emulator/&quot;&gt;Goldberg Steam Emu&lt;/a&gt; (Mr_Goldberg) · &lt;a href=&quot;https://github.com/Detanup01/gbe_fork&quot;&gt;gbe_fork&lt;/a&gt; (Detanup01)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Controller vibration (PC-accurate rumble)&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;Feature &lt;a href=&quot;https://github.com/utkarshdalal/GameNative&quot;&gt;GameNative&lt;/a&gt; #1214 · port + preload-free &lt;code&gt;winebus&lt;/code&gt; duration patch &lt;a href=&quot;https://github.com/TideGear/GameHub-Vibration-Fix&quot;&gt;TideGear&lt;/a&gt; (#91)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Gyroscope (motion aim)&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;Rate-mode pipeline + axis conventions from &lt;a href=&quot;https://github.com/WinNative-Emu/WinNative&quot;&gt;WinNative&lt;/a&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Steam Controller support&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;a href=&quot;https://github.com/libsdl-org/SDL&quot;&gt;SDL3&lt;/a&gt; (Sam Lantinga &amp;amp; the SDL contributors, zlib) — the official 3.4.16 Android release, bundled unmodified&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;EA games from Steam (EA Desktop chain)&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;Researched and implemented by &lt;strong&gt;The412Banner&lt;/strong&gt; — the methods and techniques &lt;a href=&quot;https://github.com/utkarshdalal/GameNative&quot;&gt;GameHub&lt;/a&gt; uses to launch EA titles were reverse-engineered and re-implemented for Bannerlator on its SteamLite agent&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Frame Generation (win-fg)&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;Bannerlator (clean-room)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Frame Generation (lsfg-vk)&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;a href=&quot;https://github.com/PancakeTAS/lsfg-vk&quot;&gt;PancakeTAS&lt;/a&gt; · Android port &lt;a href=&quot;https://github.com/FrankBarretta/lsfg-vk-android&quot;&gt;FrankBarretta&lt;/a&gt; · live-reload fork &lt;a href=&quot;https://github.com/utkarshdalal/GameNative&quot;&gt;GameNative&lt;/a&gt; · DLL &lt;a href=&quot;https://store.steampowered.com/app/993090/Lossless_Scaling/&quot;&gt;Lossless Scaling&lt;/a&gt; (user-supplied)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Post-processing (ReShade / vkBasalt)&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;a href=&quot;https://github.com/DadSchoorse/vkBasalt&quot;&gt;vkBasalt&lt;/a&gt; by &lt;a href=&quot;https://github.com/DadSchoorse&quot;&gt;DadSchoorse&lt;/a&gt; (zlib) · Winlator packaging &lt;a href=&quot;https://github.com/Pipetto-crypto/winlator&quot;&gt;Pipetto-crypto&lt;/a&gt; · effects by &lt;a href=&quot;https://github.com/crosire/reshade-shaders&quot;&gt;crosire&lt;/a&gt; · &lt;a href=&quot;https://github.com/prod80/prod80-reshade-repository&quot;&gt;prod80&lt;/a&gt; · &lt;a href=&quot;https://github.com/luluco250/FXShaders&quot;&gt;luluco250&lt;/a&gt; · fubax (MIT / CC0)&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
 &lt;h3&gt;Community reports &amp;amp; requests&lt;/h3&gt; 
 &lt;p&gt;Much of Bannerlator&#39;s polish is driven by the people who file issues and test builds. Recent features came directly from:&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;Angel&lt;/strong&gt; — requested the environment-variable presets that seeded &lt;strong&gt;2.5.1&#39;s&lt;/strong&gt; new preset set (&lt;code&gt;DXVK_DISABLE_TIMELINE_SEMAPHORES&lt;/code&gt;, &lt;code&gt;VKD3D_SHADER_MODEL&lt;/code&gt;).&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/kylinzang&quot;&gt;@kylinzang&lt;/a&gt;&lt;/strong&gt; — the driving force behind &lt;strong&gt;2.5&#39;s Mali / BCn support&lt;/strong&gt; (&lt;a href=&quot;https://github.com/The412Banner/Bannerlator/issues/70&quot;&gt;#70&lt;/a&gt;, originally #54 / #53): the original request, the env-var spec, the in-game logging overhaul, and iterative on-device testing on Mali-G57 through a full sign-off. Also fullscreen aspect-ratio modes (&lt;a href=&quot;https://github.com/The412Banner/Bannerlator/issues/71&quot;&gt;#71&lt;/a&gt;) and the in-app File-Manager import picker (&lt;a href=&quot;https://github.com/The412Banner/Bannerlator/issues/73&quot;&gt;#73&lt;/a&gt;).&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/rizky2-crypto&quot;&gt;@rizky2-crypto&lt;/a&gt;&lt;/strong&gt; — Mali-G610 BCn testing (&lt;a href=&quot;https://github.com/The412Banner/Bannerlator/issues/30&quot;&gt;#30&lt;/a&gt;).&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/SombraShadow&quot;&gt;@SombraShadow&lt;/a&gt;&lt;/strong&gt; — the container wallpaper picker (&lt;a href=&quot;https://github.com/The412Banner/Bannerlator/issues/66&quot;&gt;#66&lt;/a&gt;).&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/abdogm&quot;&gt;@abdogm&lt;/a&gt;&lt;/strong&gt; — magnifier cursor-follow &amp;amp; no-dim fixes (&lt;a href=&quot;https://github.com/The412Banner/Bannerlator/issues/44&quot;&gt;#44&lt;/a&gt;).&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/Devaspe&quot;&gt;@Devaspe&lt;/a&gt;&lt;/strong&gt; — the Steam install-blocker report that drove the true-size depot install fix.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;iamtooshaar&lt;/strong&gt; (Discord) — testing and bug-hunting on &lt;strong&gt;Steam Friends &amp;amp; Chat&lt;/strong&gt; (3.0.2), helping shake out the presence, history and image-send issues on real hardware.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;TAR&lt;/strong&gt; (Discord) — tested the &lt;strong&gt;Steam Controller&lt;/strong&gt; support through six builds (3.1.0) and shaped it: the bindings fix, the remappable back buttons and &lt;strong&gt;…&lt;/strong&gt; button, the 18-input controller test and the left / both trackpad options.&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;…and everyone in the Discord and on GitHub who tests builds and reports issues. 🙏&lt;/p&gt; 
 &lt;p&gt;Additional credits surfaced in the &lt;strong&gt;Star Bionic REVAMPED&lt;/strong&gt; project (&lt;code&gt;star.bionic-revamp&lt;/code&gt;):&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;@The412Banner&lt;/strong&gt; — Converting the UI to Jetpack Compose and rewriting the controller implementation.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;@jacojayy&lt;/strong&gt; — Timeline Semaphore patches in Turnip.&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;If you have contributed and are not listed, open a PR — this list is intended to be complete.&lt;/p&gt; 
 &lt;/blockquote&gt; 
&lt;/details&gt; 
&lt;hr /&gt; 
&lt;h2&gt;⚖️ Disclaimer&lt;/h2&gt; 
&lt;p&gt;Winlator and its forks are unofficial community projects. They are &lt;strong&gt;not&lt;/strong&gt; affiliated with or endorsed by Microsoft, Wine, the Mesa project, Qualcomm, &lt;strong&gt;Valve/Steam, Epic Games, GOG, Amazon&lt;/strong&gt;, or any game publisher. The built-in store sign-ins are a third-party login system for libraries &lt;strong&gt;you already own&lt;/strong&gt; — see &lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/#-security-hardening--your-store-accounts&quot;&gt;Security Hardening &amp;amp; your store accounts&lt;/a&gt;, and &lt;strong&gt;use them at your own risk&lt;/strong&gt;. Compatibility varies by device GPU, Android version, and individual game.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;📄 License&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;Bannerlator is licensed under &lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/LICENSE&quot;&gt;GPL-3.0&lt;/a&gt; as a whole&lt;/strong&gt;, because it incorporates GPL-3.0-licensed components (notably &lt;strong&gt;GameNative&lt;/strong&gt; and &lt;strong&gt;lsfg-vk&lt;/strong&gt;), whose copyleft governs the combined distribution.&lt;/p&gt; 
&lt;p&gt;The upstream &lt;strong&gt;Winlator → cmod → Bionic → Star → Ludashi&lt;/strong&gt; lineage it builds on is &lt;strong&gt;MIT © 2023 BrunoSX&lt;/strong&gt; (permissive, and GPL-3.0-compatible). That MIT notice — and the license and copyright of &lt;em&gt;every&lt;/em&gt; incorporated component (GameNative, lsfg-vk, gbe_fork/Goldberg, vkBasalt, bcn_layer, JavaSteam, Wine/Box64/Mesa/DXVK, FSR/NIS/SGSR, ReShade shaders, …) — is preserved in &lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/THIRD-PARTY-LICENSES.md&quot;&gt;&lt;code&gt;THIRD-PARTY-LICENSES.md&lt;/code&gt;&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt; 
&lt;p&gt;See &lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/LICENSE&quot;&gt;&lt;code&gt;LICENSE&lt;/code&gt;&lt;/a&gt; for the full GPL-3.0 text and &lt;a href=&quot;https://raw.githubusercontent.com/The412Banner/Bannerlator/main/THIRD-PARTY-LICENSES.md&quot;&gt;&lt;code&gt;THIRD-PARTY-LICENSES.md&lt;/code&gt;&lt;/a&gt; for all third-party attributions.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/247f60a0f611ce134896a7394890b617a225cc4fbcae63ded2ce35d64e0dbb21/The412Banner/Bannerlator" medium="image" />
      
    </item>
    
  </channel>
</rss>
