No description
Find a file
Garfie c627940a31 Upgrade to Kotlin 2.3.20, CMP 1.11, AGP 9.1, Gradle 9.4
- Kotlin 2.1.20 → 2.3.20, KSP → 2.3.6
- Compose Multiplatform 1.8.0 → 1.11.0-beta01
- AGP 8.7.3 → 9.1.0, Gradle 8.11.1 → 9.4.1
- Koin 4.1.0 → 4.2.0, Ktor 3.0.3 → 3.4.2
- kotlinx-serialization 1.7.3 → 1.10.0
- kotlinx-datetime 0.6.1 → 0.7.1 (Instant → kotlin.time)
- Room 2.7.1 → 2.8.4, sqlite-bundled 2.5.0 → 2.6.2
- Lifecycle 2.8.7 → 2.9.0, Navigation 2.8.5 → 2.9.2
- SKIE 0.10.10 → 0.10.11, Coil 3.1.0 → 3.3.0
- Kermit 2.0.4 → 2.1.0, DataStore 1.1.1 → 1.2.1
- Paging 3.3.5 → 3.4.2, Media3 1.2.0 → 1.10.0
- Markdown renderer 0.27.0 → 0.39.2
- compileSdk 35 → 36, Compose BOM → 2025.05.00
2026-04-02 19:54:58 -05:00
.claude/skills/sync-upstream Add sync-upstream skill and upstream submodule 2026-03-26 16:50:18 -05:00
.github KMP iOS migration 2026-04-02 19:54:58 -05:00
app KMP iOS migration 2026-04-02 19:54:58 -05:00
build-logic KMP iOS migration 2026-04-02 19:54:58 -05:00
config/detekt Add linting and static code analysis 2026-03-28 12:49:37 -05:00
core KMP iOS migration 2026-04-02 19:54:58 -05:00
feature Upgrade to Kotlin 2.3.20, CMP 1.11, AGP 9.1, Gradle 9.4 2026-04-02 19:54:58 -05:00
gradle Upgrade to Kotlin 2.3.20, CMP 1.11, AGP 9.1, Gradle 9.4 2026-04-02 19:54:58 -05:00
iosApp KMP iOS migration 2026-04-02 19:54:58 -05:00
shared KMP iOS migration 2026-04-02 19:54:58 -05:00
upstream@0736ff2668 Add sync-upstream skill and upstream submodule 2026-03-26 16:50:18 -05:00
.gitignore Initial release 2026-03-09 22:00:00 -05:00
.gitmodules Add sync-upstream skill and upstream submodule 2026-03-26 16:50:18 -05:00
build.gradle.kts KMP iOS migration 2026-04-02 19:54:58 -05:00
CLAUDE.md KMP iOS migration 2026-04-02 19:54:58 -05:00
compose-stability.conf KMP iOS migration 2026-04-02 19:54:58 -05:00
CONTRIBUTING.md KMP iOS migration 2026-04-02 19:54:58 -05:00
DISCOVERY.md KMP iOS migration 2026-04-02 19:54:58 -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 Initial release 2026-03-09 22:00:00 -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 KMP iOS migration 2026-04-02 19:54:58 -05:00
settings.gradle.kts KMP iOS migration 2026-04-02 19:54:58 -05:00
UPSTREAM_VERSION Add sync-upstream skill and upstream submodule 2026-03-26 16:50:18 -05:00

LibreChat Android

Native Android client for LibreChat. 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

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 Android 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 Latest stable
Xcode 15+ (iOS only)
Gradle 8.11.1 (via wrapper)
Kotlin 2.1.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 the shared KMP framework and open in Xcode:

./gradlew :shared:linkDebugFrameworkIosSimulatorArm64
open iosApp/iosApp.xcodeproj

Run on an iOS simulator from Xcode. The shared framework must be rebuilt whenever shared code changes.

Tech Stack

  • Kotlin Multiplatform (KMP) with shared business logic
  • Jetpack Compose (Android) + SwiftUI (iOS)
  • Koin (dependency injection)
  • Ktor Client with OkHttp engine
  • Kotlinx Serialization
  • Room (cache), DataStore (preferences), EncryptedSharedPreferences (tokens)
  • Kotlin 2.1.20, compileSdk 35, minSdk 26

Contributing

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

License

This project is licensed under the MIT License.