# Blip

iMessage in the Omarchy bar.

Read, send, groups, blue dots. Your Mac is the gateway, Linux is the client. An Omarchy bar widget under the MIT license.

- Source: https://github.com/nixfred/blip
- Site: https://blip.technology/
- Back to nixfred.com: https://nixfred.com/

## Install

**You need a Mac. That is the whole trick.** Blip does not reimplement iMessage. Apple's protocol only runs on Apple hardware, so Blip uses a Mac you already own as the gateway: any Mac signed into your Apple ID, awake and reachable over SSH. The Linux side is a thin client. No Mac, no Blip. When the Mac sleeps, Blip dims and waits.

Two commands, copied from the project README. The first installs the plugin and adds the bar widget. The second runs the setup wizard for the bridge to your Mac.

```sh
omarchy plugin add https://github.com/nixfred/blip.git --enable --yes
~/.config/omarchy/plugins/nixfred.blip/scripts/blip-setup you@your-mac
```

Requirements:

- A Mac on macOS 13 Ventura or newer, signed into Messages with your Apple ID, reachable from the Linux box over SSH with key auth. Tailscale is recommended.
- Messages in iCloud turned on, so the Mac mirrors your phone.
- Xcode Command Line Tools on the Mac (xcode-select --install).
- Linux: Omarchy (Hyprland plus the Omarchy shell), with bun, jq, openssh, libnotify, wl-clipboard and xdg-utils. The wizard checks for each and prints the pacman line for what is missing.

Optional: ffmpeg and mpv for voice messages. zenity for the Save vCard folder picker.

The wizard pauses for two permission grants on the Mac: Full Disk Access for /usr/libexec/sshd-keygen-wrapper, and Automation for Messages on the first send. The Mac needs a screen, or Screen Sharing, once. Budget ten minutes.

Run the install from a terminal inside your Omarchy session. Nothing sends a message until you press Enter in a conversation.

After setup, the Mac must stay in a logged-in desktop session with Messages able to run, and it must not sleep. A sleeping Mac is an unreachable gateway: the widget dims and says so.

## What it looks like

