Co-authored-by: Cursor <cursoragent@cursor.com>
10 KiB
iiEasy
iiEasy — мобильный клиент для Open-WebUI на базе Conduit. Нативная работа с вашей self-hosted AI инфраструктурой.
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
- Screenshots
- Requirements
- Quickstart
- Installation
- Building for Release
- Configuration
- Localization (i18n)
- Compatibility
- Docs
- Architecture
- Troubleshooting
- Security & Privacy
- Contributing
- License
- Support
Quickstart
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
![]() |
![]() |
![]() |
![]() |
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
- Clone the repository:
git clone https://github.com/yourusername/conduit.git
cd conduit
- Install dependencies:
flutter pub get
- Generate code:
dart run build_runner build --delete-conflicting-outputs
- Run the app:
# 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. Пустая или несуществующая папка не подойдёт.
-
Вариант А — Android Studio
Установите с developer.android.com/studio. При первом запуске выберите установку SDK — он появится в~/Android/Sdk. -
Вариант Б — только command-line tools (без Android Studio)
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" -
Настройте окружение (добавьте в
~/.bashrcи выполнитеsource ~/.bashrcили откройте новый терминал):export ANDROID_HOME="$HOME/Android/Sdk" export PATH="$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$PATH" -
Примите лицензии:
flutter doctor --android-licenses(все запросы —y). -
Проверка:
flutter doctor -v— в блоке Android toolchain не должно быть ошибок.
После этого:
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
flutter build ios --release
Linux (desktop)
Если сборка под Linux падает с ошибкой линковки (libsecret, undefined reference to g_task_set_static_name и т.п.), это типично для Flutter из snap: в snap старая glibc, а системные библиотеки (libsecret, glib) требуют новую. Решение: ставить Flutter не из snap — официальная установка (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. For iiEasy-specific feedback and support, visit 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 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
- 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.




