VibeCody is an AI-powered developer toolchain built entirely in Rust. It combines a terminal-first CLI coding assistant (VibeCLI) with a full-featured desktop code editor (VibeUI), both powered by a shared library of AI and editor primitives.
| Project | Description | Status |
|---|---|---|
| VibeCLI | AI coding assistant for the terminal (TUI + REPL + --serve daemon) |
Active |
| VibeUI | AI-powered desktop code editor (Tauri + Monaco) | Active |
| VibeApp | Secondary Tauri shell | Active |
| VibeMobile | Mobile companion app (Flutter — iOS, Android, macOS, Linux, Windows, Web) | Active |
| VibeWatch | Apple Watch (SwiftUI, watchOS 10+) + Wear OS (Kotlin/Compose) clients with companion relays | Active |
git clone https://github.com/TuringWorks/vibecody.git
cd vibecody
make setup # Installs Rust, Node.js, system libs, npm depsOr run the setup script directly:
./scripts/setup.shmake uimake cli # Build release binary
./target/release/vibecli --tui # Run with TUI
# Or with a specific provider
./target/release/vibecli --tui --provider claude --model claude-3-5-sonnet-20241022make doctor # Checks all required + optional toolsRun make help for the full list, or make help-surfaces for the matrix below.
Every surface has a consistent build-<surface> / test-<surface> pair:
# Surface Dev Build Test
# ───────────────── ───────────── ─────────────────── ──────────────────
# VibeCLI (Rust) make cli-run make build-cli make test-cli
# VibeUI (Tauri) make ui make build-ui make test-ui
# VibeApp (Tauri) make app make build-app make test-app
# VibeX (Tauri) make vibex make build-vibex make test-vibex
# Agent SDK (TS) — make build-sdk make test-sdk
# vibe-indexer — make build-indexer make test-indexer
# vibe-memory — make build-memory make test-memory
# vibe-rl-py (uv) — make build-rl make test-rl
# VS Code ext — make build-vscode make lint-vscode
# JetBrains plugin — make build-jetbrains make test-jetbrains
# Mobile (Flutter) — make build-mobile make test-mobile
# Watch (iOS/Wear) — make build-watch make test-watch# Setup & environment
make setup Install all prerequisites
make doctor Verify dev environment is ready
# Aggregates
make build Build all desktop shells (CLI + UI + App + VibeX)
make build-apps Build the three Tauri shells (UI + App + VibeX)
make build-all Rust + Tauri + Mobile + Watch (what CI builds)
make test Run all Rust workspace tests (fast path)
make test-fast Run Rust tests (excluding collab crate)
make test-all Test every Rust + Node surface
make ci Mirror the GitHub CI gate locally
make check Fast type-check (Rust + UI/App/VibeX TypeScript)
make lint Run clippy + UI TypeScript check
make clean Remove build artifacts
make docker Build Docker image
# Mobile (Flutter — iOS / Android)
make mobile-setup flutter pub get
make mobile-ios Build iOS .app (unsigned, simulator-friendly)
make mobile-ios-ipa Archive + export signed iOS .ipa (needs APPLE_TEAM_ID)
make mobile-android Release APK
make mobile-android-bundle Release AAB for Play Store
make build-mobile Everything above (platform-gated)
make test-mobile flutter test · make analyze-mobile dart analyze
# Watch (Xcode + Gradle)
make watch-ios Build watchOS app for Simulator (Xcode)
make watch-ios-archive Archive watchOS app for a real device
make watch-wear Wear OS release APK
make watch-wear-bundle Wear OS release AAB
make build-watch Everything above (platform-gated)
make test-watch Wear OS unit tests (gradle test)vibecody/
├── Cargo.toml # Workspace root (9 members)
├── Dockerfile # Multi-stage musl build (Alpine runtime)
├── docker-compose.yml # VibeCLI + Ollama sidecar (air-gapped)
├── install.sh # One-liner installer (SHA-256 verified)
├── vibecli/
│ └── vibecli-cli/ # CLI binary (TUI + REPL + HTTP daemon)
│ ├── src/ # ~354 modules
│ │ ├── main.rs # Entry point, command routing
│ │ ├── config.rs # TOML config (~/.vibecli/config.toml)
│ │ ├── serve.rs # HTTP daemon for VS Code ext / SDK / mobile / watch
│ │ ├── repl.rs # Rustyline REPL helper
│ │ ├── watch_auth.rs # P256 ECDSA device registration + JWT lifecycle
│ │ ├── watch_bridge.rs # Axum /watch/* routes (SSE streaming)
│ │ ├── watch_session_relay.rs # OLED-optimised payloads
│ │ ├── mdns_announce.rs / tailscale.rs / ngrok.rs # zero-config connectivity
│ │ ├── pairing.rs # one-time pairing URL + QR rendering
│ │ └── tui/ # Ratatui TUI (app, ui, components)
│ ├── tests/ # 62+ BDD / integration harnesses
│ └── skills/ # 711 skill files (25+ categories)
├── vibeui/
│ ├── src/ # React + TypeScript frontend
│ │ ├── App.tsx # Root component
│ │ └── components/ # 293 panels + 42 composite dashboards
│ ├── src-tauri/ # Tauri Rust backend (1,045+ commands)
│ └── crates/ # Shared Rust library crates
│ ├── vibe-core/ # Text buffer, FS, workspace, Git, index
│ ├── vibe-ai/ # 22 AI providers + shared openai_compat; agents, hooks, planner
│ ├── vibe-lsp/ # Language Server Protocol client
│ ├── vibe-extensions/ # WASM-based extension system
│ └── vibe-collab/ # CRDT multiplayer collaboration
├── vibeapp/ # Secondary Tauri shell
├── vibemobile/ # Flutter mobile companion app
│ ├── lib/screens/ # 11 screens (home, chat, pair, machines, sessions, sandbox, watch…)
│ ├── lib/services/ # api_client, auth, discovery, handoff, notifications, watch_sync
│ └── lib/models/ # Machine / device models
├── vibewatch/ # Watch clients
│ ├── VibeCodyWatch Watch App/ # SwiftUI (watchOS 10+, Secure Enclave P-256)
│ ├── VibeCodyWatchCompanion/ # iOS WatchConnectivity bridge
│ ├── VibeCodyWear/ # Kotlin/Compose (Wear OS 3+, Android Keystore)
│ └── VibeCodyWearCompanion/ # Android Wearable Data Layer bridge
├── vibe-indexer/ # Remote indexing service
├── vscode-extension/ # VS Code extension (chat + completions)
├── jetbrains-plugin/ # JetBrains IDE plugin
├── neovim-plugin/ # Neovim plugin
├── packages/
│ └── agent-sdk/ # TypeScript Agent SDK
├── docs/ # Jekyll GitHub Pages site
└── .github/workflows/ # CI/CD (pages, release)The vibeui/crates/ libraries are designed to be reused across both VibeCLI and VibeUI:
Core editor primitives — text buffer (rope-based), file system operations, workspace management, Git integration, terminal PTY, diff engine, code search, and embedding-based codebase indexing.
Unified AI provider abstraction with agent loop, hooks, planner, multi-agent orchestration, skills, artifacts, admin policy, trace/session resume, and OpenTelemetry. Supports 22 providers (plus a shared openai_compat helper module):
- Ollama — Local/private models (default)
- Anthropic Claude — Claude 4 Sonnet/Opus
- OpenAI — GPT-4o and variants
- Google Gemini — Gemini 2.5 Pro/Flash
- xAI Grok — Grok 2
- Groq — Fast inference (Llama, Mixtral)
- OpenRouter — Multi-provider gateway
- Azure OpenAI — Enterprise Azure-hosted models
- AWS Bedrock — AWS-hosted models (Claude, Llama, Titan)
- GitHub Copilot — Copilot integration
- LocalEdit — Local code editing model
- Mistral — Mistral AI models
- Cerebras — Wafer-scale inference
- DeepSeek — DeepSeek V3/R1
- Zhipu — GLM-4 models
- Vercel AI — Vercel AI SDK
- MiniMax — MiniMax-Text-01
- Perplexity — Search-augmented Sonar models
- Together AI — Open model hosting (Llama, Qwen)
- Fireworks AI — Fast open model inference
- SambaNova — Hardware-accelerated inference
- Failover — Auto-failover wrapper (chains multiple providers)
Language Server Protocol client for intelligent code features (go-to-definition, diagnostics, completions).
WASM-based extension runtime (Wasmtime), enabling a plugin API.
CRDT-based multiplayer collaboration for real-time shared editing sessions.
All providers implement the AIProvider trait from vibe-ai:
#[async_trait]
pub trait AIProvider: Send + Sync {
fn name(&self) -> &str;
async fn is_available(&self) -> bool;
async fn complete(&self, context: &CodeContext) -> Result<CompletionResponse>;
async fn stream_complete(&self, context: &CodeContext) -> Result<CompletionStream>;
async fn chat(&self, messages: &[Message], context: Option<String>) -> Result<String>;
async fn stream_chat(&self, messages: &[Message]) -> Result<CompletionStream>;
// + chat_response, chat_with_images, and more
}Configure providers in ~/.vibecli/config.toml:
Security note: Do not put API keys in
config.toml. Keys are stored encrypted in~/.vibecli/profile_settings.db. Usevibecli secret setor the VibeUI Settings panel (⚙️ Keys tab) to manage them.
[ollama]
enabled = true
api_url = "http://localhost:11434"
model = "qwen2.5-coder:7b"
[claude]
enabled = false
model = "claude-3-5-sonnet-20241022"
[openai]
enabled = false
model = "gpt-4o"
[gemini]
enabled = false
model = "gemini-2.0-flash"
[grok]
enabled = false
model = "grok-3-mini"
[groq]
enabled = false
model = "llama-3.3-70b-versatile"
[mistral]
enabled = false
model = "mistral-large-latest"
# See docs/configuration.md for all 22 providers
[safety]
require_approval_for_commands = true
require_approval_for_file_changes = trueVibeMobile (vibemobile/) is a Flutter app for remote management of VibeCody sessions from any device.
Features:
- QR code and manual URL/JSON pairing (works without a camera)
- Zero-config LAN discovery via mDNS — plus Tailscale and ngrok auto-detection for off-LAN access
- Apple-Handoff-style session continuity between desktop and phone
- Google-Docs-style bidirectional message sync (no truncation)
- Remote chat with any configured AI provider
- Machine management (register, monitor, heartbeat)
- Session browser and management
- Watch device browser + sandbox chat panel
- Push notifications for agent task completion
- Dark/light theme with Material Design 3
Platforms: iOS, Android, macOS, Linux, Windows, Web
cd vibemobile
flutter pub get
flutter run # Run on connected device
flutter run -d chrome # Run in browserRequirements: Flutter SDK >=3.2.0, Dart >=3.2.0
See docs/connectivity.md for the full mDNS / Tailscale / ngrok URL race design.
VibeCody extends to wrist-worn devices via two parallel native clients that share the same backend (watch_auth.rs, watch_bridge.rs, watch_session_relay.rs) exposed under /watch/*.
| Platform | Path | Stack | Key storage |
|---|---|---|---|
| Apple Watch | vibewatch/VibeCodyWatch Watch App/ |
Swift / SwiftUI, watchOS 10+ | Secure Enclave P-256 ECDSA via CryptoKit; Keychain for tokens |
| Apple Watch companion | vibewatch/VibeCodyWatchCompanion/ |
Swift, WatchConnectivity | Phone-side relay when watch is off-LAN |
| Wear OS | vibewatch/VibeCodyWear/ |
Kotlin / Jetpack Compose for Wear, Wear OS 3+ | Android Keystore (StrongBox) P-256; EncryptedSharedPreferences |
| Wear OS companion | vibewatch/VibeCodyWearCompanion/ |
Kotlin, Wearable Data Layer | Android phone relay service |
Pairing happens with a single URL (or Bearer token for emulators) — no JSON copy required. The Watch Devices panel in VibeUI (Governance → Watch Devices) surfaces live device status, transport, and Secure Enclave / StrongBox attestation.
Transports (priority order): Direct LAN → Tailscale mesh → phone-relay (WatchConnectivity / Wearable Data Layer).
See docs/WATCH-INTEGRATION.md for the full architecture, auth flow, and TDD/BDD coverage.
| Plugin | Path | Status |
|---|---|---|
| VS Code | vscode-extension/ |
Extension with inline chat, code actions, sidebar panel |
| JetBrains | jetbrains-plugin/ |
IntelliJ/WebStorm/PyCharm plugin with agent integration |
| Neovim | neovim-plugin/ |
Lua plugin with Telescope integration |
make setup installs everything automatically. If you prefer manual setup:
| Requirement | Version | Install |
|---|---|---|
| Rust | stable | curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh |
| Node.js | >= 20 | nodejs.org or nvm install 20 |
| Git | any | Usually pre-installed |
| Ollama | any | Optional — ollama.ai for local AI |
| Docker | any | Optional — for container sandbox |
Linux only (Tauri system dependencies):
# Debian/Ubuntu
sudo apt install libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev patchelf build-essential libssl-dev pkg-config
# Fedora
sudo dnf install webkit2gtk4.1-devel gtk3-devel libappindicator-gtk3-devel librsvg2-devel patchelf openssl-devel
# Arch
sudo pacman -S webkit2gtk-4.1 gtk3 libappindicator-gtk3 librsvg patchelf openssl base-develmacOS only: Xcode command line tools (xcode-select --install)
11,000+ unit tests + 62 BDD/integration harnesses across the workspace.
make test # All Rust workspace tests (fast path)
make test-fast # Skip collab crate (faster)
make test-all # Every Rust + Node surface
make check # Type-check only (Rust + UI/App/VibeX TypeScript)
make ci # Mirror the GitHub CI gate locally
# Per-surface tests
make test-cli # VibeCLI (Rust) make test-ui # VibeUI (vitest)
make test-app # VibeApp (typecheck) make test-vibex # VibeX (typecheck + guard)
make test-sdk # Agent SDK (vitest) make test-mobile # Flutter
make test-indexer # vibe-indexer make test-memory # vibe-memory
make test-rl # vibe-rl-py (pytest) make test-jetbrains # JetBrains plugin| Problem | Fix |
|---|---|
rustup could not choose a version of cargo |
Run rustup default stable |
npm run tauri dev can't find cargo (Linux) |
Use make ui or npm run tauri:dev — these prepend ~/.cargo/bin to PATH |
| Port 1420 already in use | Kill stale Vite: lsof -i :1420 then kill <pid> |
"VibeUI" is damaged (macOS) |
Run xattr -cr /Applications/VibeUI.app (unsigned app — Gatekeeper quarantine) |
Missing libwebkit2gtk-4.1-dev (Linux) |
Run make setup or install manually (see Prerequisites) |
Failed to run cargo: No such file (macOS .app) |
Fixed in v0.3.0 — app now inherits shell PATH at startup |
Full documentation is available at the GitHub Pages site (replace with actual URL).
- Architecture Overview
- VibeCLI Reference
- VibeUI Reference
- Roadmap — consolidated roadmap (phases 1–39 history in appendices)
- Fit-Gap Analysis — consolidated competitive catalogue (142 gaps, 8 iterations, 5 deep-dives)
- Configuration Guide
- Contributing
MIT — see individual crate Cargo.toml files.
- Tauri — Desktop application framework
- Monaco Editor — Code editor component
- Ratatui — Terminal UI framework
- Ropey — Rope data structure for text buffers
- Ollama — Local LLM runtime