227 lines
7.4 KiB
Markdown
227 lines
7.4 KiB
Markdown
# Conduit
|
||
|
||
<div align="center">
|
||
|
||

|
||

|
||
|
||
|
||
<a href="https://play.google.com/store/apps/details?id=app.cogwheel.conduit">
|
||
<img src="docs/store-badges/google.webp" alt="Get it on Google Play" style="height:56px;"/>
|
||
</a>
|
||
<a href="https://apps.apple.com/us/app/conduit-open-webui-client/id6749840287">
|
||
<img src="docs/store-badges/apple.webp" alt="Download on the App Store" style="height:56px;"/>
|
||
</a>
|
||
|
||
</div>
|
||
|
||
<br>
|
||
|
||
<div align="center">
|
||
<img src="docs/screenshots/conduit-demo.gif" alt="Conduit Demo" style="height:600px;"/>
|
||
</div>
|
||
|
||
<br>
|
||
|
||
Conduit is an open-source, cross-platform mobile application for Open-WebUI, 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
|
||
Conduit supports multiple authentication flows when connecting to your Open‑WebUI:
|
||
- **Username + Password**: Sign in directly against servers that expose a login endpoint. Credentials are stored securely using platform keychains.
|
||
- **API Key**: Paste a server‑issued API token for stateless auth.
|
||
- **Custom Headers**: Add headers during login (e.g., `X-API-Key`, `Authorization`, `X-Org`, or self‑hosted SSO headers) that Conduit will include on all HTTP/WebSocket requests (see [Endpoint Allowlist](#endpoint-allowlist-custom-auth) for reverse proxy whitelisting).
|
||
|
||
## 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" /> |
|
||
|
||
## 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
|
||
```bash
|
||
flutter build apk --release
|
||
# or for App Bundle
|
||
flutter build appbundle --release
|
||
```
|
||
|
||
### iOS
|
||
```bash
|
||
flutter build ios --release
|
||
```
|
||
|
||
## 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
|
||
|
||
Conduit is currently in active development. We welcome your feedback and contributions!
|
||
|
||
**How to Contribute:**
|
||
|
||
- **Bug Reports**: Found a bug? Please [create an issue](https://github.com/cogwheel0/conduit/issues) with details about the problem, steps to reproduce, and your device/platform information.
|
||
|
||
- **Feature Requests**: Have an idea for a new feature? Start a [discussion](https://github.com/cogwheel0/conduit/discussions) to share your ideas and gather feedback from the community.
|
||
|
||
- **Questions & Feedback**: Use [GitHub Discussions](https://github.com/cogwheel0/conduit/discussions) to ask questions, share your experience, or discuss the project.
|
||
|
||
**Note:** As the project is actively evolving, we're not accepting pull requests at this time. Instead, please use issues and discussions to share your ideas, report bugs, and contribute to the project's development.
|
||
|
||
## 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`.
|
||
|
||
## 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.
|
||
|
||
### Endpoint Allowlist (Custom Auth)
|
||
|
||
If you protect Open‑WebUI with SSO or a reverse proxy (Authlia, Authentik,
|
||
etc.), whitelist these path prefixes so Conduit can complete login, sync, and
|
||
streaming flows. Paths are relative to your server base URL.
|
||
|
||
- `/health`
|
||
- `/api/*`
|
||
|
||
WebSocket connections use the Socket.IO handshake on `/ws/socket.io`. Ensure the
|
||
same headers (or allowlist rules) apply there as well.
|
||
|
||
## 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
|
||
- All contributors and users of Conduit
|
||
|
||
## Support
|
||
|
||
For issues and feature requests, please use the [GitHub Issues](https://github.com/cogwheel0/conduit/issues) page.
|