Files
iiEsaywebUIapp/README.md
Arsen Akhmetzyanov 5947edec45
Some checks failed
L10n / l10n (push) Has been cancelled
Rebrand to iiEasy: naming, logo, l10n, docs, assets
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-19 23:21:16 +05:00

10 KiB
Raw Blame History

iiEasy

iiEasy — мобильный клиент для Open-WebUI на базе Conduit. Нативная работа с вашей self-hosted AI инфраструктурой.


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

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 OpenWebUI, with result rendering

Authentication

iiEasy supports multiple authentication flows when connecting to your OpenWebUI (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 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.

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:
git clone https://github.com/yourusername/conduit.git
cd conduit
  1. Install dependencies:
flutter pub get
  1. Generate code:
dart run build_runner build --delete-conflicting-outputs
  1. 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. Пустая или несуществующая папка не подойдёт.

  1. Вариант А — Android Studio
    Установите с developer.android.com/studio. При первом запуске выберите установку SDK — он появится в ~/Android/Sdk.

  2. Вариант Б — только 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"
    
  3. Настройте окружение (добавьте в ~/.bashrc и выполните source ~/.bashrc или откройте новый терминал):

    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 не должно быть ошибок.

После этого:

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 OpenWebUI 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.