Android

55 posts

toss5 min readCurated summary

Toss’s Speed and Quality: Are Commercial Tools Enough? — Tossion

Toss’s QA Platform team built Tossion to replace a rigid commercial test case management system with a platform they could continuously adapt. It unifies test cases, manual and automated results, evidence, history, and release snapshots while preserving a clear record of what was tested at each point in time. The platform later expanded into AI-assisted PR analysis, test case generation, and real-device regression testing, enabling QA processes to evolve at Toss’s speed. ## Why Tossion Was Needed - Previous QA information was scattered across automation results, manual test results, test cases, and decision evidence. - Answering questions such as “How did this test perform last time?” required checking multiple systems. - The commercial TCM could not be modified quickly, and requests for new features often stalled. - Toss needed a platform that could be changed directly as new QA requirements emerged. ## Preserving Test History - Tossion organizes work as: - Project - Suite - Section - Test Case - Test cases continue to change as products evolve, but test runs must preserve historical reality. - When a test run is created, it copies the test case’s assignee, steps, and description instead of merely referencing the current test case. - Status changes create history entries showing who made the decision, when, and against which version. - Closed test runs store snapshots of test cases, comments, and automation results, so reports remain available even if the original test cases are later deleted. - Manually selected test cases override Type or Platform filters. ## Collaborative Test Execution - Test runs progress through `Active → Completed → Closed`. - Assignee-based charts show each person’s remaining work at a glance. - Fields such as Status, Type, Assignee, Version, Platform, RNR, and History are added or removed based on actual usage. - Multiple users can work in the same test run simultaneously: - Active viewers appear as avatars. - Editing locks prevent conflicts. - Locks are automatically released when users leave or disconnect. - Status changes are synchronized without requiring a refresh. - The main benefit is short feedback loops: requested improvements can be built and deployed immediately. ## AI-Assisted Release and PR Analysis - Toss planned to use AI for test case creation, PR analysis, regression automation, and execution. - Tossion analyzes every PR included in a release, separating those with QA labels from those marked as not requiring QA. - The goal is not merely to summarize changes, but to audit whether “no QA needed” classifications are correct. - An agent running on a QA server: - Registers with Tossion. - Polls for work. - Executes the AI already authenticated on the server. - Hundreds of PRs are divided into smaller batches and analyzed in parallel for deeper review. - Results are checked for vague or unusable content, such as: - Missing screens or conditions. - Repeated PR titles. - Raw function names. - Missing reproduction steps, expected results, failure symptoms, or reasoning. - Invalid analyses are retried, and the number of merged PRs is compared with the number of analyzed PRs to detect omissions. - Historical incident data increases risk when a new PR touches files associated with past outages. - Results are uploaded after each batch, allowing interrupted jobs to resume without repeating completed analysis. - The resulting “must-test” list defines the scope of the Sprint test run. ## AI-Generated Test Cases - AI generates test cases for new features, but Tossion controls their placement in the test case tree. - AI returns paths such as `Assets > Account Connection > Select Bank`; Tossion converts them into actual sections, reusing existing sections or creating missing ones. - Reliability is checked in three layers: - AI reviews its own output for missing branches, error cases, and boundary values. - Scripts validate naming, numbering, screen coverage, and requirements coverage. - A separate AI creates an independent test plan based on ISTQB and ISO/IEC 29119 practices. - The plan and generated cases are compared: - Planned but missing cases indicate omissions. - Cases outside the plan indicate unplanned scope. - This catches state-based scenarios that screen-oriented test generation might miss. - Generated cases are uploaded through a portable CLI rather than direct UI integration, reducing dependency on local packages, runtimes, and paths. - Stable cases can later become regression tests. ## Running Regression Tests on Real Devices - A Tossion execution modal specifies: - Device - Build - Test scope - Target test run - Runners connected to Android and iOS physical devices register themselves with Tossion but require administrator approval before receiving work. - Runners report device status every 30 seconds. - Tossion supplies the correct build for installation, ensuring results are tied to a known version. - Users can run the full regression suite or a selected section. - Progress is streamed as scenarios finish, including duration and failure messages. - Results are stored at the step level: - Status - Duration - Error message - Screenshot - Scenario-level video - Automation results can be attached directly to the relevant Sprint test run, making them part of the same record used for manual testing. ## Linking Automation Results to Test Cases - Aggregate reports such as “200 regression tests, 3 failures” do not identify which manual test case rows were covered. - Tossion aims to connect test cases and automation in both directions: - Generate automation code from test cases. - Write automation results back into individual test cases. - This removes the need for QA engineers to manually reconcile separate reports with test case lists. Tossion’s central value is not just test management, but ownership and adaptability. By combining immutable test history, collaborative execution, AI validation, and real-device automation in one extensible platform, Toss’s QA team can adjust its tools and processes as quickly as product requirements change.

Read original(opens in new tab)
discord3 min readCurated summary

Discord Patch Notes: August 4, 2026

