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
这是什么?Zulu 是 iOS 和 macOS 的原生 Zulip 客户端,把话题(topic)当作一等公民,支持将频道归入文件夹,并允许在本地提升或隐藏线程。
这是 iPhone 和 Mac 各一个独立应用,还是共享同一套代码?它是一个 Xcode 工程,共享 SwiftUI 代码(模型、消息、输入框),构建出两个不同的原生应用:一个面向 iOS,另一个是独立的 Mac 应用,拥有自己的侧边栏、分栏视图和菜单栏。
怎么运行它?打开 Xcode 工程,iOS 选择 Zulu scheme,Mac 选择 ZuluMac,构建并运行,然后用你 Zulip 组织的服务器地址登录。
除了 Zulip 账号,登录还需要什么?你只需要任意一台 Zulip 服务器的地址;密码登录和 SSO 都支持,SSO 会经由浏览器跳转,再通过 zulip:// 回调返回。
这是一个成品级的完善应用吗?它被明确定位为「早期但可用」——核心的消息收发、表情回应、回复、附件和投票都能用,但它最低要求 iOS 27,而且仓库里自带的 Go 通知服务虽然存在,实际上还没有部署。
它能在旧款 iPhone 上运行,还是只支持最新款?它至少要求 iOS 27,并基于 Apple 的 Liquid Glass 设计系统构建,因此停留在更早 iOS 版本的旧设备无法运行它。
我能在 Zulip 服务器不知情的情况下重命名或隐藏频道吗?可以,为自己重命名或隐藏频道和话题完全是本地行为——服务器永远不会被告知这些个人定制。
它的话题处理与官方 Zulip 客户端有何不同?如果频道使用话题,Zulu 就把它渲染成线程列表,不使用则渲染成普通聊天,并会自动判断属于哪种情况;话题还可以被提升到频道旁边,就像一个独立的频道一样。
通知后端放在哪里?它在生产环境中运行吗?一个 Go 通知服务位于 service/ 目录,可构建为容器镜像并发布到 GHCR,但根据 README 的说法,它目前并未部署。
这个应用使用什么本地数据存储?ZuluKit 包中包含基于 GRDB(Apple 的 SQLite 封装)构建的 ZuluStore,用于本地数据持久化,此外还有 API 客户端、同步引擎、标记格式和表情符号处理。
版本发布是怎么进行的?release-please 会分别为应用(发布到 TestFlight)和通知服务(发布到 GHCR)创建独立的 release,一次性的 Apple 端配置记录在 docs/RELEASING.md 中。
Creator
slop-place
Size
2.4 MB
Stars
888
Age
27d
Commits · 90 Days