No description
Find a file
Garfie c613175c6e fix(navigation): fully reset ConversationListStateHolder on logout
reset() now clears pagination cursor, hasMore, isLoadingMore and
isRefreshing state so the next user session does not inherit stuck
spinners or stale cursors from the previous session. Also cancel and
restart the search debounce collector so an in-flight debounced
emission from the previous session cannot land after reset() and
clobber the cleared grouped conversations list.
2026-04-14 21:30:30 -05:00
.claude/skills/sync-upstream chore: rename project from LibreChat Android to LibreChat Mobile 2026-04-03 16:56:36 -05:00
.github ci(android): publish signed debug APK on PRs with sticky link comment 2026-04-13 19:30:10 -05:00
app feat(favorites): move bookmarks to server-backed tags with offline cache 2026-04-13 19:40:14 -05:00
build-logic cleanup: burn down detekt baselines and rename Compose Resources package 2026-04-11 12:35:19 -05:00
config/detekt cleanup: burn down detekt baselines and rename Compose Resources package 2026-04-11 12:35:19 -05:00
core Merge pull request #40 from garfiec/fix/camera-photos-sweep 2026-04-14 19:57:21 -05:00
docs/screenshots Update README 2026-04-02 23:21:10 -05:00
feature feat(favorites): move bookmarks to server-backed tags with offline cache 2026-04-13 19:40:14 -05:00
gradle Merge pull request #30 from garfiec/dependabot/gradle/org.jetbrains.androidx.navigation3-navigation3-ui-1.1.0-rc01 2026-04-11 15:55:11 -05:00
iosApp fix(ios): stream SSE via NWConnection to bypass NSURLSession text/* buffering 2026-04-14 07:21:48 -05:00
shared fix(navigation): fully reset ConversationListStateHolder on logout 2026-04-14 21:30:30 -05:00
upstream@0736ff2668 Add sync-upstream skill and upstream submodule 2026-03-26 16:50:18 -05:00
.editorconfig feat: add detekt-koin, .editorconfig, GitHub Actions CI for android + ios 2026-04-09 23:48:41 -05:00
.gitignore ci(android): publish signed debug APK on PRs with sticky link comment 2026-04-13 19:30:10 -05:00
.gitmodules Add sync-upstream skill and upstream submodule 2026-03-26 16:50:18 -05:00
build.gradle.kts feat: add detekt-koin, .editorconfig, GitHub Actions CI for android + ios 2026-04-09 23:48:41 -05:00
CLAUDE.md fix(ios): stream SSE via NWConnection to bypass NSURLSession text/* buffering 2026-04-14 07:21:48 -05:00
compose-stability.conf chore: rename package com.librechat to com.garfiec.librechat 2026-04-03 16:12:37 -05:00
CONTRIBUTING.md chore: fix iOS setup docs, remove dead Swift files, fix Xcode release build config 2026-04-05 18:25:53 -05:00
DISCOVERY.md chore: rename project from LibreChat Android to LibreChat Mobile 2026-04-03 16:56:36 -05:00
gradle.properties KMP iOS migration 2026-04-02 19:54:58 -05:00
gradlew KMP iOS migration 2026-04-02 19:54:58 -05:00
gradlew.bat KMP iOS migration 2026-04-02 19:54:58 -05:00
KNOWN_ISSUES.md cleanup: burn down detekt baselines and rename Compose Resources package 2026-04-11 12:35:19 -05:00
LICENSE Initial release 2026-03-09 22:00:00 -05:00
lint.xml Add linting and static code analysis 2026-03-28 12:49:37 -05:00
README.md chore: fix iOS setup docs, remove dead Swift files, fix Xcode release build config 2026-04-05 18:25:53 -05:00
settings.gradle.kts chore: rename project from LibreChat Android to LibreChat Mobile 2026-04-03 16:56:36 -05:00
UPSTREAM_VERSION chore: rename project from LibreChat Android to LibreChat Mobile 2026-04-03 16:56:36 -05:00

LibreChat Mobile

LibreChat

A third-party native mobile client for LibreChat (Android & iOS). Not affiliated with the official LibreChat project — this is an independent app that connects to any self-hosted LibreChat server, no backend modifications required.

Features

  • Chat — Real-time streaming (SSE), message branching & sibling navigation, stop/regenerate/continue, markdown with syntax highlighting, LaTeX math rendering, code blocks with copy, image display, file attachments, tool call progress cards
  • Model Selection — Searchable bottom sheet grouped by endpoint, model comparison mode
  • Agents — Marketplace with search and categories, MCP server configuration
  • Conversations — Paginated list with date grouping, tags, search, rename, archive, delete, share, fork, duplicate, export/import
  • Presets & Prompts — Save/load chat presets, prompts library with @mention insertion
  • Authentication — Login, registration, forgot password, two-factor (TOTP + backup codes), OAuth (Google, GitHub, Discord, Facebook, Apple, OpenID)
  • Files — Upload, list, delete, inline image rendering with pinch-to-zoom
  • Voice — Speech-to-text input, text-to-speech playback (device and server engines)
  • Settings — Theme (system/light/dark), account management, data controls
  • Tablet — Adaptive dual-pane layout (600dp+) with persistent sidebar
  • Accessibility — Semantic headings, content descriptions, 48dp touch targets, live regions

Screenshots

Feature Phone Tablet / Foldable
Server Connect — Point the app at any self-hosted LibreChat server
Home Screen — Clean welcome screen with voice input and quick access
Conversations Sidebar — Swipe to open your chat history with search, tags, and date grouping
Predictive Back — Native Android back gesture with peek animation
Mermaid Diagrams — Interactive flowcharts and diagrams rendered in-chat
LaTeX Math — Beautifully typeset equations and formulas
Code Blocks — Syntax-highlighted code with language badge and copy button
Tables — Clean, scrollable data tables
Extended Thinking — See the model's reasoning process
Image Generation — AI-generated images via agents
Chat Options — Attach files, switch models, toggle tools, and tune parameters
Model Selection — Searchable bottom sheet with models grouped by provider
Model Parameters — Fine-tune temperature, top-p, tokens, and custom instructions
Photo Upload — Attach images from your gallery or camera
Settings — Theme, language, layout, and personalization options

Server Setup

The app works with any standard LibreChat server. During onboarding, you'll enter your server URL (e.g., https://chat.example.com or http://192.168.1.100:3080).

Required Configuration

Add the following to your LibreChat server's .env file:

# Safety net for native app clients.
# The app sends a browser User-Agent to pass the uaParser middleware,
# but if it ever fails to parse, this prevents ban point accumulation.
NON_BROWSER_VIOLATION_SCORE=0

Without this setting, the server's violation system may accumulate ban points against the mobile client if the User-Agent check fails, eventually locking the account out.

Notes

  • Registration — The app respects your server's registration settings. If registration is disabled server-side, only the login form is shown.

Requirements

Tool Version
JDK 17+
Android Studio or IntelliJ IDEA Latest stable (recommended IDE for all code editing)
Xcode 15+ (iOS only, Apple Silicon Mac required — IDE not needed, CLI only)
iOS Deployment Target 16.0+
Gradle 9.4.1 (via wrapper)
Kotlin 2.3.20

Building from Source

Android

./gradlew assembleDebug

The debug APK will be at app/build/outputs/apk/debug/app-debug.apk.

For a release build:

./gradlew assembleRelease

iOS

Build and run on the iOS Simulator:

xcodebuild -project iosApp/iosApp.xcodeproj -scheme iosApp \
  -sdk iphonesimulator \
  -destination 'platform=iOS Simulator,name=iPhone 16' \
  -derivedDataPath iosApp/build build

See CONTRIBUTING.md for full simulator install and launch commands.

Tech Stack

  • Kotlin Multiplatform (KMP) with shared business logic
  • Jetpack Compose (Android) + Compose Multiplatform (iOS)
  • Koin (dependency injection)
  • Ktor Client (OkHttp on Android, Darwin on iOS)
  • Kotlinx Serialization
  • Room (cache), DataStore (preferences), EncryptedSharedPreferences / Keychain (tokens)
  • Kotlin 2.3.20, compileSdk 36, minSdk 26

Contributing

See CONTRIBUTING.md for development setup, code style, and PR guidelines.

License

This project is licensed under the MIT License.