Cursor Agent e0c1308278 Match Connection settings screen to Account list style
Use Category with ListItem rows, plain leading icons, and trailing
chevrons instead of expressive hub chips on the detail screen.

Co-authored-by: denis0001-dev <denis0001.dev@ya.ru>
e0c1308278 · 2026-11-12 15:12:57 +00:00
288 Commits
2026-11-01 20:18:56 +03:00
2026-11-05 17:58:01 +03:00
2026-10-31 01:34:15 +03:00
2026-10-31 01:34:15 +03:00
2026-11-01 20:18:56 +03:00
2026-10-31 01:34:15 +03:00
2026-10-31 01:34:15 +03:00
2026-10-31 01:34:15 +03:00
2026-02-26 15:45:01 +03:00
2026-11-01 20:18:56 +03:00
2026-11-01 20:18:56 +03:00
2026-11-01 20:18:56 +03:00

Read in other languages: Русский

FromChat

FromChat is a 100% free and open-source messenger. This repository is the cross-platform client (Android, Desktop via Compose Multiplatform, and iOS).

Agents: AGENTS.md and .agents/skills/ (ship via release skill, /release); humans: AI policy.

📥 Download • 💬 Telegram Channel • 🖥️ Server

✨ Features

  • Voice and video calls — LiveKit
  • Screen sharing during calls (Android)
  • Public chat — server-wide community
  • Direct messages — legal encryption scheme; server-side E2EE planned
  • Device management — active sessions
  • Dark mode by default
  • Open source

📊 Client Comparison

Feature Android Desktop Web iOS
Messaging and profiles ✅ ✅ ✅ ✅
Voice/video calls ✅ ✅ ✅ ✅
Screen sharing ✅ ❌ ✅ ❌
Push when backgrounded ✅ (FCM) ✅ (persistent WS + tray) ✅ ❌ (WS while open)
Message reactions ❌ ❌ ✅ ❌
Rich attachment support ✅ ✅ ❌ ✅

Desktop replaces the former Electron client in the Web repo. Run with ./gradlew :app:desktop:run.

Desktop packaging

Build release packages on the matching OS (or via CI):

Task Host Artifacts
./gradlew :app:desktop:packageReleaseMac macOS FromChat-<ver>-macOS.dmg
./gradlew :app:desktop:packageReleaseLinux Linux .deb, .rpm, .AppImage (needs appimagetool)
./gradlew :app:desktop:packageReleaseWindows Windows FromChat-Setup-<ver>.exe, FromChat-Portable-<ver>.exe (Rust toolchain required)
./gradlew :app:desktop:packageReleaseDesktop current OS delegates to the task above

Outputs land under app/desktop/build/distributions/release/.

CI: .github/workflows/release.yml runs on workflow_dispatch only (required version input; the v* tag does not need to exist beforehand — the publish step creates it), then uploads assets to a GitHub Release.

Windows portable: the installer unpacks a full app folder (jpackage layout). Run FromChat.exe only — portable mode is set in FromChat.cfg (-Dfromchat.portable=true). Data in fromchat-data/ or fromchat-data-beta/; separate from AppData. No self-extract on launch.

Installed data: Windows %LOCALAPPDATA%\FromChat, macOS ~/Library/Application Support/FromChat, Linux ~/.local/share/FromChat (migrates from legacy ~/.fromchat/cache when present).


🏗️ Tech Stack

  • Kotlin
  • Compose Multiplatform
  • Material Design 3
  • Ktor Client
  • LiveKit — calls
  • SQLDelight — local storage
  • Firebase Messaging — push
  • Coil — images

📥 Build and Development (Android Studio)

Requirements

  • Latest Android Studio
  • JDK from Android Studio (JetBrains Runtime)

Quick start

  1. Clone the repository:

    git clone https://github.com/fromchat-messenger/android.git
    cd android
    
  2. Generate keys (Debug & Release):

    DEBUG_STORE_PASS=CHANGEME
    DEBUG_KEY_PASS=CHANGEME
    RELEASE_STORE_PASS=CHANGEME
    RELEASE_KEY_PASS=CHANGEME
    
    mkdir -p app/android/keys
    
    # Quote passwords: characters like & * ? ! break unquoted shell args.
    keytool -genkey -v -keystore app/android/keys/debug.jks \
      -keyalg RSA -keysize 2048 -validity 10000 \
      -alias key0 -storepass "$DEBUG_STORE_PASS" -keypass "$DEBUG_KEY_PASS" \
      -dname "CN=Debug, O=FromChat, C=RU"
    
    keytool -genkey -v -keystore app/android/keys/release.jks \
      -keyalg RSA -keysize 2048 -validity 10000 \
      -alias key0 -storepass "$RELEASE_STORE_PASS" -keypass "$RELEASE_KEY_PASS" \
      -dname "CN=Release, O=FromChat, C=RU"
    
    # Path must be app/android/keys/keystore.properties (matches build.gradle.kts).
    # Outer "…" / '…' around values are optional; Gradle strips them.
    cat > app/android/keys/keystore.properties << EOF
    

releaseStorePassword=$RELEASE_STORE_PASS releaseKeyPassword=$RELEASE_KEY_PASS debugStorePassword=$DEBUG_STORE_PASS debugKeyPassword=$DEBUG_KEY_PASS EOF


3. **Open in Android Studio:** `File → Open` → repo root. Gradle syncs dependencies automatically.

4. **Run:** `Run → Run 'Android'` (or the app debug configuration).  
Debug application id: `ru.fromchat.beta`.

### CLI build

```bash
export JAVA_HOME="/Applications/Android Studio.app/Contents/jbr/Contents/Home"
./gradlew :app:shared:compileAndroidMain :app:android:assembleDebug

APK: app/android/build/outputs/apk/debug/android-debug.apk.

Project structure

android/
├── app/
│   ├── android/          # Android app module
│   └── shared/           # Compose Multiplatform
│       ├── commonMain/
│       ├── androidMain/
│       └── iosMain/      # not ready yet
│           └── …/ru/fromchat/utils/  # shared helpers (settings, crypto, UI)
└── gradle/libs.versions.toml

Code style: CODE_STYLE.md.


🤝 Contribute

Pull requests are welcome. For large changes, follow CODE_STYLE.md.

📄 License

GNU Affero General Public License v3.0 — see LICENSE.

S
Description
No description provided
Readme AGPL-3.0 52 MiB
Languages
Kotlin 90.3%
Rust 6.9%
Shell 0.6%
Python 0.5%
Objective-C 0.5%
Other 1.2%