Discord’s August 4, 2026 patch focuses on usability, reliability, performance, and interface cleanup across desktop and mobile. The update introduces another phase of the User Settings redesign and upgrades the desktop client to Electron 42, producing modest CPU improvements. Most remaining changes are bug fixes for overlays, profiles, themes, input fields, responsive layouts, and mobile rendering. ## User Settings Redesign and Performance - “Activity” has been renamed **Games & Apps**. - “Content & Social” is now **Messaging Permissions**. - Related options, including Authorized Apps, Connections, operating-system settings, and keybinds, have been consolidated. - Wording and styling were updated across Data & Privacy and Activity Privacy settings. - Discord’s desktop client now runs on **Electron 42**, improving maintenance and slightly reducing CPU usage. ## Desktop Fixes - Fixed email changes failing after CAPTCHA completion. - Resolved black screens caused by the game overlay when certain games were tabbed out. - Stabilized profile popouts that resized or jittered when game data loaded. - Fixed theme previews permanently changing the default theme. - Restored the ability to reposition the overlay chat widget and prevented overlay actions from grabbing images or opening dialogs in the wrong window. - Corrected activity-status issues when activity detection was disabled. - Fixed custom theme switching after using the theme editor. - Improved server selectors and long dropdowns, preventing selections from reverting or scrolling back to the top. - Corrected invite validation after users left a server to make room under the server limit. - Restored access to main profiles when users also had private per-server profiles. - Fixed numerous layout and interaction issues involving coachmarks, modal positioning, focus rings, close buttons, profile cards, and resized windows. - Improved truncation for long server names, connection names, custom statuses, and other profile text. - Fixed visual defects involving badges, gradients, phone verification fields, wishlist cards, and game-shop modals. - On Linux, Stable and Canary clients now use distinct window classes so taskbars and window managers group them correctly. ## Mobile Fixes - Improved Android game-profile scrolling performance and reduced dropped frames. - Fixed clipped profile controls on iPad. - Resolved an Android gesture issue that could leave the You Bar on a blank screen. - Fixed server icons failing to render after returning from picture-in-picture mode. - Corrected iOS name-style effects such as “Toon” and “Pop” when status text was present. - Prevented multiline pastes from expanding single-line fields such as nicknames, server names, and role names. - Fixed clipped game titles in the Active Now card, especially on iPad and with larger text sizes. - Improved display of long connection links on Android and iOS profiles. - Corrected mismatched colors on Android’s Server Boosts page in Light theme. - The provided patch notes end during an additional Android fix concerning the last friend in a list. The changes are merged but may still be rolling out across individual platforms. Users experiencing remaining issues are directed to Discord’s community-run bimonthly bug megathread.

Read original(opens in new tab)
discord3 min readCurated summary

General Availability of Mobile Platform Support Arrives in Discord Social SDK Version 1.10

Discord Social SDK 1.10 makes mobile support generally available for iOS and Android, extending Discord’s social features into mobile games. The update focuses on reducing friction through improved Account Linking, richer Rich Presence options, and mobile commerce. Early partners including Tencent, Scopely, and Ninja Kiwi report stronger social engagement, easier squad formation, and increased community activity. ## Mobile Platform Support - The SDK supports: - Android 7.0 and later - iOS 15.1 and later - C++, Unreal Engine, and Unity projects - The goal is to bring desktop-like Discord social experiences to smaller screens and on-the-go play. - Discord says the SDK was refined with launch partners and tested against real mobile player behavior. ## Rich Presence on Android - Android games can now share live Rich Presence through multiple methods: - Account Linking - Remote Procedure Call (RPC) - These integrations improve game visibility and help players share what they are playing with their Discord communities. ## Faster Mobile Account Linking - Deeplink support simplifies the account-linking process. - Players can connect their Discord accounts directly and with fewer steps. - The reduced friction is intended to improve retention, engagement, onboarding, and campaign activation. ## Discord Social Commerce on Mobile - Discord is expanding Social Commerce to mobile games. - Developers can sell in-game items through Discord to existing players, friends, and potential new customers. - Early Marvel Rivals pilot results showed: - 41% of purchases were gifts. - 25% of gift buyers were lapsed or new players. - These results suggest Discord’s social graph can support both monetization and player acquisition. ## Tencent: Arena Breakout - Arena Breakout used the SDK to address fragmented cross-platform friend networks and slow squad formation. - Its integration included: - A Unified Friends List - Game Invites - Improved mobile Account Linking - Reported outcomes included faster squad formation, more cross-platform messaging, and increased activity in the game’s official Discord server. - Tencent plans to combine Discord social features with limited-time in-game events. ## Scopely: Marvel Strike Force - Scopely integrated Discord into its turn-based RPG to support: - Player communication - Alliance management - Community interaction - Customer support and moderation - The integration produced immediate account linking among new players and rapid creation of alliance channels. - Community feedback was strongly positive, with players mainly wishing the integration had arrived earlier. ## Tencent: Delta Force - Delta Force used Discord to connect in-game play with its broader player community. - The initial integration focused on Account Linking and the Unified Friends List. - Single-tap mobile linking replaced browser redirects and manual logins, improving onboarding and campaign activation. - The integration supported squad formation and community-created content, with future plans for Discord discoverability and Rich Presence invites. ## Ninja Kiwi: Bloons TD 6 - Bloons TD 6 began integrating the SDK with Account Linking and the Unified Friends List. - The provided article text ends before describing the full integration or its results. The update positions Discord’s Social SDK as a way for mobile developers to strengthen retention, social discovery, community participation, and monetization. Developers targeting mobile games should consider the SDK’s deeplink Account Linking, Android Rich Presence, Unified Friends List, invites, and emerging commerce capabilities.

Read original(opens in new tab)
line4 min readCurated summary

Android CLI for AI Agents: Applying It to Large-Scale Mobile Development Environments

