Getting Started
Conduit is a Flutter-based AI chat application for Android. Connect to multiple AI providers — OpenAI, Anthropic, Gemini, Ollama, and more — from a single interface.
Prerequisites
- Flutter SDK 3.22 or later
- Dart SDK 3.12 or later (included with Flutter)
- Android Studio or VS Code with Flutter extension
Quick Start
git clone https://github.com/Harsha754-ml/Conduit.git
cd conduit
flutter pub get
flutter runFirst Launch
- Launch the app on your device or emulator
- Navigate to Settings → Providers
- Select a provider (OpenCode is built-in, no key needed)
- For cloud providers, enter your API key
- Start chatting
Provider Setup
Conduit supports 11 providers through a unified interface. API keys are encrypted and stored locally — never sent anywhere except the provider you configure.
OpenCode
Built-in, no key required
Start chatting instantly with no configuration.
OpenAI
API key from platform.openai.com
GPT-4o, GPT-4o-mini, GPT-4.1, o3, o4-mini. Vision and tool calling supported.
Anthropic
API key from console.anthropic.com
Claude Sonnet 4, Opus 4, Haiku. 200K context window.
Google Gemini
API key from aistudio.google.com
Gemini 2.5 Pro and Flash with 1M context. Multimodal.
OpenRouter
API key from openrouter.ai
100+ models from multiple providers through a single API key.
Groq
API key from console.groq.com
Ultra-fast inference for Llama, Mixtral, Gemma. Free tier available.
Together AI
API key from api.together.xyz
Llama, Mistral, Qwen, DeepSeek — wide range of open models.
Mistral
API key from console.mistral.ai
Mistral Large, Codestral, Pixtral. Vision support via Pixtral.
Ollama
No key required (runs locally)
Run models locally on your machine. Free, private, no internet needed.
LM Studio
No key required (runs locally)
GUI for running local models. Download any GGUF model and start chatting.
Custom
Varies by endpoint
Connect to any OpenAI-compatible API. Works with vLLM, LocalAI, text-generation-webui, and more.
Configuration
Fine-tune the AI behavior with model parameters, system prompts, and advanced settings.
Model Parameters
| Parameter | Range | Default | Description |
|---|---|---|---|
| Temperature | 0.0 – 2.0 | 0.7 | Higher = more random / creative |
| Top P | 0.0 – 1.0 | 1.0 | Nucleus sampling threshold |
| Max Tokens | 1 – 128K | 4096 | Maximum response length |
| Presence Penalty | -2.0 – 2.0 | 0.0 | Penalizes new topics |
| Frequency Penalty | -2.0 – 2.0 | 0.0 | Penalizes repeated tokens |
System Prompts
System prompts define the AI's behavior and personality. Create, save, and reuse prompts from Settings → Prompts.
You are a helpful coding assistant.
Always provide working code examples.
Explain your reasoning step by step.Base URL Override
For self-hosted or proxied providers, override the default API endpoint in Settings → Providers → Advanced. Useful for Ollama on a different machine, VPN configurations, or API proxies.
Build Guide
Build release artifacts for Android or run in debug mode for development.
Android
flutter build apk --debugflutter build apk --releaseflutter build appbundle --releaseSplit APKs
flutter build apk --release --split-per-abi
# Outputs:
# app-armeabi-v7a-release.apk
# app-arm64-v8a-release.apk
# app-x86_64-release.apkSigning (Release)
Create a keystore and configure Gradle signing for Play Store distribution.
keytool -genkey -v \
-keystore conduit-release-key.jks \
-keyalg RSA -keysize 2048 \
-validity 10000 -alias conduitAndroid requirements: Min SDK 21 (Android 5.0), Target SDK 34, Compile SDK 35. APK size varies by ABI; use split APKs or App Bundle for smaller downloads.
Architecture
Conduit follows Clean Architecture with a feature-based folder structure, Riverpod for state management, and GoRouter for navigation.
lib/ ├── core/ Shared infrastructure │ ├── config/ App configuration │ ├── network/ Dio, SSE, WebSocket clients │ ├── providers/ Riverpod overrides │ ├── router/ GoRouter navigation │ ├── storage/ Hive & Secure Storage │ ├── theme/ Material 3 themes │ └── utils/ Extensions and helpers ├── features/ Feature modules │ ├── chat/ Core chat functionality │ ├── settings/ App & provider settings │ ├── history/ Conversation history │ ├── prompts/ System prompt management │ ├── export/ PDF & text export │ ├── voice/ Speech-to-text & TTS │ └── attachments/ File & image handling ├── providers/ AI provider abstraction ├── shared/ Shared widgets ├── app.dart └── main.dart
Layer Architecture
Presentation
Pages, widgets, Riverpod providers. UI and state management.
Domain
Entities, repository interfaces, use cases. Zero dependencies on frameworks.
Data
Repository implementations, data sources, DTOs. Implements domain contracts.
Provider Abstraction
Every AI provider implements the standard interface. The ProviderRegistry routes requests to the active provider.
interface AIProvider {
sendMessage(...) → String
streamMessage(...) → Stream
listModels(...) → List<ModelInfo>
healthCheck(...) → HealthCheckResult
}Security & Privacy
Conduit stores all data locally. No analytics, no telemetry, no tracking. Your data stays on your device.
Data Flow
Your Device → AI Provider (you configured) → Your DeviceAPI Keys
Stored in platform-native encrypted storage. Android Keystore / iOS Keychain. Never in plaintext, never logged.
Conversations
Stored locally via Hive. No cloud sync. Delete individually or clear all from Settings.
Network
All API calls use TLS encryption. No sensitive data in URL parameters. Dio with timeout config.
Permissions
Only internet required for core chat. Camera, mic, and storage are opt-in for attachments and voice.
Platform Security
| Platform | Storage | Biometrics |
|---|---|---|
| Android | EncryptedSharedPreferences + Android Keystore | Fingerprint / Face |
| iOS | Keychain Services (E2E encrypted) | Face ID / Touch ID |
| Windows | Windows Credential Manager | Windows Hello |
| macOS | Keychain Services | Touch ID |
| Linux | libsecret (GNOME Keyring) | N/A |