Repository navigation
This release has 33 patches, 30 of them switches, for all 37 arm64 builds of Messenger 580.0.0.49.91 and 581.0.0.49.91. It adds Messenger 581 and a new switch, Hide joined community chats. Hide AI sticker tools now covers the Generate buttons in the sticker keyboard, and Allow screenshots covers view-once media and Quicksnap.
New
- HushMessenger now patches Messenger 581.0.0.49.91 as well as 580.0.0.49.91 (#29). All 16 arm64 builds APKMirror lists for 581 pass the compatibility checks, and Morphe Desktop 1.18.1 applied all 33 patches to each of them with a 1 GB heap. On a Galaxy S22, v0.14.0 on Messenger 580 updated in place to this release on 581 and kept its sign-in and chats. Meta renumbered two server flags and moved several screens around in 581, so People You May Know, joined community chats, inbox ads, the AI sticker Generate buttons, screenshots in view-once media, Native Bubbles and the HushMessenger menu row now follow the new layout. On 581 the HushMessenger row sits right under Settings, above the new QR code row. The 580 builds patch exactly as before.
- Hide joined community chats is a new control that starts off. It filters subscribed channels and announcements from the main Chats list (the All chip) while keeping conversation data, delivery and unread state intact. Displayed row counts follow the filtered list. Off or Pause restores the original list on the next render. Other chips such as Channels and Unread, search and community folders keep their rows. Folder and membership checks cover all 21 supported builds.
- Hide AI sticker tools also hides the Generate buttons in Messenger's newer sticker keyboard. The guard matches the verified AI label and leaves other cells alone. Allow screenshots also covers the secure-window calls in view-once media and Quicksnap. It preserves unrelated flags, lifecycle code and the original calls while off or paused. All 21 supported builds have records for these routes.
- Settings expose each control's full row as one accessible switch. The title, description and activity label share a touch target, and the switch keeps its keyboard focus. Unavailable controls can be read but can't be toggled. Live TalkBack checks on an isolated Android 16 preview read the title and description as one control and changed the saved choice once per double-tap. The enabled-count summary stays readable without announcing after every toggle. Regression checks cover Android 9 and 16.
Changed and fixed
- Patch builds now use Morphe Patcher 1.15.1 and the maintained MorpheApp ARSCLib fork. The tested tools are Morphe Manager 1.34.0 and Morphe Desktop 1.18.1. Migration checks applied all 32 patches to all 21 supported APKs at a 1024 MB heap, verified signatures for the five naming groups and retained their native libraries. Two fresh checkouts produced the same bundle bytes. Kotlin and Bouncy Castle security pins remain in place.
- The install check reads signer details from Android Build Tools 37 as well as 36.1. Build Tools 37 labels each signer with its signature scheme, and the check used to stop with "Cannot establish the complete current signer set" when it saw that format.
- The early v0.0.2 to v0.0.8 previews are no longer marked as pre-releases on GitHub. Catalogs that follow pre-releases kept offering v0.0.8 from them, and that stops on their next refresh.
- Inbox switches such as Hide People You May Know, friend requests and growth prompts now give one steady answer to each chat list Messenger builds. Messenger asks the same question when it lists a section, when it starts the section's loading and when it stops it, and a switch flipped in between now waits for the next chat list instead of splitting those steps. Restart Messenger applies a change everywhere at once.
- The full compatibility check now requires the exact stock APKs. Community fixtures use recorded stock identities, and media replay goes through shared discovery. Tests track fixture changes and reject duplicate builds that would leave another build untested.
- File tests now share Android's atomic-replace semantics on Windows, check post-commit read failures, and cover nonseekable restores on Android 16. Community discovery also reuses its constructor identifier in both scans.
- Retained unsent markers are capped at 4,096 IDs and no longer share the settings monitor. This only prunes markers, never message content.
- Choices saves check media-row ownership before opening the destination for writing. A picker can't use a Messenger-owned MediaStore row to overwrite its content.
- An original-photo success callback that throws no longer receives a second failure callback or loses the copy it was handed.
- Theme return hooks keep incoming branches attached to the color helper. Menu binding rejects reused holder registers before making changes, and the story Save helper is retained even when the patcher has already cached direct methods.
- Community filtering preserves the native list type and checks backward and switch branches before reusing temporary values. Screenshot support now stays unavailable if any matching viewer method changes, even when the original methods still exist. Other controls remain available.
- Profile recording now parses the rebuilt manifest, resource table and every DEX. A successful Desktop report and valid ZIP are no longer enough to accept malformed APK contents.
- Changed media-viewer or community code now leaves those controls unavailable while other patches can still apply. Community discovery runs once during setup and reuses fixed method identifiers while checking the APK. Manager 1.33.0 applied all 33 patches to Messenger 581 at its unchanged 640 MB limit, with a 288 MB peak.
- Closing settings or canceling an update check no longer waits for a slow cache write. Pending writes from canceled checks are discarded, and an older write cannot replace a newer result.
- Saving choices continues through rotation or closing settings, with the same 30-second limit and a completion or failure message. Closing the screen no longer cancels a save after its destination may have been emptied. Restores still cancel when settings close.
- Compatibility profiles now require Desktop to apply every patch and rebuild the APK before the record is written. Discovery alone could previously accept a changed menu or drawer that the patcher rejected. The check rejects incomplete results and changing input files.
- Open in settings and Restart Messenger now find Messenger when you've switched to one of its alternate app icons. They used to report that no launcher was available, because they read each icon's built-in default instead of whether Messenger had turned it on.
- Safe mode keeps counting startup crashes even when its saved count can't be read, so a crash loop still pauses the controls after three tries.
- Update checks recover on their own if GitHub's reply no longer matches the saved release details. A retry time from GitHub never holds checks back for more than a day, and it never shortens the normal wait between failed checks.
- Development release checks compare the held public feed with the one published under its release tag, and the development version must be newer. Catalog validation runs the Gradle wrapper directly and stops the whole process tree if it times out. The compatibility report keeps going when the community route changes on a new build, and the memory gate reports a damaged output APK without dropping the other results.
- The memory gate now checks every build of every supported Messenger version. It used to expect exactly 21 and would have refused to start once 581 was added.
- The memory gate runs at most two builds at once, with two processors per Java process. Compatibility and patching failures include their subprocess exit codes. Regression tests check that all inputs run without exceeding the concurrency limit.
- Focused dependency tests run five partial patch selections through compilation. A failed sibling keeps the successful patch, advertises no failed control and leaves its own native target unchanged. A later selection starts with no stale keys. Each run checks a single settings and extension injection.
- Opted-in update checks reuse validated release details for an hour and send their ETag on later checks. GitHub retry times are shown in settings and respected. Quota reset times apply only to an exhausted quota, so secondary limits keep their own retry wait. Release links must match their tags, and development builds ahead of the public release show both versions. Late replies can't save cache data after cancellation.
- Copy setup includes the control descriptions shown in settings and explains what recorded activity proves. Receipt wording keeps the local unread and reply limits explicit. Sign-in and past-call-log documentation now reflect the observed results.
- Original-quality photos enforce the 20 MB limit throughout preparation and delivery. Files that grow during a read or while a callback waits are rejected. Cleanup keeps the source and earlier copies intact. Existing scan bytes, color profiles and orientation handling are preserved.
- Crash records verify replacement contents before committing them. Android 9 and 10 check the backup rename before a write can overwrite the old record, and a completed save won't trigger a rollback. Recovery checks preference saves too. If a save fails, settings keep the controls paused and show a retry message. A successful recovery restores the saved theme immediately. Invalid preference types keep host startup disabled. Existing records remain readable.
- Development bundles can be validated while the public feed remains held. Validation checks both DEX files, including mapped section counts, bounds and referenced item starts, and the exact loaded catalog. Cached catalog comparisons preserve JSON types. Validation freezes the bundle with its checksum outside the build folder. The memory gate uses that snapshot and checks that its bytes stay unchanged. Release validation keeps its publication checks separate.
- File saves and restores can be canceled. Settings stop waiting after 30 seconds and release the screen when it closes. Late results can't change choices, and a storage app that ignores cancellation can't start unlimited background work. File slices retain their absolute boundaries, including files supplied with a different initial position. If you cancel a save, save again before you rely on that file.
- Repository links now use the HushMessenger artwork as their social preview.
- Manager 1.33.0 applied all 32 patches at its existing 640 MB process limit, with a peak heap of 290 MB. The signed result passed archive checks and kept every native library unchanged. Fresh-checkout reproduction and non-English setup diagnostics also passed. A development build updated an existing signed-in installation without replacing its key or losing its chat history.