LINE’s Android app is a large monorepo with hundreds of Gradle modules and developers, making unrestricted AI-agent searches expensive and unreliable. Generic tools such as `grep` and `glob` often return excessive, semantically weak results, causing agents to waste tokens and retry. The team therefore built thin wrappers, skills, and prompts around Android CLI to provide efficient documentation lookup and Android Studio’s semantic capabilities across multiple agents. ## Why Generic Search Breaks Down at Scale - Large repositories can return huge numbers of search results from a single request. - Search output consumes agent context and increases costs. - Text search cannot reliably answer semantic questions such as: - Where a symbol is declared or used - Whether a file contains IDE-detectable problems - Whether code is unused - As the number of modules grows, agents are more likely to rely on irrelevant results and repeat searches. ## Replacing MCP Documentation Search with Android CLI - The team first adopted Android CLI for official documentation search. - It provides current documentation for Android, Jetpack Compose, AndroidX, Firebase, and related technologies. - This helps reduce hallucinations caused by outdated pretrained knowledge. - Android CLI’s `docs` commands are exposed through the `get-android-dev-knowledge` skill: - `docs search` finds relevant documentation. - `docs fetch` retrieves the document body from its Knowledge Base URL. - Compared with the previous Google Cloud Knowledge MCP setup, Android CLI eliminates: - Per-developer Google Cloud authentication - An authentication proxy - Quota-management and workaround logic - The result is fresher documentation with fewer tokens and less supporting infrastructure. ## Bundling the Android CLI Binary The team stores the Android CLI binary in the repository and invokes it from a fixed path such as `.agents/tools/android-cli/android`. - **Consistent environments** - Developers, CI systems, and agent hosts use the same pinned version. - Installation differences in version, path, and platform are reduced. - **Security enforcement** - The wrapper automatically adds `--no-metrics`. - This prevents agents from accidentally omitting the company-required telemetry setting. - A fixed binary location makes reliable wrapper enforcement possible. - **Manageable repository cost** - Existing use of Git LFS makes storing the binary relatively inexpensive. ## Handling the Android CLI Metrics Bug - Android CLI 1.0 initializes metrics tracking before honoring `--no-metrics`. - It may still attempt to write under `~/.android/cli`. - In restricted sandboxes, this causes a multi-page Java stack trace, wasting agent context. - The wrapper now probes write access before invoking the CLI: - It creates `~/.android/cli`. - It attempts to create a temporary probe file. - If writing is blocked, it emits a concise, parseable error explaining the required permission. - This converts a noisy failure into an actionable one-line message. ## Android Studio Integration Android CLI 1.0 added integration with running Android Studio instances, enabling IDE-level semantic operations from the command line. - `studio check` - Verifies that Android Studio is running. - Confirms that the target project is open and indexing is complete. - `analyze-file` - Runs IDE inspections on a single file without a build. - Detects semantic issues such as unused code. - `find-declaration` - Locates symbol declarations in the project and inside `.aar` or `.jar` dependencies. - `find-usages` - Finds references to a symbol. - `render-compose-preview` - Renders Compose `@Preview` functions as PNG images. ## Wrapping Studio Features as Skills - The team does not expose raw Android CLI behavior directly to agents. - Each capability is wrapped in a lightweight script and presented as an agent skill. - The first skill created was `studio-check`. - This follows the same design used for documentation search and ensures failures are concise, predictable, and easier for agents to interpret. ## Practical Recommendation For large Android repositories, use Android CLI behind repository-pinned wrappers and agent skills rather than exposing generic search or raw CLI commands directly. Enforce security flags, validate filesystem prerequisites early, and prefer IDE-backed semantic operations when agents need declarations, usages, inspections, or Compose previews.

Read original(opens in new tab)
toss5 min readCurated summary

Building Toss’s Device Farm

Nebula is Toss’s centralized device farm, turning real-device testing into a simple API call instead of a team-specific infrastructure project. It grew from 15 devices and one developer into a 24/7 platform with more than 100 devices, shared across the company. The team replaced Appium with a faster, stateless custom driver and invested heavily in real-time streaming, reliability, security, and compliance. ## From Team-Owned Farms to a Central Platform - Before Nebula, teams managed their own small farms using MacBooks or Mac minis. - Each team repeatedly solved the same problems: - Appium setup and maintenance - Device detection and recovery - OS-version compatibility - USB and hardware failures - Security and compliance - Most teams could manage only five to ten devices, and resources remained isolated. - Nebula centralized device operations so product teams could focus on testing rather than infrastructure. ## One API for Real Devices Nebula’s core goal is to let anyone control a physical device from anywhere through a single API. - Clients reserve a device and invoke actions such as clicks or text input. - Users do not need to know which host owns the device or configure ADB, Xcode, cables, or test servers. - The same API supports frontend tools, SDKs, CLIs, direct API clients, and automated systems. ## Four-Layer Architecture - **Clients:** Web interfaces, SDKs, CLIs, and direct API calls. - **Server:** Orchestrates device discovery, allocation, and test execution. - Kafka distributes execution requests. - Multiple runners consume work horizontally as demand grows. - `occupy`, `assign`, and `release` provide distributed locking so tests cannot interfere with one another. - **Agents:** Run on Android/Linux and iOS/Mac hosts, discover local devices, and forward server requests. - **Devices:** Each device has a controller server and runner that execute actions on the physical phone. ## Why Nebula Replaced Appium ### Faster execution - Nebula’s click and input operations were more than ten times faster than Appium in common cases. - Much of Appium’s latency comes from `waitForIdle`, which waits for the screen to stabilize before acting. - Disabling that wait narrows the difference to roughly two or three times. - Appium prioritizes robustness against changing screens, while Nebula prioritizes immediate interaction for live remote control. ### Stateless operation - Appium requires sessions that can take 15–40 seconds to initialize. - Session startup becomes increasingly fragile and difficult to manage at scale. - Nebula keeps device controllers pre-warmed and accepts stateless HTTP requests, eliminating session setup and reducing failure points. ### Company-specific customization Because Nebula owns its driver specification, it can provide: - A custom IME that preserves Korean and emoji input. - Toss-specific signal triggers. - App Center integration for installing pre-release builds. - Built-in enforcement of internal security policies. The driver uses Android ADB and UiAutomation, and Swift/XCTest on iOS. Its OpenAPI specification generates Go and TypeScript interfaces. ## Real-Time Interaction and Screen Mirroring Nebula needed users to watch and control remote devices simultaneously, not merely replay predefined test steps. ### Android - Instead of using `scrcpy` directly, the team adapted its encoding approach. - Android’s `SurfaceControl` creates a virtual display. - `MediaCodec` encodes the output as H.264. - A broadcaster distributes the stream to multiple browser viewers. ### iOS - iOS screen capture is constrained by USB access and cannot expose the display as freely as Android. - Existing approaches such as QVH and Appium MJPEG did not support simultaneous viewing and interaction. - Nebula developed a capture path inspired by QuickTime’s iOS capture mechanism without exclusively claiming the USB connection. - Both platforms now use H.264 streaming and broadcasting, allowing the entire device farm to be viewed in a browser. ## Security and Compliance - Centralization made it possible to apply consistent security requirements across every device. - The team worked with Toss’s security organization to define mobile-device compliance standards. - Policies are enforced at the platform and driver levels rather than relying on individual developers. - Teams can therefore test on devices that already meet the company’s security requirements. ## Operating Hundreds of Devices Nebula must keep hardware and software running continuously. - **Hardware operations** - USB cables, hubs, and power delivery had to be tested and designed for large-scale use. - Physical failures still require human intervention. - Redundancy is being introduced to reduce service interruptions. - **Software operations** - Controllers and mirroring processes are orchestrated across Mac mini and Linux hosts. - Dead processes are automatically recovered. - Server, agent, controller, and mirroring deployments are performed without interrupting user tests. - Monitoring and observability cover devices, processes, and server performance. ## An Internal Ecosystem Built on the API Nebula has evolved from a device provider into shared testing infrastructure. - Web console for no-code interaction and test-step creation. - SDKs for writing E2E tests. - CLI support for terminals, CI/CD, and local AI agents. - Automated log verification during device interaction. - AI agents that plan and execute tests dynamically. - Direct API access for teams with specialized needs. Reported benefits include faster Appium migration, lower barriers to regression testing, and reducing manual verification from 30–40 minutes to under 10 minutes. Nebula’s main lesson is that a stable, simple API can become the foundation for a much broader testing ecosystem. Centralizing device infrastructure, replacing unsuitable abstractions, and treating real-time operation, compliance, and reliability as first-class requirements enabled Toss to scale physical-device testing across the company.

