When building Open Chat, there was a clear problem: many existing AI chat applications are frustrating to use, expensive to subscribe to, and don't guarantee your privacy. The goal was to create something better - an app that's simple, user-friendly, and powerful enough to take you as far as you want to go.
Why the name Open Chat? It's straightforward and represents our commitment to transparency. Help us make this app popular enough to get added to Homebrew!
- Multi-Provider Support - Connect to Anthropic, OpenAI, Ollama, and custom endpoints
- Secure API Key Management - Keys stored in system keychain, never in files
- Persistent Conversations - SQLite database for chat history
- Cross-Platform - Desktop (Windows, macOS, Linux) and mobile (iOS, Android)
- Keyboard Shortcuts - Quick access to common actions
- Modern UI - Dark/light themes with responsive design
- Model Capabilities - Automatic detection of vision, audio, and file support
- Conversation Management - Organize and search your chat history
-
Install Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
-
Install Bun (if not already installed)
curl -fsSL https://bun.sh/install | bash
-
Clone the repository
git clone https://github.com/your-username/open-chat.git cd open-chat -
Install dependencies
bun install
-
Run the application
bun run dev:desktop
| Command | Description |
|---|---|
bun run dev:desktop |
Start development server with hot reload |
bun run dev |
Start frontend development server only |
bun run build |
Build frontend assets only |
bun run dev:ios |
iOS simulator development |
bun run dev:android |
Android emulator development |
bun run build:ios |
Build iOS application |
bun run build:android |
Build Android application |
src/
├── components/ # React components
│ ├── Chat/ # Chat interface components
│ ├── Settings/ # Settings and configuration
│ ├── Sidebar/ # Navigation and conversation list
│ └── Toast/ # Notification system
├── hooks/ # Custom React hooks
├── shared/ # Stores and utilities
│ ├── chatStore.ts # SQLite database management
│ ├── settingsStore.ts # Key-value settings
│ └── constants.ts # App constants
├── types/ # TypeScript type definitions
└── utils/ # Utility functions
└── secureStorage.ts # System keychain integration
src-tauri/ # Rust backend
├── src/ # Rust source code
├── tauri.conf.json # Tauri configuration
└── Cargo.toml # Rust dependencies
- VS Code + Tauri + rust-analyzer
- WebStorm + Rust
- Open Settings (Cmd/Ctrl + ,)
- Navigate to "Providers" tab
- Click "Add Provider"
- Configure endpoint and API key
- Select available models
| Shortcut | Action |
|---|---|
| Cmd/Ctrl + N | New conversation |
| Cmd/Ctrl + T | New conversation (alt) |
| Cmd/Ctrl + , | Open settings |
| Cmd/Ctrl + / | Show shortcuts |
| Cmd/Ctrl + L | Focus input |
| Cmd/Ctrl + S | Toggle sidebar |
| Esc | Close modals |
- Install Xcode from the App Store
- Install iOS targets
rustup target add aarch64-apple-ios aarch64-apple-ios-sim
- Run on simulator
bun run dev:ios
If the iOS build fails after disconnecting a device or interrupting a build (e.g., "No such file or directory" errors during Xcode library linking), clean the build cache:
cd src-tauri && cargo cleanIf that doesn't work, also clear Xcode's derived data:
rm -rf ~/Library/Developer/Xcode/DerivedData/open-chat-*- Install Android Studio
- Install Android targets
rustup target add aarch64-linux-android armv7-linux-androideabi
- Run on emulator
bun run dev:android
Open Chat uses SQLite for persistent storage:
- conversations - Chat sessions with metadata
- messages - Individual messages with role and content
- providers - AI provider configurations
Settings are stored in a separate key-value store (settings.json), and API keys are secured in the system keychain.
- API keys stored in system keychain (macOS Keychain, Windows Credential Manager, Linux Secret Service)
- No sensitive data stored in configuration files
- Database uses foreign key constraints for data integrity
- Secure inter-process communication between frontend and Tauri backend
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
The following brand assets are NOT licensed under Apache-2.0. All rights are reserved by Weiss Solutions LLC:
src/assets/Logo.svgpublic/Logo.png- Any other
Logo-named assets or components - The name and visual identity "Open Chat" (word mark and logo)
- All application icons referenced in
src-tauri/tauri.conf.jsonand generated via Tauri Icon (files undericons/when present)
No license or right is granted to use these brand assets, including in product names, domain names, or in ways that imply sponsorship or endorsement. Limited descriptive, non-misleading references to the project name are permitted where necessary to identify the software.
Copyright © Weiss Solutions LLC. Unregistered trademark rights are claimed in the name and logo to the fullest extent permitted by applicable law.
- Create an issue for bug reports
- Start a discussion for questions
- Check the documentation for guides
