Files

243 lines
10 KiB
Markdown
Raw Permalink Normal View History

# iiEasy
2025-08-10 01:20:45 +05:30
**iiEasy** — мобильный клиент для Open-WebUI на базе [Conduit](https://github.com/cogwheel0/conduit). Нативная работа с вашей self-hosted AI инфраструктурой.
2025-08-27 12:14:37 +05:30
<div align="center">
2025-08-27 12:33:15 +05:30
<a href="https://iiEasy.ru">
<img src="docs/store-badges/google.webp" alt="iiEasy" style="height:56px;"/>
2025-08-27 12:33:15 +05:30
</a>
2025-08-27 12:14:37 +05:30
2025-08-18 21:28:56 +05:30
</div>
<br>
2025-08-27 12:14:37 +05:30
<div align="center">
<img src="docs/screenshots/conduit-demo.gif" alt="iiEasy Demo" style="height:600px;"/>
2025-08-27 12:14:37 +05:30
</div>
<br>
2025-08-12 13:07:10 +05:30
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.
2025-08-10 01:20:45 +05:30
## 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
```
2025-08-10 01:20:45 +05:30
## Features
### Core Features
2025-08-12 13:07:10 +05:30
- **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
2025-08-10 01:20:45 +05:30
### Advanced Features
2025-08-12 13:07:10 +05:30
- **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
2025-09-10 17:06:38 +05:30
- **Tools (Function Calling)**: Invoke server-side tools exposed by OpenWebUI, with result rendering
### Authentication
iiEasy supports multiple authentication flows when connecting to your OpenWebUI (same as Conduit):
2025-09-10 17:06:38 +05:30
- **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 serverissued 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.
2025-08-12 13:07:10 +05:30
The authentication page dynamically displays available options based on your server's configuration.
2025-08-12 13:07:10 +05:30
## Screenshots
| | | | |
| --- | --- | --- | --- |
| <img src="docs/screenshots/1.png" alt="Chat" width="200" /> | <img src="docs/screenshots/2.png" alt="Model Selector" width="200" /> | <img src="docs/screenshots/3.png" alt="Chat Drawer" width="200" /> | <img src="docs/screenshots/4.png" alt="Settings" width="200" /> |
2025-08-10 01:20:45 +05:30
## 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
2025-08-10 01:20:45 +05:30
```
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 не должно быть ошибок.
После этого:
2025-08-10 01:20:45 +05:30
```bash
flutter build apk --release
# или для выгрузки в Google Play
2025-08-10 01:20:45 +05:30
flutter build appbundle --release
```
APK: `build/app/outputs/flutter-apk/app-release.apk`
AAB: `build/app/outputs/bundle/release/app-release.aab`
2025-08-10 01:20:45 +05:30
### 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 или устройство.
2025-08-10 01:20:45 +05:30
## 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).
2025-08-10 01:20:45 +05:30
## 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 OpenWebUI server.
2025-08-10 01:20:45 +05:30
## License
This project is licensed under the GPL3 License - see the LICENSE file for details.
## Acknowledgments
- <a href="https://vercel.com/oss"><img alt="Vercel OSS Program" src="https://vercel.com/oss/program-badge.svg" /></a>
2025-08-10 01:20:45 +05:30
- 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
2025-08-10 01:20:45 +05:30
## Support
For support and information, please visit [iiEasy.ru](https://iiEasy.ru).