Read original(opens in new tab)
discord3 min readCurated summary

Discord Patch Notes: July 7, 2026

Discord’s July 7, 2026 patch focuses on performance improvements, cross-platform reliability, usability fixes, and bug cleanup. Notable changes include nearly 20% faster typical iOS startup times through React Native’s Fabric architecture, faster session connections, Linux looping-media fixes, silent message forwarding, and channel pinning for all servers. The remaining changes address a wide range of interface, profile, notification, search, and platform-specific issues. ## Performance and Reliability - iOS migration to React Native’s New Architecture, Fabric, produced nearly 20% improvements in typical app initialization times. - A session-start configuration change reduced p95 and p99 connection times by approximately 100 milliseconds. - Linux GIFs and videos now loop correctly after a deep media-stack fix. - Linux no longer gradually leaks X11 connections on NVIDIA systems, which could eventually prevent other applications from opening. - Windows startup now launches Discord quietly in the background instead of stealing focus from games. - Desktop clients no longer stop accepting mouse clicks after two rapid refreshes. ## Messaging and Server Features - Message forwarding now supports `@silent`, allowing users to forward messages without notifying recipients. - Channel Pinning is now available on all servers, rather than only Community-enabled servers. - Invites to servers a user already belongs to now open the server directly instead of incorrectly starting Server Tag Adoption. - Invalid search filters such as `has: hello` are no longer treated as valid filters on Android and iOS. ## Desktop Interface Fixes - Profile cards, custom-status hover bars, and other elements now have corrected corner shapes, positioning, and overflow behavior. - Long searches no longer cause “No results” text to overflow searchable dropdowns. - Small login windows no longer show an unexpected scrollbar or misaligned sign-in box. - Adding widgets while editing a profile no longer discards unsaved changes. - Badge links now close the profile modal before opening Nitro Home or the Shop. - The “24 hours” custom-status expiration now lasts a full 24 hours instead of clearing at midnight. - Spelling suggestions now appear when right-clicking misspelled text in fields such as display names, poll questions, and channel names. - Search filter dates no longer shift forward by a day when reopening the filters modal. - The Inbox keybind no longer locks the client when another modal is open. - Nitro items in a user’s own wishlist now open the subscription modal instead of offering an impossible self-gift. ## iOS Improvements - Channel-list scrolling is smoother and no longer jitters or jumps. - Notification settings correctly recognize already-enabled push notifications without requiring the page to be reopened. - Profile previews now reflect pending display-name style changes. - Scheduled event and Live channel location text truncates correctly within cards. - iPad browser invites now preserve the invite code and display the invite properly in Discord. - Profile-tab scrolling no longer causes content clipping. - Shop item previews no longer make profile text flash and disappear. - Nitro perk descriptions are easier to scroll when system text is enlarged. - Various visual issues were corrected, including theme-colored boxes, unclear channel-list banners, and invisible or overflowing elements. ## Android Improvements - Nitro carousel indicators are now visible across default themes. - Incomplete server-application alerts can be dismissed by tapping outside them or pressing Back. - Profile-picture editor labels and sliders for “Scale” and “Rotate” now appear correctly on affected themes. - Profile Call and Message buttons now render at consistent sizes after accepting a friend request. Overall, the update is primarily a broad maintenance release: users should see faster startup and connections, more consistent media and navigation behavior, and fewer platform-specific interface bugs.

Read original(opens in new tab)
google3 min readCurated summary

A low-carbon computing platform from your retired phones

Retired smartphones can become low-carbon cloud infrastructure by reusing their still-capable motherboards instead of manufacturing new servers. Researchers at UC San Diego, with Google’s support, are developing clusters of stripped-down Pixel phones managed by Kubernetes. Their planned 2,000-phone datacenter aims to provide affordable computing for education and research while reducing hardware-related emissions. ## The Carbon Case for Reusing Smartphones - Computing emissions come from: - **Operational carbon**, produced by electricity consumed during use. - **Embodied carbon**, produced during hardware manufacturing and raw-material extraction. - Reusing phones primarily addresses embodied carbon by extending the life of components that remain functional. - Since people typically replace phones every four years, many retired devices still contain capable processors, accelerators, memory, and storage. ## Smartphone Performance and Limitations - Modern smartphone performance cores can match or exceed the per-core performance of some data-center servers. - Smartphones have significant limitations compared with servers: - Fewer, heterogeneous processor cores. - Only 8–12 GB of memory. - Less capacity for large, multithreaded workloads. - The platform therefore targets workloads that fit on a phone or can be distributed across multiple devices. ## Converting Phones into Datacenter Hardware - Unmodified phones are unsuitable for datacenters because they include unnecessary and potentially hazardous components such as: - Displays and cameras. - Batteries not designed for sustained datacenter operation. - Consumer-oriented chassis and peripherals. - Researchers remove everything except the motherboard, which accounts for roughly 50% of a phone’s embodied carbon. - Android’s mobile userspace is replaced with a general-purpose Linux distribution. - This removes mobile-specific restrictions such as Android’s “low memory killer” and enables broader server-style programmability. - Kubernetes manages containerized applications across clusters of approximately 25–50 phones, equivalent to roughly one conventional server. ## Applications for Education and Research - Many university workloads—including Jupyter notebooks, grading systems, and research applications—require modest resources that a single smartphone can provide. - Early tests showed that a 20-phone cluster could handle peak grading demand for a class of more than 75 students while achieving latency below a typical AWS backend. - The planned 2,000-phone cluster could support around 100 comparable classes simultaneously. - The deployment would provide approximately 50 server-equivalents at substantially lower cost. ## Testing Computing at Scale - The project will evaluate whether consumer smartphone hardware can operate reliably under sustained datacenter workloads. - It will also serve as a large-scale testbed for distributed smartphone computing. - The system is expected to launch at UC San Diego in fall 2026. Repurposing retired phones offers a practical way to reduce demand for newly manufactured computing hardware, especially for lightweight academic and cloud workloads. The approach is most promising when applications can tolerate distributed resources and the reliability challenges of consumer-grade components.

