zulu README

The project's README from github.com/slop-place/zulu. As one markdown file: README.md.

Zulu

A native Zulip client for iOS and macOS.

Zulu exists because the official clients make topics hard to live in. Here topics are first-class: a channel that uses them renders as a list of threads, a channel that doesn't renders as plain chat, and the app works out which is which. Channels group into folders you make, topics can be promoted to sit beside channels, and anything can be renamed or hidden for yourself alone — none of which the Zulip server ever learns about.

Minimum iOS 27, built on Liquid Glass. The Mac app is a real Mac app — sidebar and split view, menu bar and shortcuts, ⌘K to jump anywhere, a composer that sends on Return, notifications for mentions and direct messages while it is running.

Status

Early but usable. Sign in against any Zulip server; read and send in channels, topics and DMs; react and reply; attach files, photos and camera captures; vote in polls. A Go notification service lives in service/ and builds to a container, but is not deployed.

See .scratch/zulu-client/map.md for the decisions already locked and what is still open.

Layout

Path What
App The iOS app, and the Xcode project that builds both apps
Mac The macOS app
Shared SwiftUI shared by both apps: the model, messages, composer pieces
Packages/ZuluKit ZulipAPI, ZuluStore (GRDB), ZuluSync, ZuluMarkup, ZuluEmoji, ZuluCompose, ZuluPolls
service The Go notification service
prototypes/ Throwaway prototypes that answer one design question each
.scratch/zulu-client/ The wayfinder map, its decision tickets, and research notes

Running it

cd App && xcodegen generate && open Zulu.xcodeproj

Pick the Zulu scheme for iOS or ZuluMac for the Mac. Then sign in with your Zulip organization's address. Password and SSO both work; SSO opens a browser and comes back through the zulip:// callback the server hardcodes.

release-please cuts releases for the app (to TestFlight) and the notification service (to GHCR) separately. See docs/RELEASING.md for how that works and the one-time Apple setup it needs.

The nav-shell prototype still runs on its own:

prototypes/nav-shell/run.sh

zulu (slop-place/zulu)

Searching Database…

888 ·GitHub
What is this?Zulu is a native Zulip client for iOS and macOS that treats topics as first-class citizens, grouping channels into folders and letting threads be promoted or hidden locally.
Is this a separate app for iPhone and Mac, or one shared codebase?It is one Xcode project with shared SwiftUI code (model, messages, composer) that builds two distinct native apps: one for iOS and a separate Mac app with its own sidebar, split view and menu bar.
How do I run it?Open the Xcode project, pick the Zulu scheme for iOS or ZuluMac for the Mac, build and run, then sign in with your Zulip organization's server address.
Do I need anything besides a Zulip account to sign in?You just need the address of any Zulip server; both password login and SSO are supported, with SSO bouncing through a browser and back via a zulip:// callback.
Is this a finished, polished app?It is explicitly 'early but usable' — core messaging, reactions, replies, attachments and polls work, but it requires iOS 27 minimum and the bundled Go notification service exists in the repo but isn't actually deployed yet.
Does it work on older iPhones or just the newest ones?It requires at least iOS 27 and is built on Apple's Liquid Glass design system, so older devices stuck on earlier iOS versions won't run it.
Can I rename or hide channels without the Zulip server knowing?Yes, renaming or hiding channels and topics for yourself is purely local — the server is never told about these personal customizations.
What makes topic handling different from the official Zulip clients?Zulu renders a channel as a list of threads if it uses topics, or as plain chat if it does not, and figures out which automatically; topics can also be promoted to sit beside channels like their own channel.
Where does the notification backend live, and does it run in production?A Go notification service lives in the service/ directory and builds to a container image published to GHCR, but per the README it is not currently deployed.
What local data storage does the app use?The ZuluKit package includes ZuluStore built on GRDB, Apple's SQLite wrapper, for local data persistence alongside the API client, sync engine, markup and emoji handling.
How are releases shipped?release-please cuts separate releases for the app, which goes to TestFlight, and for the notification service, which goes to GHCR, with the one-time Apple setup documented in docs/RELEASING.md.
Creator
slop-place
Size
2.4 MB
Stars
888
Age
25d
Commits · 90 Days