If HushMessenger makes Messenger better for you, a coffee helps me keep testing patches and maintaining them as Messenger changes.
HushMessenger is a set of Morphe patches for Facebook Messenger. You bring the Messenger APK, Morphe patches it on your phone, and you get a Messenger with a settings screen full of switches that stock Messenger doesn't have. Hide the ads, the suggested people, the stories row and Meta AI. Stop sending read receipts and typing indicators. Watch stories without showing up in the viewer list. Keep a log of messages so an unsend can't take them back. Send photos at their real quality, use your own font, let Material You color the app, and more.
Every switch starts off, so a freshly patched Messenger behaves like stock until you turn something on. The current release has 57 patches. What changed in each version is in the changelog.
Add HushMessenger to Morphe Manager
Important
Keep your signing key. A patched update only installs over your copy when it's signed with the same key, and with the same key your sign-in and chats survive each update. See Morphe's backup and keystore guide.
- Get the APK. HushMessenger patches arm64 Messenger 583.0.0.29.95 only. Download one from APKMirror's 583.0.0.29.95 page and check its version code against the supported builds. A 32-bit build shares the version name and won't work.
- Add the source. Open the link above on your phone with Morphe Manager (1.34.0 or newer) installed. Or in Manager open Sources, tap +, choose Remote and enter
github.com/SysAdminDoc/HushMessenger. The card should show 57 patches. If it shows an older version, tap its refresh button. - Patch Messenger. The default selection includes every switch. Three patches start unselected because they change the app package itself: Clone install under another package name, Spoof package version and Custom new-message sound. To add one, turn on Settings → Advanced → Expert mode in Manager and use Choose patches.
- Keep one source. Don't add the remote source and a local copy together, and don't mix in Messenger patches from other sources.
Prefer a local source? Download patches-0.24.0.mpp and add it through Sources > + > Local. It won't update itself. The .mpp file is a patch bundle, not a Messenger APK. Morphe Desktop 1.18.1 can load the same source too.
Long-press Messenger's icon on your home screen and tap Patch controls. The HushMessenger row in Messenger's Menu tab and side menu opens the same screen, and so does the HushMessenger settings icon in your app drawer. App > Hide app drawer icon hides that icon without touching Messenger. Inside Messenger, a long press on the Messenger logo at the top of Chats or on the Menu tab's title opens settings too, even while changes are paused. On a Root Mount install there's no drawer icon, and the long-press shortcuts appear once Messenger has started.
Pause all changes turns every switch off at once without forgetting your choices. Changes to the Meta AI and bottom tabs, bubbles, your font and Restore old emoji drawer need Restart Messenger. Inbox options show up with the next chat list Messenger builds. While a restart is waiting, a bar at the top of settings says how many and has the button, and after the restart settings open again on the page you left. The button is also on the App tab and in the icon's long-press menu. If Messenger crashes three times near startup, safe mode pauses the controls. Open settings and tap Resume.
The Controls tab has All, Inbox, Chats and More filters and a search box that finds every word you type, in any order. A switch that's on shows when Messenger last checked it. The App tab has the restart button, Quick setups (Quiet, Privacy or Back to defaults in one tap), appearance, Save choices to a file and Restore choices from a file, and Copy setup, which copies your versions and switch states with no chats or account details in it. Report a problem opens a new GitHub issue with your versions, phone model and the switches that are on already filled in. Issues are public, so look it over before you send it. Check for updates is off by default. When it's on, it asks GitHub at most once an hour and sends nothing but the request.
The screenshots below show the settings in the current release, in the dark and light themes.
| Switch | What it does |
|---|---|
| Hide inbox ads | Filters Messenger's older inbox ad cards. Experimental, since no live inbox ad has shown up on the test accounts yet. |
| Hide joined community chats | Takes joined channels and announcements out of the main Chats list. The other chips keep them. |
| Hide People You May Know | Removes suggested people from the chat list, search, stories and the People and Notifications tabs. |
| Hide friend request cards | Hides friend request cards in the chat list. Nobody gets accepted or declined. |
| Hide growth prompts | Removes the add-people promotion, the notes tip sheets and the "Share your own story" card after someone's stories. |
| Hide inbox promotions | Hides promotion banners in the chat list. |
| Hide stories and notes | Hides the row of stories and notes above your chats. |
| Hide inbox tabs | Hides the Home and Channels tabs inside the inbox. |
| Hide Mark as read | Takes Mark as read out of the menu you get when you press and hold a chat, so you can't mark one read by accident. Mark as unread stays. |
| Pin more chats | Raises Messenger's limit of three pinned chats to 20, so more of them can stay at the top of your chat list. Experimental, since Messenger's servers can still stop you sooner. |
| Hide People tab | Hides the People tab in the bottom bar. Restart Messenger to see it go. |
| Hide Notifications tab | Hides the Notifications tab in the bottom bar. Restart Messenger to see it go. |
| Hide Facebook shortcuts | Removes Facebook toolbar, profile and sharing shortcuts, and the "Also from Meta" and "Subscriptions" sections in the Menu tab. Keep the Profile button, right under it, leaves the chat details Profile button in place. |
| Hide Meta AI | Hides the Meta AI button, tab and menu entries, the "Ask Meta AI" search button and the AI suggestions when you type @ in a chat. Existing AI chats stay. The tab changes after a restart. |
| Hide Chat Moments | Removes Chat Moments from the menu. |
| Hide Reels badge | Hides the Reels notification badge. |
| Hide AI sticker tools | Hides the generated-sticker tab, AI sticker suggestions and the Generate buttons in the sticker keyboard. |
| Hide avatar stickers | Hides the avatar tab in the sticker keyboard. |
| Restore old emoji drawer | Keeps the emoji keyboard's earlier layout. Takes effect after a restart. |
| Keep emoji search on emoji | Typing with the emoji keyboard open no longer flips it to sticker search. |
| Hide chat promotions | Hides promotion banners inside conversations. |
| Hide ad banners in business chats | Hides the ad banner in a chat you started from a business's ad. |
| Hide business reply suggestions | Hides suggested replies in business chats. |
| Hide business typing suggestions | Hides business suggestions that pop up as you type. |
| Hide event prompts | Hides event promotion prompts inside chats. |
| Hide typing indicator | Others no longer see that you're typing, encrypted chats included. |
| Stop analytics uploads | Blocks Messenger's analytics uploader. Events still get recorded on your phone and can upload once you turn this off. |
| Stop ad attribution uploads | Stops the job that sends your advertising ID and ad tracking setting to Meta. |
| Stop inbox and ad link logging | Stops the reports about which part of your chat list was on screen and which ad opened a chat. |
| Stop MQTT logging | Drops the health reports and push logging Messenger's MQTT client sends. Messenger sends most of its traffic another way, so there's often little for it to drop. Messages and calls keep working. |
| Stop nearby scans | Stops Messenger from reading the list of Wi-Fi networks around you, and hides the name and hardware address of the one you're connected to, the way Android does when Messenger can't see your location. Also stops the timer it can run while it's open to check your location and scan for Wi-Fi networks and Bluetooth devices. Experimental, since Messenger hasn't started those scans on the test phones yet. |
| Stop app list and device ID sharing | Stops Messenger from going through your installed apps to find other Meta apps, and from asking them for the device ID Meta uses to link its apps on one phone. Messenger keeps the ID it already has. Experimental. |
| Keep a message log | Saves a copy of each message that raised a notification, encrypted chats included, so an unsend can't take it back. It stays on your phone, encrypted. View log and Clear log sit under the switch. |
| Auto reply | Answers messages with a reply you write, for certain words or for any message. One reply per chat every five minutes, and group chats only when you allow it. |
| Hide read receipts | Opening a chat no longer sends Seen. The chat stays unread on your phone until you reply or mark it read. Group chats haven't been checked. |
| Mark as read button | Works with Hide read receipts. A chat's top bar gets Messenger's own Mark as read icon, and tapping it sends the Seen that opening the chat held back. When the bar is full it replaces the chat details button (tapping the chat's name opens the same page). Experimental. |
| View stories anonymously | Opens other people's stories without adding you to their viewer list. |
| Save any story | Adds Save to the More options menu on other people's stories. |
| Keep unsent messages | Keeps messages on the older unsend routes and marks them "[unsent]". Encrypted chats aren't covered. |
| Allow screenshots | Lets you screenshot protected photos and media, view-once included, with no screenshot notice to the sender. |
| Use system emoji | Draws emoji with your phone's own set on Android 12 and newer. |
| Send photos at original quality | With HD on, a JPEG photo up to 20 MB goes out with its own image data instead of Messenger's re-encoded copy. Location and camera details are stripped, as Messenger does. |
| Send videos without re-encoding | A video up to 25 MB goes out as it is. |
| Fix videos that won't send | A video whose only sound is xHE-AAC gets that sound converted to regular AAC, and a Samsung screen recording loses the tag Samsung's recorder adds when Messenger's media check rejects it, so neither ends in "Unable to send". Works for videos shared in from another app and ones picked in a chat. |
| Use the phone's camera app | A chat's camera button opens your own camera app. Photos only. |
| Open web links externally | Opens http and https links in your default browser. |
| Slide chats in and out | Slides a chat in from the side when you open it and back out when you leave. |
| Hold stories at the end | A story stays on screen when it ends, photo or video, until you tap or swipe to the next one. The last one stays open until you close it. Experimental. |
| Turn off the swipe up for disappearing messages | Swiping up at the bottom of a chat no longer turns on disappearing messages. |
| Allow chat bubbles | Stock, Chat Heads or Native Bubbles (Android 11 and newer). See Chat heads and bubbles. |
| Unlock app icons | Every icon in Messenger's App icon setting becomes selectable without a subscription. |
| Material You theme | In dark mode on Android 12 and newer, Messenger takes the accent color from your wallpaper. A Pure black dark mode switch sits under Appearance. |
| Use your own font | Replaces Meta's font with your phone's, or with a .ttf or .otf file you pick, with size and position adjustments. Restart Messenger after a change. |
| Bold and italic text | Adds Bold and Italic to the text selection menu. They change the letters A to Z, accented ones included, and Bold changes digits too. Other alphabets stay as they are. On a Samsung phone, turn them on once under Manage apps in that menu. |
| Open settings from menu | Adds the HushMessenger row to Messenger's Menu tab and side menu, and makes a long press on the Messenger logo at the top of Chats or the Menu tab's title open settings. Always on. |
- Install beside Meta apps renames Messenger's two shared Meta permissions so a patched Messenger installs next to a stock or patched Facebook. If you patch Hushfacebook too, sign both with the same key.
- Restore screens on re-signed builds answers Messenger's check of its own certificate with Meta's, so a re-signed build opens to your chats instead of a blank screen.
- Clone install under another package name installs a second Messenger beside the first, as
com.facebook.orca.hushand Messenger Clone unless you change them. Push notifications may not reach the copy, and Root Mount can't use it. - Spoof package version gives Messenger a very high version code (2147483647 unless you pick another) so the Play Store stops offering updates. Keep it selected with the same number when you patch a later build, since Android won't install a lower code over a higher one.
- Custom new-message sound plays a sound file you pick when you patch (.ogg, .mp3, .m4a or .wav, 1 MB or less) in place of Messenger's new-message sound.
- Can't find the settings. Long-press Messenger's home screen icon and tap Patch controls. If no way in shows up at all, refresh the source and patch again.
- Switches do nothing. The settings live inside the patched Messenger, and refreshing a source only downloads patches. Patch and install again. The Meta AI tab and the old emoji drawer only change after Restart Messenger. Inbox options wait for the next chat list Messenger builds, and a restart applies them right away.
- The source shows an old version or misses a patch. Refresh it and check that it shows v0.23.0. A local source needs the new
.mppadded by hand. - APK rejected. Use an unmodified arm64 Messenger 583.0.0.29.95 whose version code is in the supported builds. The error names the builds it checked.
- Android won't install over stock Messenger. A re-signed APK can't replace Meta's signed copy. Back up first, since going from one to the other means uninstalling. Later updates of your patched copy need the same key.
INSTALL_FAILED_VERSION_DOWNGRADE ... older than current 2147483647. Another patch set raised Messenger's version code to Android's maximum, and Android remembers it even after an uninstall that kept data. Don't uninstall or clear data to get past it. An in-place update needs the same signing key and a version code at least that high, so patch with Spoof package version selected at that number.- Uninstalling the settings icon removes Messenger. Both icons belong to one app. Hide the icon with App > Hide app drawer icon instead.
- Install blocked on a Galaxy phone. Samsung's Auto Blocker only lets apps in from Galaxy Store and Google Play, and it blocks USB installs too. Turn it off in Settings > Security and privacy > Auto Blocker, install, then turn it back on. Google's Advanced Protection (Settings > Google > All services > Privacy & security > Advanced Protection) blocks the install the same way.
Messenger and Android handle this without a switch. In Messenger's app info, set the Chats notification category to Silent first. Then in each chat you still want alerts from, tap its name, open Notifications & sounds > Customize notifications and pick Alert. Do it in that order. A chat only keeps its own setting once you change it, so chats you haven't touched follow Chats and arrive quietly.
Allow chat bubbles offers three modes. Stock leaves Messenger alone. Chat Heads uses Messenger's own overlay, so turn on Messenger's Settings > Chat heads and grant Appear on top. On a Samsung phone, chat heads needed Unrestricted battery use to arrive in the background. Native Bubbles uses Android's bubbles on Android 11 and newer, and the Android bubble settings link under the mode buttons takes you to the switch Android needs. Restart Messenger after changing modes.
With Hide read receipts on, a chat you open stays unread on your phone, because Messenger marks a chat read and sends Seen in one step. Mark as read and replying still mark it read and show Seen. If you'd rather have chats marked read without anyone seeing Seen, leave the switch off and turn off Show read receipts in Messenger's Settings > Privacy & safety > Read receipts.
| Field | Value |
|---|---|
| Package | com.facebook.orca |
| Version | 583.0.0.29.95 |
| Version codes | 346611351, 346611369, 346611423, 346611438, 346611439, 346611440 |
| Architecture | arm64-v8a |
| Minimum Android version | Android 9 (API 28) |
| APKMirror downloads | All variants of 583.0.0.29.95. Every arm64 one works. |
All five arm64 builds APKMirror lists for 583.0.0.29.95 work, and so does build 346611440, which isn't on APKMirror. The patch checks the version code before it changes anything and stops on a build that isn't listed. Older Messenger versions aren't supported by current bundles. v0.23.0 still takes 582.0.0.61.92.
SHA-256 of the stock APKs the checks ran against:
346611351 675856b8762abf8e4a7f1bc41228e2baa5464e276cd1fef7ac5ce822c7fbfba5
346611369 8f22f198e7e5fc69b6e0fd416b25e43924c9cdb9a25585fd84080c41f2b0656d
346611423 4986bcb22182d0d17d6814a0aaa30a3333d462d9ce61f000064e125d20a8c796
346611438 fda7b7e9818aca3183d4c27097be8d350aeeb8f5efe0f8e07e1a8eca7ac75fd3
346611439 6150df6d26e0beb6653dc69b4ae9ccde63e713eccd23e6a2a055cc3728019771
346611440 cbb1b91799aba7a39afbd34f3daf3d325d1c715c8f41110cb95c44c45c7283bd
On Windows, compare your file with Get-FileHash -Algorithm SHA256 .\messenger.apk. Meta sometimes publishes different APKs under one version name.
The v0.24.0 release ships SHA256SUMS.txt beside the bundle. Compare its .mpp hash with your download.
2b56f21cf47449b3b773a1da5f790279a77f8580f508536c749c54729081628c patches-0.24.0.mpp
SHA256SUMS.txt.sig is an SSH signature made with the project's release key. Its fingerprint is SHA256:Z+UfHy7IUbtgNRO/wHkIr68+u4I+SIKPY9avfx/VAPU and its public half is in scripts/release_signers. Morphe doesn't check this signature, so checking it is up to you. Download the three files from the same tag and run this in a terminal (OpenSSH 8.1 or newer, which Windows 10 and later include; in PowerShell wrap it in cmd /c "..."):
ssh-keygen -Y verify -f release_signers -I SysAdminDoc -n hushmessenger-release -s SHA256SUMS.txt.sig < SHA256SUMS.txt
An untouched file prints Good "hushmessenger-release" signature for SysAdminDoc. The private key lives only on my PC and never on GitHub, so a good signature still means something if the GitHub account is ever taken over. If the key ever changes, the changelog will say so and why.
Before you install a patched APK, scripts/check_install.py can compare its signer with what's on the phone and catch a version downgrade without changing anything. It needs Python 3.11 or newer, JDK 21, Android Build Tools and an authorized ADB connection. Exit 0 means the certificate, downgrade and native-library checks passed.
python scripts/check_install.py --apk .\messenger-signed.apk --stock-apk .\messenger-stock.apk --serial YOUR_PHONE_SERIAL --build-tools "$env:LOCALAPPDATA\Android\Sdk\build-tools\36.1.0" --java "$env:JAVA_HOME\bin\java.exe"You need JDK 21, Android SDK 36 and GitHub Packages credentials for the Morphe Gradle plugin. Set ANDROID_HOME to your SDK directory.
$env:GITHUB_ACTOR = gh api user --jq .login
$env:GITHUB_TOKEN = gh auth token
.\gradlew.bat :patches:clean :extensions:messenger:clean :patches:test :patches:check :extensions:messenger:testDebugUnitTest :extensions:messenger:lintRelease :patches:buildAndroid --no-daemon
python -m unittest discover -s scripts/tests -vThe bundle lands in patches/build/libs/, and clean builds from the same source give the same checksum. :patches:check wants the exact stock APK of every supported build in a folder named by HUSH_NATIVE_FIXTURES, each file called messenger-583-<version code>.apk. :patches:test runs without them and skips the tests that replay on those APKs.
To exercise Messenger itself, use ARM64 Android or an emulator image with ARM translation. Messenger 583/346611369 was checked on the Android 12L Google APIs x86_64 image with libndk_translation.so. Keep separate emulator data directories for Meta-signed stock and re-signed builds. Android users and work profiles share the installed APK and its signing key.
For a low-RAM check, verify ActivityManager.isLowRamDevice() inside the app. A userdebug image can apply debug.force_low_ram temporarily after a framework restart. Reducing the emulator's RAM alone doesn't establish that classification. Restore the property and verify the original result afterward.
Where things live:
patches/src/main/kotlin/app/hushmessenger/patches/holds the Morphe patches.MessengerTarget.ktnames the supported builds,controls/holds the switches and their hook discovery, andcoexist/andmisc/hold the package-level patches.extensions/messenger/is the Java code that runs inside Messenger: the settings screen (SettingsActivity.java), its text and translations, and the helpers behind each switch.scripts/profiles/has one recorded hook profile per stock APK, written byscripts/CompatReport.javafrom a real patch run. A test fails when a profile and the patch code disagree, so don't edit them by hand.patches-list.jsonis the generated patch catalog (:patches:generatePatchCatalog).patches-bundle.jsonis the Morphe source index and only changes at release time.scripts/release/release.ps1runs a release in five stages:prepare,preflight,build,publishandindex.
To add a control, find its hook in the stock APK with :patches:inspectDex -PapkPath=<apk> -Ptarget=<query> (queries like class:LX/Foo;, method:LX/Foo;->A01, callers:, strings:<text>, reads:, writes: and impl:). Define it under controls/ so discovery validates every site before the first edit, add the row in SettingsActivity.java with its text in SettingsText.java and SettingsTranslations.java, mirror the hook in CompatReport.java, and add tests for the expected shape and for a missing or ambiguous one.
Translations are welcome. A language is one Java table of text pairs registered with one line in SettingsTranslations.java, and SettingsTranslationTest fails the build when a text is missing or a placeholder changed.
HushMessenger starts from the Morphe patches template. Messenger hook definitions come from De-Vanced, including its ReVanced contributions, and Doom's patches, which also supplied the clone install's backup fix. The typed ad filter follows Messenger Cleaner, with its MIT notice retained. The bubble eligibility anchor came from ChatHeadEnabler, and the emoji drawer anchor from ReVanced patches merge request !6833. The analytics upload services follow MessengerEx, with its MIT notice retained. The idea of keeping a message log from the notification follows Messenger-Z, with its own code written here. The permission approach is adapted from Hushfacebook's shared-permission patch. The research snapshot compares Messenger patches across other projects, and Hushfeed is another Hush patch project.
Source is under GPL-3.0, and NOTICE has the details. HushMessenger is independent of Meta and Morphe.