Read original(opens in new tab)
discord2 min readCurated summary

Discord Patch Notes: June 4, 2026

Discord’s June 4, 2026 patch focuses on usability, performance, accessibility, and bug fixes across desktop, Android, and iOS. Major updates include a mobile call-confirmation prompt, an 8% improvement in median desktop startup time, a redesigned Account settings page, and a clearer voice-invite embed. The release also addresses numerous layout, navigation, accessibility, and platform-specific issues. ## New Features and Improvements - **Mobile call confirmation** - Adds a confirmation step after tapping call buttons in direct messages. - Helps prevent accidental calls. - **Faster desktop startup** - Improved median startup times by approximately 8%, or around 650 milliseconds. - Additional performance work is planned. - **Redesigned Account settings** - Updates visuals and wording to match the broader User Settings redesign. - Moves Devices, Family Center, Account Standing, and Multi-Factor Authentication into nested Account pages. - **Improved voice-invite embeds** - Displays the relevant server and channel. - Shows the number of users currently in the voice channel. - Adds animated avatars and hover details for usernames. ## General Bug Fixes - Fixed Android custom status text crowding the clear button. - Corrected iOS event behavior involving external Markdown links, mentions, sharing, QR login, themes, notifications, and profile images. - Fixed guest server invites getting stuck in onboarding or application flows. - Improved handling of long nicknames, wrapped time indicators, event descriptions, community announcements, and high zoom levels on desktop. - Corrected inaccurate Android search results when combining `has:forward` with Media, Links, or Files filters. - Fixed mobile navigation issues, including the Set Status back button. - Prevented empty Bluesky handle submissions from bypassing form validation. - Removed incorrect or unreachable keyboard shortcut hints and scrollbars. - Improved tab navigation and focus behavior for accessibility. - Fixed visual inconsistencies involving rounded corners, themes, font scaling, gradients, cursors, borders, and tinting. - Corrected invite, server discovery, event, and profile interactions that opened the wrong view or failed silently. - Improved behavior at high zoom levels and in smaller windows, including Shop filters and Event Details modals. The patch is intended to make Discord more reliable and polished across platforms. Users may not receive every fix immediately because the changes are still rolling out individually.

Read original(opens in new tab)
line4 min readCurated summary

From Tokyo to Fukuoka, Finding Answers in the Field: Our CS InquiryChat Implementation Journey

MessagingHub replaced Demaecan’s third-party customer-service chat with its own InquiryChat platform. The transition eliminated annual licensing costs, improved operational flexibility, and reduced repeat customer inquiries by about 20%. The project’s success depended not only on rebuilding features, but also on observing call-center work directly, aligning distributed stakeholders, and balancing agent convenience with user privacy. ## Why Demaecan Chose an In-House Platform - Demaecan’s existing chat provider was being discontinued, prompting a choice between upgrading to another vendor solution or adopting InquiryChat. - InquiryChat was selected because it offered: - Zero licensing costs - Flexible customization for Demaecan’s processes - Direct internal technical and operational support - Secure access to customer information - Real-time analytics and reporting - The migration had to preserve service continuity while changing agents’ workflows and tools. ## Problems with the Existing Service - Agents could preview messages before users sent them, creating a transparency and privacy concern. - Chat sessions were not preserved when users left, forcing customers to repeat their inquiries. - Vendor customization and integration options were limited. - Some existing features appeared useful on paper but were not actually used in call-center operations. - Because agents were accustomed to the existing system, they needed evidence that the replacement would improve their daily work—not merely solve problems identified by headquarters. ## Understanding Real Call-Center Needs - Requirements initially arrived indirectly through multiple departments, making their operational context difficult to understand. - The team reorganized requirements into: - Standard platform features - Features requiring customization or review - Features requiring new development - PM Kim Seri visited two call centers in Fukuoka, observed peak-hour operations, and interviewed agents and managers. - Field research revealed: - A manager-support chat feature was unnecessary because agents used hand signals instead. - Audio alerts were ineffective because office environments kept sound muted. - Integration with the existing CS system was essential because agents had to summarize and record every interaction after a chat. - These observations helped the team remove unnecessary features while raising the priority of workflows that were genuinely critical. ## Managing a Distributed Migration - The project involved teams in Korea and Japan, two Fukuoka call centers, external operators, and multiple internal departments. - To create a shared operating model, the PM: - Built a Jira dashboard to visualize progress and support data-driven decisions. - Created a master specification as a single source of truth. - Led internal product and development QA to ensure the original intent was implemented correctly. - Produced detailed operational guides for launch and adoption. - These processes reduced ambiguity across the project and supported a smoother transition from development to live operations. ## Focus Group Testing and Interviews - A focus group test (FGT) brought all stakeholders together to act as customers and CS agents. - Participants followed complete scenarios, from opening an inquiry through resolution. - The FGT exposed user-experience issues before formal QA, including: - Unclear role and status indicators - Android push-notification instability - Keyboard and input-field overlap - Missing timestamps on links - Push-title wording issues - Chat logs not consistently reaching the CS system - Several issues were fixed immediately, while clearer role and status displays were scheduled for further improvement. - Follow-up focus group interviews found the system generally stable and easy to operate, though some participants initially needed time to understand operator and manager roles. ## Balancing Agent Convenience with Privacy - Agents strongly valued the old “message being typed” preview because it helped them anticipate replies and reduce average handling time (AHT). - From a platform perspective, previewing unsent or deleted text was a serious information-ownership and privacy risk. - Rather than simply removing the feature, the team introduced a typing-status indicator. - This preserved agents’ awareness of the customer’s response rhythm without exposing the customer’s actual unfinished text. The project demonstrates that successful system internalization requires more than feature parity. Direct observation, structured stakeholder coordination, realistic user testing, and privacy-conscious design enabled Demaecan to reduce costs while improving both operational efficiency and customer experience.

