Skip to content

About

Morphe patches for Facebook Messenger on arm64. Privacy switches and fewer promotions. See the README for supported builds and setup.

Topics

Resources

Stars

114 stars

Watchers

1 watching

Forks

Repository files navigation

HushMessenger. Keep the conversation. Cut the friction.

Version 0.23.0 Development version 0.23.3 License GPL-3.0 Platform Android 9 or newer, arm64 Messenger 582.0.0.61.92

Buy me a coffee on Ko-fi

If HushMessenger makes Messenger better for you, a coffee helps me keep testing patches and maintaining them as Messenger changes.

HushMessenger

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 50 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.

Install

  1. Get the APK. HushMessenger patches arm64 Messenger 582.0.0.61.92 only. Download one from APKMirror's 582.0.0.61.92 page and check its version code against the supported builds. A 32-bit build shares the version name and won't work.
  2. 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 50 patches. If it shows an older version, tap its refresh button.
  3. 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.
  4. 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.23.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.

Settings

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 current development settings, with grouped controls and matching dark and light themes.

Controls tab in the dark theme, with search and category filters Controls tab in the light theme, with search and category filters

What each switch does

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.
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.
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. Messages and calls keep working.
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.
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 shared videos with xHE-AAC sound Converts a shared video's xHE-AAC sound track to regular AAC so Messenger can send it.
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.
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.

Patches without a switch

  • 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.hush and 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.

Help

If something doesn't work

  • 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 .mpp added by hand.
  • APK rejected. Use an unmodified arm64 Messenger 582.0.0.61.92 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.

Alerts from only some chats

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.

Chat heads and bubbles

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.

Read receipts

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.

Supported Messenger builds

Field Value
Package com.facebook.orca
Version 582.0.0.61.92
Version codes 346415686, 346415687, 346415690, 346415706, 346415707, 346415720, 346415721, 346415723, 346415759, 346415772, 346415773, 346415774, 346415776, 346415777
Architecture arm64-v8a
Minimum Android version Android 9 (API 28)
APKMirror downloads All variants of 582.0.0.61.92. Every arm64 one works.

All 14 arm64 builds APKMirror lists for 582.0.0.61.92 work, the two nodpi ones included. 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.22.0 still takes 580.0.0.49.91 and 581.0.0.49.91.

SHA-256 of the stock APKs the checks ran against:

346415686  c6cc83fed103e21955dbd9d82f3cd81d446d9dc3691e3dd5b46907e89637db9b
346415687  b2f2332bcdf35d80aa5e724a0904e73f0029ae4949a61c3634d85f17e5755eb2
346415690  4fe90ce8281c40dc7d0ad12cb3e67e59de7da398a1197c35470ee3142c3bcaa6
346415706  94fdee0b4118b804e42fe1d247e8dd795b11d8bd5e06691ce97d9ddde0b0f3de
346415707  c57c66797eec9117aa59c6d7697c120aeac21ccd192d15751c1c3cacc3989acc
346415720  f47bfd50f7a59ede674abcc9e75fbaa711c0e1e9764d91b7a036629790882f36
346415721  b3ea31977577a12bc6127cdecf2056fadd41ee207bb80b88043c505bad49cec3
346415723  e9736a30696be044d233b22707766acaa0aee91c0e803298583544731aefd9c6
346415759  67f2f7181154e53cc9152dbf6c5b861f3899ab7293531b2b223aecae32708f12
346415772  a21d2fbe86e85763a1bc4781dae4e3ccf0784d5c20c0f58c7a3dc1dd9147f3aa
346415773  3b7280166145e6bebac137206a3ac32c55b84a7ec88c268c31dd6429058edb25
346415774  9977825e8b7b63ac504fb332fff6d14600e4da737ba10e1e68eb631f45cd1e01
346415776  6fcf2ad5a0c531bbde200cddc3956291a63d76d737bd404eaba15860ac65dd6f
346415777  8346c8a0b6b65a20e9d30007e84c9fb840e64819026fa43850399bd12a9f967d

On Windows, compare your file with Get-FileHash -Algorithm SHA256 .\messenger.apk. Meta sometimes publishes different APKs under one version name.

Verify a download

The v0.23.0 release ships SHA256SUMS.txt beside the bundle. Compare its .mpp hash with your download.

67ebd5e8a749bcf9c16632c996ff6b288b5bd7206ba6be6894e9b0c725d82595  patches-0.23.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"

Build from source

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 -v

The 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-582-<version code>.apk. :patches:test runs without them and skips the three replay tests.

Where things live:

  • patches/src/main/kotlin/app/hushmessenger/patches/ holds the Morphe patches. MessengerTarget.kt names the supported builds, controls/ holds the switches and their hook discovery, and coexist/ and misc/ 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 by scripts/CompatReport.java from a real patch run. A test fails when a profile and the patch code disagree, so don't edit them by hand.
  • patches-list.json is the generated patch catalog (:patches:generatePatchCatalog). patches-bundle.json is the Morphe source index and only changes at release time.
  • scripts/release/release.ps1 runs a release in five stages: prepare, preflight, build, publish and index.

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.

Credits

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.

About

Morphe patches for Facebook Messenger on arm64. Privacy switches and fewer promotions. See the README for supported builds and setup.

Topics

Resources

Stars

114 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages