# Apps and platforms

Nymchat ships as a web app and as native Android and iOS apps. They are separate codebases that speak the same protocol, so the network is one network — but a handful of features depend on what the platform will let an app do.

## Three builds, one network

| Build | Written in | Where it comes from |
| --- | --- | --- |
| Web app (PWA) | Plain HTML, CSS and JavaScript modules — no build step required to run it | Served from [web.nymchat.app](https://web.nymchat.app), or run the repository's `index.html` yourself |
| Android | Flutter, native UI throughout | Google Play and [Zapstore](https://zapstore.dev/apps/com.nym.bar) |
| iOS | The same Flutter app | [TestFlight](https://testflight.apple.com/join/k8FS8Mm3) |

The mobile apps are not a browser in a box. They are a full native implementation of the same client — their own Nostr stack, their own relay pool, their own storage — laid out to match the web app screen for screen, down to the settings groups being in the same order.

All three are open source under the AGPL-3.0, in [one repository](https://github.com/Spl0itable/NYM): the web app at the root, the mobile app under `android-ios-app/`.

## Installing the web app

Open [web.nymchat.app](https://web.nymchat.app). That is already the whole app — installing only gives it a home-screen icon, its own window and offline caching through a service worker.

![Nymchat running on a phone-sized screen, with the channel list collapsed and the conversation filling the width.](https://nymchat.app/images/docs/channel-view-phone.webp)

*The same app on a phone: one conversation at a time, the channel list a swipe away.*

- **Chrome, Edge, Brave, Opera (desktop)** — an install icon appears in the address bar.
- **Android** — the browser offers "Add to Home screen"; the menu has it too.
- **iOS Safari** — Share, then "Add to Home Screen". Safari will not offer this from any other browser on iOS.

## Installing on Android

Two routes, the same app:

- **Google Play** — search for Nymchat, or install `com.nym.bar` directly.
- **Zapstore** — a Nostr-native app store that distributes signed APKs without a Google account.

Android grants the app what it needs as it needs it. Bluetooth permissions are asked for the first time you start the mesh, notification permission the first time something wants to notify you, and location only if you turn on proximity sorting for geohash channels.

## Installing on iOS

The iOS build is distributed through **TestFlight**. Install Apple's TestFlight app, then open the [Nymchat invitation link](https://testflight.apple.com/join/k8FS8Mm3).

> **Note**
>
> iOS gives a background app far less rope than Android. Nymchat has no push provider — there is no server holding your messages to push from — so on iOS it catches up using the system's background-refresh window, which iOS schedules when it feels like it. Notifications can therefore arrive late while the app is suspended. On Android the same setting runs a foreground service and the relay connection simply stays open.

## What runs where

Everything not listed here works the same everywhere: channels, messages, private messages, group chats, calls, zaps, the shop, Nymbot, themes and every setting.

| Feature | Web app | Android | iOS |
| --- | --- | --- | --- |
| [Bluetooth mesh](https://nymchat.app/docs/mesh/) | Chromium browsers only, and as a leaf — a browser cannot advertise itself | Full peer: advertises and scans at once | Full peer: advertises and scans at once |
| Staying connected in the background | Only while a tab is open | Optional foreground service keeps the relay socket open | Best-effort catch-up in the system's background-refresh window |
| Unlocking an encrypted identity | Password, PIN, passkey or biometric (WebAuthn PRF) | Password, PIN or device biometric | Password, PIN or Face ID / Touch ID |
| Sharing into Nymchat from other apps | — | System share sheet | Share extension |
| Mobile swipe gestures on messages | On a narrow window | Yes | Yes |
| Proximity sorting for geohash channels | Browser location permission | System location permission | System location permission |

> **Tip**
>
> Settings follow a Nostr login between devices, so installing the app after using the web version does not mean setting everything up again — see [Syncing settings between devices](https://nymchat.app/docs/settings/#sync). Identity encryption is the deliberate exception: it is per-device, because the unlock factor is.