Read original(opens in new tab)
meta1 min readCurated summary

Reel Friends: Building Social Discovery that Scales to Billions

Friend Bubbles may look like a simple Reels feature, but building it required substantial engineering work. The feature surfaces Reels that friends have watched or reacted to, relying on an evolving machine-learning model and platform-specific behavior. Meta engineers explain that a key, unexpected discovery ultimately helped make the experience work. ### What Friend Bubbles Does - Highlights Reels that a user’s friends have watched or reacted to. - Connects social activity with Reels recommendations in a more visible way. ### Engineering Challenges - The team had to evolve the machine-learning model powering the feature. - iOS and Android users exhibited different behaviors, requiring the team to account for platform-specific usage patterns. - The feature’s apparent simplicity concealed complex recommendation and product-engineering challenges. ### Podcast Discussion - Meta Tech Podcast host Pascal Hartig speaks with Facebook Reels engineers Subasree and Joseph. - They discuss the model’s development, differences between mobile platforms, and the surprising insight that helped the feature succeed. - The episode is available through Meta’s podcast channels and services including Spotify, Apple Podcasts, and Pocket Casts. The episode illustrates why seemingly straightforward social features can demand deep experimentation, modeling, and cross-platform engineering.

Read original(opens in new tab)
discord3 min readCurated summary

Discord Patch Notes: May 4, 2026

Discord’s May 4, 2026 patch focuses on reliability, performance, usability, and server administration. Major improvements include nearly 5% faster Android video startup, reorganized desktop settings, faster Soundboard access, and self-updating Linux support. The release also fixes numerous bugs across account profiles, search, payments, moderation, notifications, and mobile platforms. ## Performance and Platform Improvements - Android video startup improved by 4.89%, bringing average feed startup time below 600 milliseconds. - Soundboard data now loads when users join a voice channel rather than when they first open the Soundboard, reducing initial access time. - Linux now uses Discord’s Rust-based automatic updater, eliminating the need for manual update installation. - Linux installation now supports `.rpm` and `.pkg.tar.zst` packages. ## Server Administration and Moderation - Discord fixed several issues affecting server administrators and moderators. - Fixes covered permissions, user states, and interactions with account-safety systems. - Discord encouraged administrators to report remaining problems through its community bug megathread. ## Desktop Settings and Organization - Desktop settings were consolidated into three pages: - Appearance - Accessibility - Developer - The former Appearance, Accessibility, Chat, Streamer Mode, and Advanced sections were reorganized. - Several settings received clearer wording and improved layouts. - Fixed problems involving theme synchronization, profile editing, unsaved-change warnings, currency labels, and server administration prompts. ## General User Interface Fixes - “GODLIKE!!” and “BEYOND GODLIKE!!” copy-username messages now have opaque backgrounds. - The Quick Switcher can now accept invite links, join the associated server, and navigate to it. - Fixed display problems involving long nicknames, search filters, avatar controls, profile links, status indicators, and Nitro badges. - French users can now search for “sondage” without the search term being incorrectly split. - Android search filters now correctly display their active blue state. - Fixed several modal, button-spacing, and navigation issues across desktop and mobile. ## Profiles, Avatars, and Customization - Per-server avatar links now copy correctly instead of copying the main profile avatar link. - Clearing per-server pronouns no longer repopulates them from the main profile; the main pronouns appear only as a placeholder. - iOS no longer switches unexpectedly to a per-server profile after copying a username. - Recent-avatar delete controls now appear correctly. - Custom Status editing opens above the full profile instead of replacing it. - Fixed an issue where clicking outside profile editing discarded changes without warning. ## Notifications, Search, and Media - Desktop Inbox no longer crashes when many notifications are cleared rapidly. - Mobile search tabs for Media, Pins, Files, and Links no longer spam errors or retry repeatedly after a connection loss. - Expired public image links in the Inbox preview now behave more reliably. - Fixed an issue where long mobile search-result nicknames obscured timestamps. ## Payments and Server Boosting - Server Boost marketing audio now stops when users enter the purchase flow. - Pressing Escape during payment no longer closes the underlying Server Boost page instead of the payment window. - Nitro trial recipient checkboxes now select friends correctly. - Fixed overlapping controls in Profile Settings and spacing issues on the domain-connection page. - GBP subscription settings now show the currency’s full name. Discord’s changes combine small interface corrections with measurable performance and platform improvements. Users should receive the fixes progressively, since deployment may still be rolling out across platforms.

Read original(opens in new tab)
discord3 min readCurated summary

Discord Patch Notes: April 6, 2026

