Berty is a full-stack, privacy-focused, peer-to-peer messaging application. The system consists of a Go backend implementing the Wesh protocol (based on IPFS, libp2p, and OrbitDB) that provides core messaging, push notifications, authentication, replication, and directory services. The backend is exposed via gRPC and consumed by multiple clients: a React Native mobile app (with both a legacy JS variant and a newer Expo-based variant), a Go CLI with a terminal UI (mini) and a desktop GUI (Fyne), and native bridges for iOS and Android. The architecture is modular, with separate packages for error handling, authentication, push relay, and bot framework. Key entry points include the `berty daemon` CLI command, the mobile app entry points (`App.tsx` in both `js/packages` and `berty-bridge-expo/mobile`), and the bridge framework (`go/framework/bertybridge`). Data flows involve gRPC streams from the Go backend to the mobile clients, with event-driven state management and local encrypted storage via SQLCipher. External dependencies include libp2p, OrbitDB, gRPC, protobuf, and various platform-specific native modules for BLE, mDNS, and push notifications. The repository also contains auxiliary tools for infrastructure testing, rendezvous servers, and debugging (Tyber).
Sushitrain is a native iOS and macOS file synchronization client that embeds the Syncthing P2P sync engine via a Go core exposed through gomobile bindings. The application provides selective synchronization (per-file pick via .stignore), on-demand file streaming, media preview, photo backup from the device camera roll, encrypted folders, and full Apple platform integration including Shortcuts, Handoff, Quick Actions, and background tasks. The architecture separates a SwiftUI frontend from a Go backend that manages Syncthing instance lifecycle, folder/device configuration, block-level downloading (MiniPuller), and local HTTP streaming servers. The codebase demonstrates solid engineering with clean module boundaries, reusable patterns like a pluggable custom filesystem for Syncthing, archive abstraction for ZIP/ISO browsing, and an event-driven UI update mechanism. However, there are signs of technical drift: heavy reliance on a forked Syncthing version with a pre-release pseudo-version, use of older Go libraries, and some duplicated or fragile code paths in the Swift layer (e.g., migration logic, iOS 26 API workarounds). Overall, it is a well-crafted application that fulfills its purpose effectively, though some internal coupling to Syncthing internals limits reusability of the Go components without adaptation.