# iiEasy **iiEasy** — мобильный клиент для Open-WebUI на базе [Conduit](https://github.com/cogwheel0/conduit). Нативная работа с вашей self-hosted AI инфраструктурой.
iiEasy

iiEasy Demo

iiEasy is a cross-platform mobile application for Open-WebUI (based on the open-source Conduit project), providing a native mobile experience for interacting with your self-hosted AI infrastructure. ## Table of Contents - [Features](#features) - [Screenshots](#screenshots) - [Requirements](#requirements) - [Quickstart](#quickstart) - [Installation](#installation) - [Building for Release](#building-for-release) - [Configuration](#configuration) - [Localization (i18n)](#localization-i18n) - [Compatibility](#compatibility) - [Docs](#docs) - [Architecture](#architecture) - [Troubleshooting](#troubleshooting) - [Security & Privacy](#security--privacy) - [Contributing](#contributing) - [License](#license) - [Support](#support) ## Quickstart ```bash git clone https://github.com/cogwheel0/conduit && cd conduit flutter pub get dart run build_runner build --delete-conflicting-outputs flutter run -d ios # or: -d android ``` ## Features ### Core Features - **Real-time Chat**: Stream responses from AI models in real-time - **Model Selection**: Choose from available models on your server - **Conversation Management**: Create, search, and manage chat histories - **Markdown Rendering**: Full markdown support with syntax highlighting - **Theme Support**: Light, Dark, and System themes ### Advanced Features - **Voice Input**: Use speech-to-text for hands-free interaction - **File Uploads**: Support for images and documents (RAG) - **Multi-modal Support**: Work with vision models - **Secure Storage**: Credentials stored securely using platform keychains - **Folder Management**: Organize conversations into folders; create, rename, move, and delete - **Tools (Function Calling)**: Invoke server-side tools exposed by Open‑WebUI, with result rendering ### Authentication iiEasy supports multiple authentication flows when connecting to your Open‑WebUI (same as Conduit): - **Username + Password**: Sign in directly against servers that expose a login endpoint. Credentials are stored securely using platform keychains. - **SSO / OAuth** (iOS & Android): Authenticate via your server's configured OAuth providers (Google, Microsoft, GitHub, OIDC, etc.) using an in-app WebView. The token is automatically captured after the OAuth flow completes. - **Reverse Proxy Support** (iOS & Android): Seamlessly connect to Open WebUI instances behind authentication proxies like oauth2-proxy, Authelia, Authentik, Pangolin, Cloudflare Tunnel, etc. Conduit automatically detects when proxy authentication is required and guides you through the login flow—no endpoint allowlisting or server-side configuration needed. Proxy session cookies are captured from the native cookie store and included in all subsequent API requests. - **LDAP**: Sign in using LDAP credentials if enabled on your server. - **JWT Token**: Paste a server‑issued JWT token for manual token-based auth. - **Custom Headers**: Add headers during login (e.g., `X-API-Key`, `Authorization`, `X-Org`) that iiEasy will include on all HTTP/WebSocket requests. The authentication page dynamically displays available options based on your server's configuration. ## Screenshots | | | | | | --- | --- | --- | --- | | Chat | Model Selector | Chat Drawer | Settings | ## Requirements - Flutter SDK 3.0.0 or higher - Android 6.0 (API 23) or higher - iOS 12.0 or higher - A running Open-WebUI instance ## Installation 1. Clone the repository: ```bash git clone https://github.com/yourusername/conduit.git cd conduit ``` 2. Install dependencies: ```bash flutter pub get ``` 3. Generate code: ```bash dart run build_runner build --delete-conflicting-outputs ``` 4. Run the app: ```bash # For iOS flutter run -d ios # For Android flutter run -d android ``` ## Building for Release ### Android **Если Flutter пишет «No Android SDK found» или «Android SDK not found at this location»:** переменная `ANDROID_HOME` должна указывать на каталог, где **реально установлен** SDK. Пустая или несуществующая папка не подойдёт. 1. **Вариант А — Android Studio** Установите с [developer.android.com/studio](https://developer.android.com/studio). При первом запуске выберите установку SDK — он появится в `~/Android/Sdk`. 2. **Вариант Б — только command-line tools (без Android Studio)** ```bash mkdir -p ~/Android/Sdk/cmdline-tools cd ~/Android/Sdk # Скачать с https://developer.android.com/studio#command-tools (Linux) # Распаковать так, чтобы внутри было cmdline-tools/latest/bin/sdkmanager unzip -q commandlinetools-linux-*.zip && mv cmdline-tools latest && mv latest cmdline-tools/ export ANDROID_HOME="$HOME/Android/Sdk" export PATH="$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$PATH" yes | sdkmanager --licenses sdkmanager "platform-tools" "platforms;android-34" "build-tools;34.0.0" ``` 3. **Настройте окружение** (добавьте в `~/.bashrc` и выполните `source ~/.bashrc` или откройте новый терминал): ```bash export ANDROID_HOME="$HOME/Android/Sdk" export PATH="$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$PATH" ``` 4. Примите лицензии: `flutter doctor --android-licenses` (все запросы — `y`). 5. Проверка: `flutter doctor -v` — в блоке Android toolchain не должно быть ошибок. После этого: ```bash flutter build apk --release # или для выгрузки в Google Play flutter build appbundle --release ``` APK: `build/app/outputs/flutter-apk/app-release.apk` AAB: `build/app/outputs/bundle/release/app-release.aab` ### iOS ```bash flutter build ios --release ``` ### Linux (desktop) Если сборка под Linux падает с ошибкой линковки (`libsecret`, `undefined reference to g_task_set_static_name` и т.п.), это типично для **Flutter из snap**: в snap старая glibc, а системные библиотеки (libsecret, glib) требуют новую. Решение: ставить Flutter **не из snap** — [официальная установка](https://docs.flutter.dev/get-started/install/linux) (manual install). После установки Flutter вручную `flutter run -d linux` и `flutter build linux` должны собираться. Для проверки приложения без Linux-сборки можно использовать эмулятор Android или устройство. ## Configuration ### Android The app requires the following permissions: - Internet access - Microphone (for voice input) - Camera (for taking photos) - Storage (for file selection) ### iOS The app will request permissions for: - Microphone access (voice input) - Speech recognition - Camera access - Photo library access ## Architecture The app follows a clean architecture pattern with: - **Riverpod** for state management - **Dio** for HTTP networking - **WebSocket** for real-time streaming - **Flutter Secure Storage** for credential management ### Project Structure ``` lib/ ├── core/ │ ├── models/ # Data models │ ├── services/ # API and storage services │ ├── providers/ # Global state providers │ └── utils/ # Utility functions ├── features/ │ ├── auth/ # Authentication feature │ ├── chat/ # Chat interface feature │ ├── server/ # Server connection feature │ └── settings/ # Settings feature └── shared/ ├── theme/ # App theming ├── widgets/ # Shared widgets └── utils/ # Shared utilities ``` ## Contributing iiEasy is based on Conduit. For upstream contributions and discussions, see the [Conduit repository](https://github.com/cogwheel0/conduit). For iiEasy-specific feedback and support, visit [iiEasy.ru](https://iiEasy.ru). ## Troubleshooting - iOS: ensure recent Xcode, run `cd ios && pod install`, set signing team in Xcode if building on device. - Android: minSdk 23+, ensure correct Java and Gradle; if builds fail, try `flutter clean`. - Codegen conflicts: `flutter pub run build_runner build --delete-conflicting-outputs`. ### Streaming Issues If you experience problems with real-time streaming or chat updates, ensure websocket support is enabled on your Open-WebUI server. See the [Websocket Support documentation](https://docs.openwebui.com/tutorials/integrations/redis/#websocket-configuration) for configuration details. Required environment variables include `ENABLE_WEBSOCKET_SUPPORT="true"`. ## Security & Privacy - Credentials are stored using platform secure storage (Keychain/Keystore). - No analytics or telemetry are collected. - Network calls are only made to your configured Open‑WebUI server. ## License This project is licensed under the GPL3 License - see the LICENSE file for details. ## Acknowledgments - Vercel OSS Program - Open-WebUI team for creating an amazing self-hosted AI interface - Flutter team for the excellent mobile framework - Conduit project and all its contributors - All users of iiEasy ## Support For support and information, please visit [iiEasy.ru](https://iiEasy.ru).