Discord’s April 6, 2026 patch focuses on performance, accessibility, media sharing, and a broad set of usability fixes across desktop, iOS, Android, and Linux. The most notable improvements reduce desktop voice-channel deadlocks by about 30% and reduce iOS image-upload sizes by 17% and latency by 12%. Discord also continues a major accessibility audit while addressing numerous navigation, layout, search, and platform-specific bugs. ## Performance and Media Sharing - Desktop changes reduced deadlocked Voice threads by approximately 30%, making users less likely to remain stuck on “Connecting.” - iOS image uploads now use files roughly 17% smaller and complete about 12% faster. - Mobile landscape mode was improved by calculating padding on a screen-by-screen basis rather than relying on global padding rules. - Android server reordering now scrolls more smoothly. ## Accessibility Improvements - Discord is continuing a large accessibility audit across its clients. - Fixes addressed keyboard focus rings, button alignment, text overflow, and controls becoming inaccessible in longer languages. - Desktop profile buttons, settings controls, and the Server Invite modal received layout and focus improvements. - Discord encourages users to report remaining accessibility problems through its bug-reporting channels. ## Search, Navigation, and Account Behavior - Search negation now works correctly with filters such as `has:-image`. - The desktop `CMD/CTRL+F` shortcut no longer opens server search while a modal is active. - Browser-style back and forward navigation now behaves correctly after switching accounts. - Opening a Discord link from a browser no longer replaces the current channel without preserving a usable way to return. - Fixed several Settings and modal-navigation problems, including unexpected jumps to the bottom of the page. ## Desktop and Settings Fixes - Corrected keybind-button alignment and keyboard focus positioning. - Fixed profile buttons extending beyond the visible area in languages with longer text. - Shop item modals can now be closed by clicking outside them at minimum window height. - Profile bio changes are properly cleared by the Reset button. - Removed a persistent “NEW” badge from the `@time` command. - Corrected outdated role designs in Server Template previews. - Fixed visual issues involving nameplates, profile banners, Nitro perk badges, and Shop error-message spacing. - The Desktop update indicator no longer appears clickable while an update is still downloading. ## Mobile and Platform-Specific Fixes - Wayland now properly detects when Linux users become active or go AFK. - Android now provides visual confirmation after sending a friend request through a QR code. - Android theme changes update the entire Settings interface immediately. - Android QR-code login buttons now appear active when usable. - Android’s In-App Browser setting correctly opens links inside Discord. - iOS users can now switch out of Invisible status reliably. - iOS server lists no longer jump when switching servers. - iOS Server Guide progress bars and welcome messages now display and dismiss correctly. - Fixed an iOS crash that could occur when canceling a Nitro Classic subscription. - iOS search results now display images in bot-message containers at the correct size. ## Messaging, Profiles, and Social Features - Removed duplicate friend suggestions for users who had already received a request. - Fixed incorrect profile connection icons for external links. - Corrected duplicate usernames shown in pending friend-request tooltips. - Channel-name inputs no longer incorrectly offer custom emoji, which channel names do not support. - Student Hub join-method filtering now works properly. - Server Tags and badges received alignment fixes on Android. - The Nitro gift emoji picker’s “Add Emoji” button now functions correctly. Discord recommends updating as fixes reach each platform, with additional early testing available through the iOS TestFlight release.

Read original(opens in new tab)
discord2 min readCurated summary

Discord Patch Notes: March 6, 2026

Discord’s March 6, 2026 patch focuses on safer mentions, faster desktop startup, accessibility, and a broad collection of platform-specific bug fixes. Escaped `@everyone` and `@here` mentions are now correctly ignored by the backend, preventing accidental mass notifications. Discord also reports an 11.8% median improvement in desktop time-to-interactive after changing API payload ordering. ## Safer Mention Handling - Escaped mentions such as `\@everyone` previously appeared harmless in the client but could still notify roles when sent. - Backend handling now respects escape characters for `@everyone` and `@here`, ensuring these messages do not trigger mentions. - The change addresses cases where users received no warning before unintentionally notifying large server populations. ## Desktop Performance - Discord changed the order of API payloads sent to desktop clients. - The update reduced median launch time, or p50 time-to-interactive, by 11.8%. - The improvement builds on navigation performance work released the previous week. ## Accessibility Improvements - Discord completed a broad accessibility pass covering Quest, Events, Profiles, Activities, and Nitro surfaces. - The changes are intended to improve screen-reader navigation and usability across these areas. ## General and Platform Fixes - Non-Nitro users can once again forward messages containing large attachments from Nitro users. - iOS startup times after a full device restart were fixed; an asset request had been competing with the busy boot-time background queue. - Mobile animations no longer remain stuck mid-transition. - League of Legends game invites and Overlay “Join” invites were repaired. - Android fixes include the Forest theme gradient, duplicate server-invite information, modal layering, role colors, and server-onboarding alignment. - Search-result keyboard selection no longer remains stuck on the first item. - Desktop fixes address private-channel role setup, oversized hyperlinks, broken embeds, Quick Switcher shortcuts, tooltip links, and copying webhook URLs without confirmation. - Server administration fixes include role sorting, role-selector scrolling, onboarding dropdown positioning, audit-log deletion reasons, permission-panel alignment, and non-removable role controls. - iOS fixes restore back-swipe navigation, correct switch styling, reduce overly aggressive settings scrolling, and prevent the device from being kept awake unnecessarily. - Browser and mobile layout issues were corrected across server lists, profiles, Nitro Home, boost flows, and message controls. Discord recommends trying the iOS TestFlight build for early features and reporting remaining bugs through the community bug megathread. Fixes had been merged but could still be rolling out gradually across platforms.

Read original(opens in new tab)
daangn4 min readCurated summary

Solving a 20

