Security

Short version: your messages stay on your Mac, your passwords stay in your Keychain, and the little that goes through our relay is encrypted on your Mac first.

Last updated: 9 November 2026

Your messages stay on your Mac

Waggle has no servers that see your chats. Each bee talks straight to its own service: WhatsApp, Slack, Google, Microsoft, Telegram or your email provider. iMessage is read from the Messages app on your Mac. Waggle has no crash reporting built in, and its only usage count is the daily check-in described below.

A few things do leave your Mac. Each one is optional or carries no messages:

What never syncs: your passwords, API keys, pairing and sync codes, and your sign-ins.

What Waggle keeps on your Mac

Waggle keeps each bee's messages, pictures and settings in ~/Library/Application Support/Waggle/. The folder is private to your Mac account: other people who use the same Mac can't open it (an administrator still can). Waggle checks this every time it starts.

A few things are kept elsewhere: pictures and files you send by iMessage are copied to ~/Pictures/Waggle Sent so Messages can send them, GIFs are saved in a temporary folder, and Web bees keep their site data in WebKit's own folder for Waggle, under ~/Library/WebKit/.

Logs go in ~/Library/Logs/Waggle/. They record what each bee is doing, such as connecting and errors, never what your messages say. Chats, contacts, phone numbers and email addresses appear as short tags like chat #1a2b3c4d, not as names or numbers, and the tags change every time Waggle starts. Lines from the libraries each bee uses appear there too, with their phone numbers and addresses tagged the same way. Like Waggle's own folder, the logs folder is private to your Mac account, and each log starts again once it reaches 5 MB. Logs stay on your Mac. We only see one if you choose to email it to us.

Passwords and keys live in your Keychain

Waggle keeps your passwords, keys and sign-ins in your Mac's Keychain, not in files: email passwords, AI keys, your licence, the iMessage pairing code, the sync code, and the Gmail, Google, Outlook, Teams, Slack and Telegram sign-ins. So are the settings you'd only enter yourself: the address and token of a relay you host, the relay token an iMessage from another Mac bee uses, a Google client secret typed into Settings, and the Telegram api_id and api_hash. They aren't in iCloud Keychain and don't sync to your other Macs. Like other Keychain items, they move with your Mac if you use Migration Assistant.

If the Keychain is locked or says no, Waggle tells you (in Settings, or in the Telegram bee's setup) and waits, rather than quietly using a different relay. It tries again by itself once you unlock your Mac. It hands secrets to its connection helper privately, so they don't show up in the Mac's list of running programs.

Two kinds of sign-in aren't in the Keychain. WhatsApp's keys change with almost every message, which is too often for the Keychain, so they're in the bee's private folder. Sites you sign in to in a Web bee are kept like a browser's cookies, in WebKit's own store for Waggle. To unlink WhatsApp, right-click the bee → Sign Out, which deletes its keys.

Encryption

Settings sync and iMessage sharing are end-to-end encrypted. Your Mac turns your 12-character sync or pairing code into a key, and encrypts everything with it before sending. The code itself is never sent, so the relay can't read what it carries. Every message is also checked when it arrives, so it can't be changed on the way without your other Mac noticing. The Mac sharing iMessage refuses old or repeated requests, so recorded traffic can't be played back.

For experts: AES-256-GCM. The key and the relay room ID are each derived from the code with PBKDF2-HMAC-SHA256 (600,000 rounds, separate salts). Codes are 12 characters from a 31-character alphabet, about 59 bits. Requests between Macs carry a timestamp and a one-off ID; anything more than 5 minutes out, or seen before, is refused.

Waggle's connections are encrypted in transit (HTTPS or TLS, or the service's own encryption for Telegram). Unencrypted connections are only allowed to this Mac or your home network, and a relay that tries to redirect Waggle to a plain http:// address on the internet is refused.

The Waggle Relay

Signed and notarised by Apple

Every copy you download from waggle.software is signed with our Apple Developer ID, uses Apple's hardened runtime, and is notarised: checked by Apple for malware before release. Automatic updates use Sparkle. Each update and the update list are signed with our own private key, and Waggle installs an update only if its signature matches our key. Updates download over HTTPS.

Why isn't Waggle sandboxed? The iMessage bee needs to read your chats from the Messages app's own folder and send through Messages, which macOS doesn't allow from inside the App Store sandbox. So Waggle is sold directly instead. It still asks for only what each bee needs, only when you add that bee:

If a permission is missing, the bee says what it needs and opens the right page in System Settings. Waggle doesn't use your camera, microphone or location.

Work accounts

Outlook and Teams sign in through Microsoft's own sign-in page, so your organisation's rules and approvals apply. Most Gmail users connect with an app password; Sign in with Google is offered to some accounts, and Google Calendar normally reads your calendars through the Mac's Calendar app. Waggle never tries to get round your organisation's security settings or app approvals. If your Mac is managed and blocks apps that haven't been approved, ask your IT team.

The WhatsApp bee, and Slack's quick sign-in, aren't official connections, and neither company has approved Waggle. Waggle connects the way their own apps do. For a work Slack, use the admin-approved Slack app route. See the FAQs for more.

How we check our work

This website

Reporting a security problem

Found a vulnerability? Email hello@waggle.software, with what you found and how to reproduce it. Please give us a chance to fix it before you share it. Our security.txt has the same contact.