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 run

First Launch

  1. Launch the app on your device or emulator
  2. Navigate to Settings → Providers
  3. Select a provider (OpenCode is built-in, no key needed)
  4. For cloud providers, enter your API key
  5. 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

ParameterRangeDefaultDescription
Temperature0.0 – 2.00.7Higher = more random / creative
Top P0.0 – 1.01.0Nucleus sampling threshold
Max Tokens1 – 128K4096Maximum response length
Presence Penalty-2.0 – 2.00.0Penalizes new topics
Frequency Penalty-2.0 – 2.00.0Penalizes repeated tokens

System Prompts

System prompts define the AI's behavior and personality. Create, save, and reuse prompts from Settings → Prompts.

System Prompt
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

Debug APK
flutter build apk --debug
Release APK
flutter build apk --release
App Bundle (Play Store)
flutter build appbundle --release

Split APKs

flutter build apk --release --split-per-abi

# Outputs:
# app-armeabi-v7a-release.apk
# app-arm64-v8a-release.apk
# app-x86_64-release.apk

Signing (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 conduit

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

dart
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 Device

API 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

PlatformStorageBiometrics
AndroidEncryptedSharedPreferences + Android KeystoreFingerprint / Face
iOSKeychain Services (E2E encrypted)Face ID / Touch ID
WindowsWindows Credential ManagerWindows Hello
macOSKeychain ServicesTouch ID
Linuxlibsecret (GNOME Keyring)N/A