> ## Documentation Index
> Fetch the complete documentation index at: https://docs.stateset.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Console Mobile

> The React Native (Expo) console — streaming chat, offline queueing, approvals, biometric lock, and voice settings.

# Console Mobile

A React Native mobile console built with Expo Router, covering the same operations surface as
the web console: streaming console chat, integrations, autonomous sessions, and settings.

## Stack

| Layer      | Choice                                                      |
| ---------- | ----------------------------------------------------------- |
| Navigation | Expo Router v6 — native stack plus tabs                     |
| Platform   | Expo SDK 54, React 19, TypeScript                           |
| Lists      | FlashList for message and data lists                        |
| Animation  | Reanimated 4 (UI thread), Gesture Handler                   |
| State      | Zustand for console messages and SSE streaming              |
| Data       | TanStack Query v5                                           |
| Storage    | Expo SecureStore for tokens, SQLite for offline persistence |

## Tabs

`console`, `integrations`, `autonomous`, and `settings`.

## Streaming console

Messages stream over SSE into a Zustand store, with header actions for starting a new chat and
stopping a stream in progress.

Behavior that matters on mobile specifically:

* **Streaming pauses automatically when the app moves to background.**
* A **stream idle timeout** retries and re-queues rather than hanging.
* Grouped messages, time separators for long gaps and day changes, and an unread counter on
  the "Latest" button while scrolled away.
* **Per-message retry** on failed user messages.
* Markdown rendering with tool-call cards, and a detail modal for long tool payloads.
* Long-press a bubble to share it; one-tap copy of the last assistant response.

## Offline and network handling

* **SQLite-backed offline persistence** for console, integrations, and autonomous data.
* An **offline send queue** with retry and clear actions, auto-retrying while the app is
  active.
* Network-aware queueing wired into React Query's online manager.
* React Query cache hydration, pull-to-refresh, and a focus manager that refetches on app
  resume.

## Approvals

Human-in-the-loop approvals carry through to mobile: **push notifications and deep links** for
approval requests, plus an approval history modal with pending counts.

## Security

* **SecureStore-backed auth** with cookie headers.
* **Biometric and PIN lock** with an inactivity timeout, lockout after failed attempts, and a
  trusted-device toggle.
* A **sign-in guardrail** that refuses a misconfigured production API base rather than silently
  pointing at the wrong environment.

## Voice

A voice API settings section supports key entry and a **connection test**, so a bad key surfaces
at configuration time rather than mid-call. Voice statistics and latency appear in the analytics
tab.

For the voice platform itself, see the StateSet Voice documentation.

## Accessibility and haptics

Accessibility state, hints, and touch-slop targets are set across interactive controls, with a
deep i18n parity test in CI. Haptic feedback fires on consequential flows — sign-out, account
deletion, and retry actions.

Locales: **English and Spanish** in the mobile app. (The web console additionally carries
French and Italian.)

## Diagnostics and support

A diagnostics panel exposes API and config visibility with copyable output, a release-readiness
status, and diagnostics sharing for support handoff. A "report issue" action pre-fills
diagnostics. Settings also carries support and account-deletion shortcuts, and an About & Legal
screen with policy and support links.

## Builds

EAS build profiles with native bundle identifiers are configured for both platforms.

## Related

* [Console Overview](/stateset-console/stateset-console-overview)
* [Agent Pipeline](/stateset-console/stateset-console-agent-pipeline)
* [Auth Flow](/stateset-console/stateset-console-auth-flow)
