Skip to content

Mobile app

chatwire has a native iOS and Android app built with React Native and Expo. It connects directly to your chatwire server — no cloud relay, no account required.

Download

  • Android APK — grab the latest .apk from GitHub Releases and side-load it (enable "Install from unknown sources" in Android Settings → Security)
  • iOS — TestFlight link coming soon. Build from source in the meantime (see below)

Connect the app to your server

  1. Open the app. On first launch you'll see the Server Setup screen.
  2. Enter your chatwire server URL:
  3. LAN: http://192.168.1.x:8723 (replace with your Mac's IP)
  4. Tailscale: http://your-mac-hostname.tailnet:8723
  5. Use http://https:// requires a reverse proxy with a valid cert
  6. Enter your web UI password if you set one in Settings
  7. Tap Connect

The app runs /healthz and saves the URL on success. To change the server URL later: Settings tab → Disconnect → re-enter on next launch.

Finding your Mac's IP

# On the Mac running chatwire:
ipconfig getifaddr en0    # Wi-Fi
ipconfig getifaddr en1    # Ethernet

Or check System Settings → Network for the IP address.

Features

Conversation list

  • All conversations from chat.db
  • Pull-to-refresh for the latest messages
  • Unread badge on conversations with new messages
  • Live updates via SSE stream

Message list

  • Inverted scroll (newest at bottom)
  • Load-older pagination — scroll to the top to fetch earlier messages
  • Sender names in group chats
  • iMessage and SMS bubble differentiation

Compose

  • Multiline text input
  • Haptic feedback on send
  • Camera and gallery picker (image upload coming in a future release)

Media viewing

  • Images — full-screen pinch-to-zoom via expo-image
  • Videos — inline thumbnail; tap to play via expo-video

Push notifications

Register your Expo push token with the server to get push notifications when messages arrive. Requires chatwire server 1.7.0+ (not yet released — watch the changelog).

Dark / light theme

The app follows the server's active theme setting. Default palette is Dracula. Toggle dark/light from the app's Settings tab.

PWA alternative

If you don't want to install the native app, the chatwire web UI is a Progressive Web App:

iOS / Safari: 1. Open http://<your-mac-ip>:8723 in Safari 2. Tap the Share button → "Add to Home Screen" 3. Tap Add

Android / Chrome: 1. Open the URL in Chrome 2. Three-dot menu → "Add to Home screen"

The PWA gives you a near-native experience without the native app. For most users on a LAN or Tailscale, the PWA is good enough.

Build from source

Requirements: Node 22, Expo CLI

git clone https://github.com/allenbina/chatwire.git
cd chatwire/packages/mobile

# Install dependencies
npm install

# Start the Expo dev server
npx expo start

# iOS simulator (macOS only)
npx expo start --ios

# Android emulator or device
npx expo start --android

Repo layout

packages/
  shared/           @chatwire/shared — TypeScript types + ChaiwireClient
  mobile/
    App.tsx          Root: NavigationContainer + AppStateProvider
    app.json         Expo config (name, icons, bundle IDs)
    eas.json         EAS Build profiles
    src/
      navigation/    RootNavigator, MainTabNavigator (bottom tabs)
      screens/       ConversationListScreen, MessageListScreen,
                     ServerConfigScreen, SettingsScreen
      components/    ComposeBox, MessageBubble, ImageViewer, VideoPlayer
      hooks/         useServerEvents (SSE), usePushNotifications
      state/         AppStateContext (ChaiwireClient, serverUrl)
      theme/         colors.ts (Dracula tokens)
    src/__tests__/   Jest smoke tests

For production builds, see the release process guide.

Troubleshooting

"Cannot connect to server": - Verify the Mac's IP address hasn't changed (use a Tailscale hostname or local DNS for stability) - Check that the chatwire web agent is running: curl <mac-ip>:8723/healthz from your phone's browser - Ensure the Mac and phone are on the same Wi-Fi network (or both on Tailscale)

App shows old messages: - Pull-to-refresh in the conversation list - Check that the bridge agent is running: chatwire doctor

Push notifications not arriving: - Push notification support requires server 1.7.0+, which is not yet released - Use ntfy as an alternative: see Notifications