Messenger on your Mac, for people who deactivated Facebook but still use Messenger.
Disclaimer: Emussenger is an independent, unofficial project. It is not affiliated with, endorsed by, or sponsored by Meta Platforms, Inc. "Messenger" and "Facebook" are trademarks of Meta Platforms, Inc. Emussenger does not include, modify or redistribute Meta's software. You install the Messenger app yourself.
Meta shut down the Messenger desktop apps in late 2025 and messenger.com in April 2026. On the web, Messenger now lives at facebook.com/messages, which requires an active Facebook account. People who deactivated Facebook but kept Messenger can only use the mobile app.
Emussenger runs the real Android Messenger app inside a private, hidden Android device on your Mac and shows it in a normal Mac window. You never see Android itself, only Messenger.
- macOS on Apple Silicon. Intel Macs are supported in code but untested.
- About 6 GB of free disk space. The one-time Android download is about 1.8 GB.
- About 3–4 GB of free RAM while it runs.
- The Messenger Android app file, which you download yourself (see below).
Get the latest .dmg from the Releases page:
- Apple Silicon (M1 and newer):
Emussenger-<version>-arm64.dmg - Intel (untested):
Emussenger-<version>-x64.dmg
Open the DMG and drag Emussenger to Applications.
Emussenger isn't notarized by Apple yet (that needs a paid Apple Developer account), so macOS blocks it the first time. To open it:
- Open Emussenger once and dismiss the warning.
- Go to System Settings → Privacy & Security, scroll down, and click Open Anyway next to the Emussenger message.
If macOS says the app "is damaged", run this once in Terminal, then open it again:
xattr -dr com.apple.quarantine /Applications/Emussenger.app- Open Emussenger. On first launch it asks you to accept Google's Android SDK license, then downloads Android from Google. This happens once and resumes if interrupted.
- When Android is ready, Google Play opens on Messenger's page. Sign in with a Google account and install Messenger. Emussenger switches to it automatically once it's installed.
- Log in to Messenger. Done.
Closing the window keeps Messenger running in the background, so new messages still arrive as macOS notifications with a Dock badge. Quit with ⌘Q.
| Shortcut | Action |
|---|---|
| ⌘C / ⌘V / ⌘X / ⌘A / ⌘Z | Copy, paste, cut, select all, undo (inside Messenger) |
| ⌘[ or right-click | Back |
| ⌘1 | Reopen Messenger |
| ⌘← / ⌘→, ⌥← / ⌥→, ⌥⌫ | Line and word navigation, delete word |
- Android setup: on first launch the app downloads the Android emulator, platform-tools and
an Android 14 Google Play system image directly from Google's SDK repository into
~/Library/Application Support/Emussenger/. Java, Homebrew and Android Studio are not needed. It uses its own adb server port, so it doesn't conflict with Android Studio. - Virtual device: a headless emulator renders with the Mac's GPU. Preinstalled Google apps that Messenger doesn't need are disabled to save memory. Google Play services stays enabled for push notifications.
- Display: Android's screen is resized to match the window (1 Android dp per window point), so Messenger re-lays itself out like a desktop app. Its portrait lock is overridden so it fills any window shape. Android's status and navigation bars are cropped out, and Messenger is relaunched automatically if Android's home screen ever comes to the front.
- Streaming and input: the screen is streamed as H.264 with the scrcpy server (v5.0.1) and decoded with WebCodecs. Mouse, trackpad, keyboard, IME input (e.g. Bangla) and the clipboard are sent back to Android.
- Notifications: Messenger's Android notifications are read via
dumpsys notificationand shown as macOS notifications, with an unread count on the Dock icon. - Background: with the window closed, the stream stops but Android keeps running. ⌘Q shuts Android down.
- Memory: Android always cold-boots (about 10 seconds) instead of restoring a snapshot, which would load all of its RAM up front.
- Everything runs locally. Emussenger has no servers, analytics or telemetry. Your messages travel only between Messenger and Meta, as they would on a phone.
- All Android data, including your Messenger login, is stored in
~/Library/Application Support/Emussenger/. Deleting that folder resets everything. - While Emussenger is running, the emulator's control ports (adb and the emulator console)
listen on
localhostonly. They can't be reached from the network, but other software running on your Mac could connect to them and access the Android device, including Messenger's data. Only run Emussenger on a Mac you trust.
- Your own video is sideways in video calls. The emulator's camera driver reports a phone-style camera, so Messenger rotates the Mac camera's picture a quarter turn. Voice and incoming video work normally.
- Only one camera. Switching cameras in a video call doesn't work.
- Meta may flag or checkpoint logins from an emulator. Use at your own risk.
- Memory: Emussenger uses about 2.5–3.5 GB of RAM while running, most of it for Android.
- Not notarized by Apple yet, so macOS asks you to confirm the first launch (see Download).
- Notification mirroring and Intel Macs haven't been fully tested yet.
- Resizing the window briefly blanks the screen while Android re-lays out.
npm install # also fetches the scrcpy server and brands the dev Electron app
npm start # run in development
npm run dist # build a .dmg with electron-builder
npm run icons # re-render build/icon.svg to icon.png and icon.icns| Path | Purpose |
|---|---|
src/main/sdk.js |
Downloads and installs the Android SDK pieces from Google |
src/main/avd.js |
Writes the virtual device configuration |
src/main/emulator.js |
Emulator lifecycle, adb helpers, Messenger install, app trimming |
src/main/scrcpy.js |
scrcpy v5 client: video stream and input control messages |
src/main/notifications.js |
Mirrors Messenger notifications to macOS |
src/main/main.js |
App flow, window, display fitting, IPC |
src/renderer/ |
Setup screens, WebCodecs video decoding, input handling |
scripts/ |
scrcpy-server fetch, icon rendering, dev branding |
- Emussenger's source code is released under the MIT License.
- scrcpy by Genymobile and Romain Vimont is licensed under the Apache License 2.0. Its server binary is downloaded at build time and bundled into packaged builds, which must include its license and notice.
- The Android emulator and system images are downloaded directly from Google by each user, under Google's Android SDK license terms, which the user accepts in the app. Emussenger does not redistribute them.
The first version lets you chat, call and get notifications naturally. Things I'd like to improve:
- Upright video in calls. The likely fix is a built-in macOS virtual camera that rotates the picture before Android sees it. That needs an Apple Developer account to sign it.
- Signing and notarization, so macOS opens Emussenger without the "Open Anyway" step.
- Less memory. Usage is down from about 5 GB to 2.5–3.5 GB. Going much lower would need a lighter Android setup, but anything without Google Play would mean installing Messenger from third-party APKs and losing automatic updates, which I don't want for an app this sensitive.