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 — нативный клиент Zulip для iOS и macOS, в котором топики являются объектами первого класса: каналы группируются в папки, а треды можно локально закреплять или скрывать.
Это отдельные приложения для iPhone и Mac или одна общая кодовая база?Это один проект Xcode с общим кодом SwiftUI (модель, сообщения, композер), из которого собираются два разных нативных приложения: одно для iOS и отдельное приложение для Mac со своей боковой панелью, разделённым видом и строкой меню.
Как его запустить?Откройте проект Xcode, выберите схему Zulu для iOS или ZuluMac для Mac, соберите и запустите, затем войдите, указав адрес сервера вашей организации Zulip.
Нужно ли что-то ещё, кроме учётной записи Zulip, для входа?Нужен только адрес любого сервера Zulip; поддерживаются и вход по паролю, и SSO, причём при SSO происходит переход через браузер и обратно по callback zulip://.
Это законченное, отполированное приложение?Оно прямо описывается как «раннее, но рабочее» — основной обмен сообщениями, реакции, ответы, вложения и опросы работают, но требуется минимум iOS 27, а входящий в комплект Go-сервис уведомлений есть в репозитории, хотя реально ещё не развёрнут.
Работает ли оно на старых iPhone или только на новейших?Требуется как минимум iOS 27, и оно построено на дизайн-системе Apple Liquid Glass, поэтому на старых устройствах, застрявших на ранних версиях iOS, оно не запустится.
Можно переименовать или скрыть каналы так, чтобы сервер Zulip не узнал?Да, переименование или скрытие каналов и топиков для себя — чисто локальная настройка: сервер никогда не узнаёт об этих персональных изменениях.
Чем работа с топиками отличается от официальных клиентов Zulip?Zulu показывает канал как список тредов, если в нём используются топики, или как обычный чат, если нет, причём определяет это автоматически; топики также можно закрепить рядом с каналами, как самостоятельный канал.
Где находится бэкенд уведомлений и работает ли он в продакшене?Go-сервис уведомлений лежит в каталоге service/ и собирается в образ контейнера, публикуемый в GHCR, но, согласно README, сейчас он не развёрнут.
Какое локальное хранилище данных использует приложение?Пакет ZuluKit включает ZuluStore на основе GRDB (SQLite-обёртка от Apple) для локального хранения данных, а также API-клиент, движок синхронизации, обработку разметки и эмодзи.
Как выпускаются релизы?release-please создаёт отдельные релизы для приложения, которое попадает в TestFlight, и для сервиса уведомлений, который публикуется в GHCR; разовая настройка со стороны Apple описана в docs/RELEASING.md.
Creator
slop-place
Size
2.4 MB
Stars
888
Age
26d
Commits · 90 Days