![The Blip app window with demo data on an Omarchy desktop, next to the line: iMessage. On Linux. For real.](https://blip.technology/assets/blip-showcase.7eb32d349a.webp)

Demo data. This is the project's own promo graphic, drawn with invented people and example.com addresses.

![The Blip bar popout drawn with demo data: pinned conversation tiles above a list of threads, with blue dots on the ones that are unread, next to a code editor and a terminal](https://blip.technology/assets/blip-bar-popout.46ad883299.webp)

**The bar popout.** Pinned conversations as tiles, then your threads, with blue dots on the unread ones. The bar icon shows the count.

![The Blip app window drawn with demo data: a group conversation called Trail Crew with a photo, two tapbacks, a blue reply and a Read receipt](https://blip.technology/assets/blip-group-chat.9de88d192f.webp)

**Groups, photos and tapbacks.** A group thread with an inline photo, tapbacks, your reply in blue and the Read receipt underneath.

![Two Blip desktop toasts drawn with demo data in the corner of a tiled Omarchy desktop, one from a person and one from a group](https://blip.technology/assets/blip-toast.63d1f0040d.webp)

**Toasts from the people you choose.** A toast fires only for senders on your allowlist. Click one and the panel opens on that conversation.

![A link card in a Blip conversation drawn with demo data, with a share sheet open on it: open in browser, copy link, a QR code and send to a device](https://blip.technology/assets/blip-share-sheet.b4320c6d7e.webp)

**Links and the share sheet.** A shared link shows as a card. Click it for a share sheet: open, copy, a QR code, or send it to another device.

Demo data. The four scenes are illustrations of the interface in the same style as the graphic above, drawn with invented people, example.com addresses and phone numbers in the 555-0100 range reserved for fiction. None of it is anyone's conversation.

## Features

### Unread count in the bar

The bar widget shows the unread count across every thread. It dims with a slashed glyph when the Mac is unreachable. Left-click opens the panel, double-click opens the app window, middle-click refreshes, right-click marks all read.

### Blue dots, groups, pins

A blue dot stays until you open that conversation, the way iMessage does it. Groups are titled the way Messages titles them. Pinned conversations are mirrored from Messages on the Mac, in the same order, as avatar tiles above the list.

### Read and send

Real bubbles, yours blue on the right and theirs grey on the left. Send to people and to groups. Photos render inline, files send by Ctrl+V, drag and drop or /attach, and the "Read" receipt shows under your last read message. Tapbacks, inline replies and link cards show too.

### A Messages-style window

A window with a sidebar of every conversation, the open thread and a compose box, next to the bar popout. Open it with SUPER+M after adding the keybind from the README, or double-click the bar icon. It remembers its size across shell restarts.

### Desktop toasts, on your terms

Desktop notifications fire only for senders on your allowlist. Everything else still counts and still shows, it just does not interrupt you. Click a toast and the panel opens on that conversation with the compose box focused.

### Real time, nothing in the clear

A push watcher on the Mac pings when chat.db changes, so messages land in about 2 seconds. There is no server, no telemetry and no accounts. Everything between the two machines travels inside SSH on a dedicated key, and message text never lands on disk.

What it cannot do: work without a Mac, or while the Mac sleeps. Blip displays edits and threaded replies but does not send them.

## What people say

Public posts on X from people using Blip. The words are theirs, unedited. Where a post is longer, only the quoted part is shown and the link opens the whole post.

> Huge fan of Blip! Literally iMessage in @omarchy (does require a Mac on the network)
>
> 1280 MHz, [@1280MHz on X](https://x.com/1280MHz/status/2108931929143734655)

> This Omarchy plugin is bar far my most used and favorite
>
> Ding, [@ding444 on X](https://x.com/ding444/status/2108730723704471953)

> This has been super helpful to me. I can get 2FA codes without opening my phone, quickly check a text, etc. Thank you!
>
> John, [@John4ZX4 on X](https://x.com/John4ZX4/status/2108951309806444900)

> …@NixFred for making Blip. Such a clutch tool on my Omarchy machine.
>
> Joel Gaff, Jr., [@joelga on X](https://x.com/joelga/status/2111856582145265887)

> Bought a 2018 MacBook Pro with a broken screen just so it could run Blip or BlueBubbles for my Omarchy installs
>
> Spencer, [@spencer450 on X](https://x.com/spencer450/status/2111612463594733744)

> …there's a great project by @NixFred called blip that does proxying of iMessage to a client in Omarchy. Pair that with tailscale, and you're golden!
>
> Jason Alexander, [@jasona on X](https://x.com/jasona/status/2110532674754695487)

> …finding blip was one of those click moments for me over the past few months, where it really sunk in that we can just fix everything. No one is holding us back, we’re not even holding ourselves back anymore.
>
> Michael C Hurley, [@MichaelH_rley on X](https://x.com/MichaelH_rley/status/2109721208220745892)

> Blip is awesome! Thank you so much.
>
> Sour Ortanique, [@SourOrtanique on X](https://x.com/SourOrtanique/status/2109098639763403094)

## Contributors

Blip is built in the open. Everyone below has a merged pull request or commits in the repository, and each line says what they did, with links to the pull requests. This list is rebuilt from GitHub whenever the site is built.

30 people: Fred Nix, who wrote Blip and maintains it, and 29 contributors.

- **Fred Nix** ([@nixfred](https://github.com/nixfred)): Wrote Blip and maintains it, reviewing and merging every contribution below. His own pull requests include [#141](https://github.com/nixfred/blip/pull/141), seven fixes from a whole project review, and [#142](https://github.com/nixfred/blip/pull/142), which lets Mark all read work while Blip says ALL CAUGHT UP.
- **Erik Fillipsveen** ([@Fileri](https://github.com/Fileri)): The largest contributor by merged PRs. Made Blip usable from the keyboard with a bubble cursor and paging ([#37](https://github.com/nixfred/blip/pull/37), [#39](https://github.com/nixfred/blip/pull/39), [#56](https://github.com/nixfred/blip/pull/56)), a draft kept per conversation ([#41](https://github.com/nixfred/blip/pull/41)), and tapbacks from the message menu ([#116](https://github.com/nixfred/blip/pull/116), [#117](https://github.com/nixfred/blip/pull/117)), and fixed how unsent messages, app cards and stickers show up ([#32](https://github.com/nixfred/blip/pull/32), [#34](https://github.com/nixfred/blip/pull/34), [#68](https://github.com/nixfred/blip/pull/68)).
- **Ian Swope** ([@ianswope](https://github.com/ianswope), [X @ianfs](https://x.com/ianfs)): Tightened toasts and read state: no toast for the open conversation ([#76](https://github.com/nixfred/blip/pull/76)), no duplicates on extra monitors ([#85](https://github.com/nixfred/blip/pull/85)), none for a message already read elsewhere ([#95](https://github.com/nixfred/blip/pull/95)), and clicking one opens its conversation ([#136](https://github.com/nixfred/blip/pull/136)). Also made the panel open faster ([#88](https://github.com/nixfred/blip/pull/88), [#98](https://github.com/nixfred/blip/pull/98)), kept security codes out of the environment ([#73](https://github.com/nixfred/blip/pull/73)) and fixed tapbacks on a macOS 27 gateway ([#138](https://github.com/nixfred/blip/pull/138)).
- **Jon Kinney** ([@jondkinney](https://github.com/jondkinney), [X @jondkinney](https://x.com/jondkinney)): Built the read only contact review, with a duplicate scan, full source card details and vCard export ([#24](https://github.com/nixfred/blip/pull/24), [#59](https://github.com/nixfred/blip/pull/59), [#60](https://github.com/nixfred/blip/pull/60), [#61](https://github.com/nixfred/blip/pull/61)). Also kept failed sends visible with a reason ([#50](https://github.com/nixfred/blip/pull/50)), added Ctrl+1 to 9 pinned shortcuts ([#53](https://github.com/nixfred/blip/pull/53)) and Retina scale media ([#23](https://github.com/nixfred/blip/pull/23)).
- **Danny Cecil** ([@jefehoser](https://github.com/jefehoser), [X @jefehoser](https://x.com/jefehoser)): Polished the app window and composer. Long text wraps and copied files attach ([#28](https://github.com/nixfred/blip/pull/28)), group photos are found and retried ([#29](https://github.com/nixfred/blip/pull/29)), the app comes back on its last workspace without stealing focus ([#48](https://github.com/nixfred/blip/pull/48), [#87](https://github.com/nixfred/blip/pull/87)), and Super+M no longer closes unrelated windows ([#93](https://github.com/nixfred/blip/pull/93)).
- **Zach Wilke** ([@zachwilke](https://github.com/zachwilke), [X @zachwilke_1](https://x.com/zachwilke_1)): Worked on speed and attachments: instant sends and resolved duplicate Contacts cards ([#43](https://github.com/nixfred/blip/pull/43)), a startup toll removed ([#83](https://github.com/nixfred/blip/pull/83)), animated GIFs that stay animated ([#81](https://github.com/nixfred/blip/pull/81)) and messages that carry several files ([#82](https://github.com/nixfred/blip/pull/82)). Also moved timestamps across the bridge as UTC ([#80](https://github.com/nixfred/blip/pull/80)).
- **Damon Janis** ([@damonjanis](https://github.com/damonjanis), [X @damonjanis](https://x.com/damonjanis)): Made read state reliable by syncing it through a durable, verified queue ([#120](https://github.com/nixfred/blip/pull/120)), with fixes for the unread badge ([#101](https://github.com/nixfred/blip/pull/101)) and for acknowledging read pushes only after they finish ([#102](https://github.com/nixfred/blip/pull/102)). Added Mark as Unread and Mark as Read ([#121](https://github.com/nixfred/blip/pull/121)) and Pin and Hide Alerts ([#122](https://github.com/nixfred/blip/pull/122)) to the conversation menu.
- **Adam Gamble** ([@adamgamble](https://github.com/adamgamble), [X @adamgamble](https://x.com/adamgamble)): Fixed early rendering and contact bugs: iPhone photos honour EXIF orientation ([#9](https://github.com/nixfred/blip/pull/9)), bubble corners are square ([#10](https://github.com/nixfred/blip/pull/10)), Family Sharing contact stores are ignored ([#19](https://github.com/nixfred/blip/pull/19)) and pinned conversations survive shallow polls ([#22](https://github.com/nixfred/blip/pull/22)). Also added the security code toast, with click to copy and a hotkey to type it ([#35](https://github.com/nixfred/blip/pull/35)).
- **Johan Thorén** ([@johanthoren](https://github.com/johanthoren), [X @jmythoren](https://x.com/jmythoren)): Shaped the first app window: it fills its window like other Omarchy windows ([#7](https://github.com/nixfred/blip/pull/7)), has live search and Super+M keys ([#12](https://github.com/nixfred/blip/pull/12)) and jumps to a thread with 1 to 9 ([#13](https://github.com/nixfred/blip/pull/13)).
- **joshhattan** ([@joshhattan](https://github.com/joshhattan)): Fixed window placement so manual moves stick and the popout opens on the clicked screen ([#109](https://github.com/nixfred/blip/pull/109)), and made security code autofill type the code when Gecko ignores set_text_contents ([#110](https://github.com/nixfred/blip/pull/110)).
- **Brad Larson** ([@followbl](https://github.com/followbl), [X @followbl](https://x.com/followbl)): Kept Hyprland stable around displays that are off: no leader without a real screen ([#113](https://github.com/nixfred/blip/pull/113)) and no floating window move when a workspace has no monitor ([#128](https://github.com/nixfred/blip/pull/128)).
- **Guido Jouret** ([@gjouret](https://github.com/gjouret), [X @gjouret](https://x.com/gjouret)): Fixed scrolling. Wheel and touchpad scroll now apply the delta 1 to 1 ([#114](https://github.com/nixfred/blip/pull/114)), and mouse wheel notches glide through a smoothScroll setting ([#115](https://github.com/nixfred/blip/pull/115)).
- **Brenden Bishop** ([@bbishdotdev](https://github.com/bbishdotdev), [X @bbishdotdev](https://x.com/bbishdotdev)): Added security code offers beside the focused field ([#92](https://github.com/nixfred/blip/pull/92)).
- **Baden** ([@badenpiland](https://github.com/badenpiland), [X @badenpiland](https://x.com/badenpiland)): Added prefer_imessage=on in bridge.conf, which keeps mixed one to one chats on iMessage ([#96](https://github.com/nixfred/blip/pull/96)).
- **Kb2uka** ([@Kb2uka](https://github.com/Kb2uka), [X @StudioXRadio](https://x.com/StudioXRadio)): Added saving new contacts through the Mac bridge ([#91](https://github.com/nixfred/blip/pull/91)).
- **Mark B** ([@Fail-Safe](https://github.com/Fail-Safe)): Added allowlist notification controls to the conversation menus ([#148](https://github.com/nixfred/blip/pull/148)), so toasts can be switched on or off per conversation without editing the file.
- **Joshua Warren** ([@joshuaswarren](https://github.com/joshuaswarren), [X @joshuaswarren](https://x.com/joshuaswarren)): Added hiding of Spam and unknown sender chats through bridge.conf ([#49](https://github.com/nixfred/blip/pull/49)).
- **John Zetterman** ([@jzetterman](https://github.com/jzetterman), [X @jzetterman](https://x.com/jzetterman)): Made Blip survive the host's ssh agent and the bar's PATH ([#140](https://github.com/nixfred/blip/pull/140)).
- **Brandon Smith** ([@bndnsmth](https://github.com/bndnsmth), [X @bndnsmth](https://x.com/bndnsmth)): Kept the active conversation selected in the sidebar ([#134](https://github.com/nixfred/blip/pull/134)).
- **Barry Jones** ([@brightball](https://github.com/brightball), [X @brightball](https://x.com/brightball)): Fixed a unified SMS chat row turning an iMessage DM green ([#147](https://github.com/nixfred/blip/pull/147)).
- **Chad Stovern** ([@chadhs](https://github.com/chadhs), [X @chadstovern](https://x.com/chadstovern)): Fixed blip-setup mangling bridge.conf values that contain 2, 7 or x ([#124](https://github.com/nixfred/blip/pull/124)).
- **cw228** ([@cw228](https://github.com/cw228)): Added bin_dir= in bridge.conf so the Linux shims can live outside ~/bin ([#100](https://github.com/nixfred/blip/pull/100)).
- **David Reinecke** ([@dreinecke](https://github.com/dreinecke)): Routed per conversation spawns through a source id seam ([#105](https://github.com/nixfred/blip/pull/105)). Also filed the report that contact photos never showed.
- **Espen Zachrisen** ([@ezachrisen](https://github.com/ezachrisen), [X @ezachrisen](https://x.com/ezachrisen)): Mirrored pinned conversations in Blip ([#11](https://github.com/nixfred/blip/pull/11)).
- **Greyforge Labs** ([@GreyforgeLabs](https://github.com/GreyforgeLabs), [X @GreyforgeLabs](https://x.com/GreyforgeLabs)): Fixed search so sender aware self echoes are preserved ([#126](https://github.com/nixfred/blip/pull/126)).
- **Jared Moody** ([@jaredmoody](https://github.com/jaredmoody), [X @jaredmoody](https://x.com/jaredmoody)): Made blip-setup read SSH_CONNECTION in a fish safe way ([#145](https://github.com/nixfred/blip/pull/145)).
- **Tobi Lehman** ([@tlehman](https://github.com/tlehman), [X @tlehmanifold](https://x.com/tlehmanifold)): Added a mute list that hides spam conversations entirely ([#27](https://github.com/nixfred/blip/pull/27)).
- **Unhook Dev** ([@tolewis](https://github.com/tolewis)): Fixed a bridge bug by keeping one chat row per group, so sends stop failing with error 1728 ([#8](https://github.com/nixfred/blip/pull/8)).
- **Jethro Jones** ([@jethrojones](https://github.com/jethrojones), [X @jethrojones](https://x.com/jethrojones)): Made blip-check probe every Contacts source, not just the first ([#2](https://github.com/nixfred/blip/pull/2)).
- **David Benedic** ([@daveyb](https://github.com/daveyb)): Landed two commits from a closed Windows tray PR ([#131](https://github.com/nixfred/blip/pull/131)): imsg-send now waits 150 seconds for the Messages Automation prompt (b440a49), and a test requires that wait (1b55b40).

Also thanks to the people whose issues changed the code: [jacobaross](https://github.com/jacobaross) (a report on the Messages Automation prompt timing out, with the evidence attached), [Zain Nayer](https://github.com/znayer) (a DM labelled with a raw phone number), [Benny](https://github.com/apexbenny) (a compose box that clipped after five lines), [edmooredop](https://github.com/edmooredop) (security code toasts for alphanumeric senders (#143)).

Pull requests and commits are from GitHub, October 28, 2026. Bots are left out.

## On GitHub

176 stars, 44 forks, 30 contributors. MIT license.

Star and fork counts are from GitHub, October 28, 2026. Contributors are the people listed above.

## Part of nixfred.com

Blip is one of Fred Nix's projects. See the rest at https://nixfred.com/

---

nixfred.com: https://nixfred.com/
Fred Nix, Atlanta, GA, frednix@gmail.com
