Files
iiEsaywebUIapp/README.md
2025-08-23 20:09:43 +05:30

225 lines
7.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Conduit
<div align="center">
<a href="https://groups.google.com/g/conduit">
<img src="https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png" alt="Get it on Google Play" style="height:80px; vertical-align:middle;"/>
</a>
<a href="https://apps.apple.com/us/app/conduit-open-webui-client/id6749840287">
<img src="https://developer.apple.com/assets/elements/badges/download-on-the-app-store.svg" alt="Download on the App Store" style="height:56px; vertical-align:middle;"/>
</a>
<br><br>
</div>
<br>
<p align="center">
<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/1.png" alt="Screenshot 1" width="250" />
</p>
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.
## 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
## Screenshots
<p align="center">
<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/2.png" alt="Screenshot 2" width="200" />
<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/3.png" alt="Screenshot 3" width="200" />
<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/4.png" alt="Screenshot 4" width="200" />
<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/5.png" alt="Screenshot 5" width="200" />
<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/6.png" alt="Screenshot 6" width="200" />
</p>
## 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
flutter pub 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
## Localization (i18n)
- Supported locales: `en`, `de`, `fr`, `it`.
- Uses Flutter's `gen_l10n` with ARB files and the `intl` package for date/number formatting.
### Install & Generate
- Install packages:
- `flutter_localizations` (Flutter SDK)
- `intl: ^0.20.2`
- Files are under `lib/l10n/*.arb`. The template is `app_en.arb`.
- Generate localizations:
- `flutter gen-l10n`
- or run a full build: `flutter pub get && flutter gen-l10n`
### Usage Examples
- Basic text:
- `Text(AppLocalizations.of(context)!.appTitle)`
- With placeholder:
- `Text(AppLocalizations.of(context)!.dynamicContentWithPlaceholder('Alex'))`
- Pluralization:
- `Text(AppLocalizations.of(context)!.itemsCount(3))`
- Date/time formatting:
- `final dateText = DateFormat.yMMMMEEEEd(Localizations.localeOf(context).toString()).format(DateTime.now());`
- `Text(dateText)`
- Number formatting:
- `final price = NumberFormat.currency(locale: Localizations.localeOf(context).toString(), symbol: '€').format(1234.56);`
- `Text(price)`
### Add a New Language
- Create a new ARB file in `lib/l10n/`, e.g. `app_es.arb`.
- Copy keys from `app_en.arb` and provide translated values.
- Ensure placeholders and plural rules match the template.
- Add the locale to `supportedLocales` in `MaterialApp` (see `lib/main.dart`).
- Regenerate: `flutter gen-l10n`.
### Best Practices
- Key naming: use lowerCamelCase (e.g., `loginButton`, `errorMessage`).
- Include `@` metadata with `description` for context and `placeholders` with examples.
- Prefer ICU plural/select syntax in ARB for quantities and genders.
- Avoid concatenating strings at runtime; use placeholders in ARB.
### InApp Locale Switching
- Open the Profile page → Settings tile → choose `System`, `English`, `Deutsch`, `Français`, or `Italiano`.
- Selection persists across app launches.
### Troubleshooting
- Build fails with ARB placeholder errors:
- Ensure every placeholder has an example string and correct type.
- Missing translation at runtime:
- Flutter falls back to English; search for hardcoded strings and replace with `AppLocalizations`.
- iOS strings not changing:
- Restart the app after changing system language or use the inapp language selector.
### References
- Flutter localization: https://docs.flutter.dev/ui/accessibility-and-localization/internationalization
- Intl package: https://pub.dev/packages/intl
## 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
Contributions are welcome! Please feel free to submit a Pull Request.
1. Fork the project
2. Create your feature branch (`git checkout -b feature/AmazingFeature`)
3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
4. Push to the branch (`git push origin feature/AmazingFeature`)
5. Open a Pull Request
## 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.