A cross-platform messenger for Nextcloud Talk — built with React Native for iOS, Android, and desktop (Windows, Linux, macOS via Electron).
Easy Talk connects to your Nextcloud server and gives you a native chat experience: Liquid Glass on iOS 26+, Material Design 3 with dynamic colors on Android, and a desktop app with sidebar navigation and split-view chat.
- Login — Secure browser-based authentication via Nextcloud Login Flow v2
- Conversations — View all your chats with unread counts, avatars, and search
- Messaging — Send and receive messages in real time with long polling
- Replies — Reply to specific messages with quoted previews
- Media — Send and receive images, GIFs, and videos; inline previews with animated GIF support; fullscreen video player on all platforms; pick GIFs directly from the Android keyboard (Gboard etc.)
- Contacts — Search Nextcloud users and start new conversations
- Offline support — Cached conversations and messages available without network
- Theming — System, light, and dark themes; Android picks up your device's Material You colors
- Notifications — Push notification scaffolding for incoming messages
Coming soon
- Node.js 18+
- For iOS builds: macOS with Xcode 16+ (Xcode 26+ for Liquid Glass on iOS 26), CocoaPods
- For Android builds: JDK 17, Android Studio, Android SDK (API 35)
- For desktop builds: Electron and Forge makers are included as devDependencies (no extra setup)
See docs/DEPLOYMENT.md for the full setup guide.
# Install dependencies
npm install
# Generate native projects
npm run prebuild
# Run on iOS simulator
npm run ios
# Run on Android emulator
npm run androidThe app will open a dev client. Enter your Nextcloud server URL, authenticate in the browser, and start chatting.
# Android APK (direct install)
npm run build:apk
# Android AAB (Google Play)
npm run build:aab
# iOS archive (App Store / TestFlight)
npm run build:ios
# Desktop installers (Windows/macOS/Linux)
npm run electron:buildAll builds run locally — no cloud build services required. See docs/DEPLOYMENT.md for signing setup and detailed instructions.
src/
├── api/ Nextcloud Talk API client modules
├── components/ Reusable UI components
│ ├── chat/ Message bubbles, list, input
│ ├── common/ Avatar, badge, empty state
│ ├── contacts/ Contact search and list items
│ ├── conversations/ Conversation list items
│ └── platform/ iOS Liquid Glass / Android MD3 wrappers
├── config/ Constants and configuration
├── hooks/ React hooks (TanStack Query wrappers)
├── navigation/ React Navigation setup
├── screens/ App screens
├── services/ Long polling, storage, database, notifications
├── stores/ Zustand state stores
├── theme/ Theming (Material You + Liquid Glass)
└── types/ TypeScript type definitions
| Framework | Expo SDK 55 (React Native 0.83, React 19.2) |
| Language | TypeScript |
| Navigation | React Navigation |
| UI (Android) | React Native Paper (Material Design 3) |
| UI (iOS) | Liquid Glass / BlurView |
| Media | expo-image (display) + expo-image-picker (sending) + expo-video (playback) |
| State | Zustand + TanStack Query |
| Storage | Expo Secure Store + SQLite |
| Desktop | Electron + react-native-web |
| Linting | ESLint (eslint-config-expo) + Prettier |
npm start # Start dev server
npm run typecheck # TypeScript check
npm run lint # ESLint + Prettier
npm run lint:fix # Auto-fix issues
npm run format # Format with Prettier
npm run web # Run in browser (react-native-web)
npm run electron:dev # Run desktop app (Electron dev mode)TBD