A native macOS client for Google Chat, written in Swift with SwiftUI and AppKit.
GChat is an unofficial, independent project. It is not affiliated with or endorsed by Google. It talks to the same private web API that Google Chat's web app uses, with your own signed-in session, so it can stop working whenever Google changes that API. Use it with your own account.
Most of the code was written by an LLM, vibe-coded and then tested on real use rather than designed and reviewed line by line. Expect rough edges, and read the code before relying on it.
| Threads in a side pane, in dark mode | The conversation info panel |
|---|---|
![]() |
![]() |
- Conversations: DMs, group DMs and spaces in a sidebar with Pinned, Direct messages and Spaces sections; pin, mute, mark as unread and leave, kept in sync with Google Chat.
- Timeline: bubbles or a plain list, threads in a side pane, quote replies (with a two-stage trackpad swipe: quote, then thread), reactions with a full emoji picker, formatting, link previews, images, GIFs and files, read receipts, and system events as service lines.
- Composer: formatting, @-mentions, emoji, GIF search (GIPHY), and file attachments by picker, paste or drag and drop.
- Realtime: new messages, edits, reactions, typing indicators, presence and conversation changes arrive live.
- Notifications: native banners with inline reply, following each conversation's own Google Chat notification level (All new messages, Main conversations, For you, Don't notify) and mute.
- More: a conversation info panel with members and shared media, files and links; Quick Look and drag-out for attachments; message search; a ⌘K palette to find conversations, people and spaces; keyboard navigation (⌘1…9, ⌥↑/⌥↓).
- macOS 15 or later
- Xcode 27 with Swift 6
- XcodeGen to generate the Xcode project from
project.yml - A Google account with Google Chat
- Clone the repository.
- In
project.yml, setDEVELOPMENT_TEAMto your own Apple Developer team ID. It is the only place the team appears. - Generate the project and open it:
xcodegen generate open GChat.xcodeproj
- Build and run the
GChatscheme.
Swift Package Manager resolves the one dependency, SwiftProtobuf.
On first launch GChat shows a welcome screen. Sign in with Google opens an in-app Google sign-in window with its own website data, separate from your browsers. Once Google has signed you in to Google Chat, GChat checks the session, keeps it in your Keychain and closes the window. Passkeys aren't available in the window; choose Try another way at that step.
Your session is stored only in the macOS Keychain. Sign out from Settings › Account; that also clears the sign-in window's data.
- GIF search: add your own GIPHY API key in Settings. It is stored in the Keychain.
- Sharing a build: a build signed with an Apple Development certificate runs only on your own Macs. To give the app to other people, archive it with a Developer ID certificate and notarize it with Apple; the hardened runtime that notarization requires is already enabled.
xcodebuild test -project GChat.xcodeproj -scheme GChat -only-testing:GChatTests -destination 'platform=macOS'Unit tests use Swift Testing and run against a fake backend with network requests stubbed, so they never reach Google. UI tests (GChatUITests) launch the app with the fake backend through launch arguments such as -uiTestingLongHistory, -uiTestingManyConversations and -uiTestingFormattedThread.
| Path | Contents |
|---|---|
GChat/App |
App entry point and scenes |
GChat/Domain |
Models and the ChatBackend protocol |
GChat/Dynamite |
The Google Chat API client: requests, realtime channel, mapping, sign-in |
GChat/Store |
ChatStore, notifications, sign-in flow, diagnostics |
GChat/UI |
SwiftUI views and the AppKit timeline |
GChat/Preview |
FakeBackend, used by previews and tests |
Proto |
The protobuf schema; regenerate the Swift code with protoc --proto_path=Proto --swift_out=GChat/Dynamite/Proto Proto/dynamite.proto |
GChatTests, GChatUITests |
Unit and UI tests |
- SwiftProtobuf (Apache License 2.0), the protobuf runtime and code generator.
- XcodeGen (MIT License), which generates the Xcode project.
- purple-googlechat (GPL-3.0) and mautrix-googlechat (AGPL-3.0), open-source Google Chat clients consulted as references for request and message formats.
- Telegram for macOS, which inspired the timeline's design and swipe to reply.
- GIF search is Powered by GIPHY.
GChat is released under the MIT License; see LICENSE.



0 comments
log in to comment.