denis0001-dev 9702eb8d3f Release 1.3.0: bump version and release notes
Set default versionName to 1.3.0 with versionCode 130000. Update
RELEASE_NOTES.md for incognito mode, server encryption modes, and UI polish.

Co-authored-by: Cursor <cursoragent@cursor.com>
Signed-off-by: denis0001-dev <denis0001.dev@ya.ru>
9702eb8d3f · 2026-11-10 23:40:15 +03:00
284 Commits
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-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

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%