Carrot’s short-form video editor expanded its Android module to 200MB, later reduced to 40MB by moving filters and effects to a CDN. Because editing is used by relatively few users and is unavailable globally, the team adopted an on-demand Dynamic Feature Module (DFM) so most users would not install the extra assets. Rather than moving all editor code into the DFM, they ultimately separated only the large native libraries, achieving most of the size reduction with less operational risk. ## The Problem: A Large Video-Editing Module - Video editing introduced filters, effects, stickers, and native SDK resources totaling about 200MB. - CDN delivery reduced the module to 40MB and enabled updates and A/B testing without app releases. - The remaining 40MB was still an unnecessary burden for global users and users who never edit videos. ## Choosing On-demand Dynamic Feature Modules - Android App Bundles support: - **Install-time delivery:** installed with the app. - **On-demand delivery:** downloaded when requested. - **Conditional delivery:** installed based on conditions such as country or API level. - The team selected **On-demand Delivery** so the editor would download only when a user tapped the edit button. - After installation, the module remains local for subsequent use. - The user experience also required handling download progress, network failures, and first-use delays. ## Challenges of Separating the Entire Feature ### Hilt and Dependency Injection - Hilt combines dependency graphs at compile time, but the base and DFM modules are built separately. - DFM annotations such as `@Inject` and `@Module` are therefore unavailable during the base build. - The solution was to expose dependencies from the base module through a Hilt `EntryPoint`. - The DFM then constructs its own Dagger component at runtime. ### SplitCompat - On-demand modules are installed as split APKs. - The default `ClassLoader` may not recognize classes and resources added later. - `SplitCompatApplication` or `SplitCompat.install(this)` is required. - Without it, the app can encounter `ClassNotFoundException` or resource-loading failures. ### Native SO Libraries - DFM native libraries are installed in SplitCompat-managed paths rather than the standard `nativeLibraryDir`. - `SplitInstallHelper.loadLibrary()` may be required instead of `System.loadLibrary()`. - Unmodifiable third-party SDKs may need to remain in the base module. - Base and DFM modules must use identical ABI filters, or bundle creation can fail. ### STL and Native Version Conflicts - Multiple native libraries may share `libc++_shared.so`. - Because Android’s linker follows a “first-loaded wins” rule, the base module’s STL version can be used by DFM libraries. - NDK or STL mismatches can cause symbol conflicts, runtime crashes, or memory corruption. - The team used packaging exclusions and `pickFirsts` rules to control which libraries were included in each module. ### R8 Configuration - Keeping R8 rules only in the DFM caused base-module types to be obfuscated incorrectly. - The team centralized keep rules in the base module and minimized DFM consumer rules. ## Final Architecture: Separate Only the SO Files - Most of the remaining 40MB came from native video-processing, filtering, and rendering libraries. - The editor’s Kotlin/Java code occupied only a few hundred kilobytes. - The team kept feature code in the base module and delivered only the large SO files on demand. ### Benefits - If the DFM download or native library loading fails, the app can show an error instead of crashing. - Local development and debugging remain straightforward. - Separating only native libraries still reduced the module size by more than 90%. ### Trade-offs - Engineers must explicitly manage module installation, library loading, and feature startup. - Keeping code in the base while native binaries reside in the DFM is less intuitive. - The launch flow checks installation, loads the library, and then starts the editor. ## Testing and Operational Practices - Test both installed and uninstalled DFM states. - Validate real download behavior through Play Console internal testing or Internal App Sharing. - Use `bundletool` for local iteration and device-specific APK generation. - Universal APKs can simplify rapid installation and verification. - Test module installation and failure scenarios, not just normal editor execution. The main recommendation is to optimize for stability and maintainability rather than complete architectural separation. For large Android apps, isolating the largest native dependencies with on-demand DFM delivery can protect global users from unnecessary downloads while preserving team autonomy and operational simplicity.

Read original(opens in new tab)
discord3 min readCurated summary

Discord Patch Notes: February 4, 2026

Discord’s February 4, 2026 patch focuses on performance, streaming, permissions, mobile consistency, and bug fixes across desktop, iOS, and Android. The largest improvements include faster desktop rendering, zoomable screenshares, a new Slowmode bypass permission, and continued migration of Discord’s audio/video backend to Rust. The update also adds usability refinements and resolves numerous interface, profile, notification, and stability issues. ## Performance and Infrastructure - Desktop navigation and interaction are significantly faster, especially on systems with limited processing capacity. - The improvements were primarily achieved by replacing slow CSS selectors rather than optimizing APIs or components. - More than 80% of Discord’s audio/video traffic now runs through the Rust-based backend. - Stream previews load substantially faster during the start-stream process. ## Screensharing and Media - Users can zoom and pan screenshares and game streams with a mouse wheel or laptop trackpad. - Android now correctly plays videos containing multiple audio tracks, such as microphone and game audio. - Currently playing voice messages stop correctly when users log out. - Android Group DM notifications now show the group name instead of the sender’s name, matching iOS behavior. ## Server Permissions and Time Formatting - A new **Bypass Slowmode** permission lets server administrators trust selected members to bypass slowmode restrictions. - The permission can be integrated into existing roles through Role Settings until February 23. - Desktop now includes an `@time` command for generating localized Linux timestamps that automatically adapt to each viewer’s time zone. ## General Usability Improvements - Vibing Wumpus has been updated to version 2.0 and can be summoned with: - `Ctrl+Alt+Shift+W` on Windows/Linux - `Cmd+Option+Shift+W` on macOS - Pressing Escape while editing a desktop profile no longer closes the entire profile modal. - Copying with nothing selected no longer clears the clipboard. - Browse Channels on mobile has officially left beta. - Clicking role mentions now shows users assigned to that role for all stable users. - Invite Friends to Server supports both usernames and display names. - Ignoring a friend request correctly changes the action from “Accept Friend Request” to “Add Friend.” ## Profile, Themes, and Server Interface Fixes - Fixed cursor-jumping while editing the About Me section. - Avatar Decorations now render correctly in per-server profile editing. - Profile Theme gradients fill their modal correctly. - Server tags now appear accurately in desktop profile previews. - Fixed alignment and styling issues in Members, Emoji, Connections, and Display Name Styles interfaces. - iOS Client Themes no longer scroll at extremely high speed. - Channel categories on iOS no longer resemble unread channels. - Android no longer displays an extra bottom bar that blocks interaction. ## Stability and Bug Fixes - Fixed crashes involving related stickers in servers without text channels. - Prevented duplicate Checkpoint and gift-reception modals. - Emoji editing no longer creates duplicates when Finish is clicked twice quickly. - Desktop Inbox filtering works correctly again. - Fixed a desktop lockup that could occur after adding a game to a profile without saving. - Mobile Community setup now renders properly. - The Shop displays multiple columns correctly on affected Android devices. - Keybinds involving keys above F10 now persist correctly. - Event previews properly render Markdown. - On iOS, GIF avatars selected through the GIF picker remain animated instead of becoming static images. - Additional fixes address onboarding overlays, dangerous-download modal spacing, role selection transparency, event buttons, server uploads, and localized status text. Discord’s update is primarily a quality and performance release. Users should see the greatest immediate benefits from faster desktop interactions, improved streaming controls, better mobile behavior, and more precise server administration tools, although individual fixes may continue rolling out by platform.

Read original(opens in new tab)