Project-based Terminal Manager — Organize your terminals by project, not by window.
Connexio is built with Tauri v2 and a native Rust backend for fast startup, low memory usage, and cross-platform support.
When working on multiple projects, you end up with dozens of terminal windows/tabs with no clear organization. Which terminal belongs to which project? Where was that running server?
Connexio organizes your terminals by project. Each project gets its own workspace with dedicated terminal tabs, persistent sessions, remote access, and productivity tools built right in.
- 📁 Project Workspace — Each project has its own workspace with dedicated terminals
- 📑 Multi-tab Terminals — Multiple terminal tabs per project with rename & drag-to-reorder
- 🐚 Shell Picker — Auto-detect available shells (PowerShell, CMD, Git Bash, WSL, Zsh, Fish, etc.)
- 💾 Session Persistence — Tabs, layout, and active project survive app restart
- 🔀 Drag & Drop — Reorder tabs, reorder projects, move projects between groups
- ⚡ WebGL Renderer — Hardware-accelerated terminal rendering (toggleable in settings)
- 📋 Task Runner — Auto-detect scripts from
package.json,Makefile,Cargo.toml,pyproject.toml— one-click run - 📌 Pinned Commands — Save favorite commands per project (CRUD, drag reorder)
- ⏱️ Command Timer — Track execution time, notification when long-running commands finish
- 📝 Code Editor — Built-in editor powered by CodeMirror 6 (JS, TS, HTML, CSS, Python, Rust, JSON, Markdown)
- 📂 File Explorer — Full file tree with context menu and inline actions
- 🌐 Web Preview — Live preview panel as a workspace tab
- 🌿 Git Status — Live branch, ahead/behind, modified/staged/untracked counts
- 🔀 Branch Picker — Switch branches from the workspace header
- 💬 Commit Box — Stage and commit directly from the UI
- 📜 Git History — View commit history per project
- 📱 Remote Access — Open a secure mobile workspace with trusted-token login and remote terminal controls
- 🔗 SSH Manager — Save SSH connections per project + global, one-click connect with key or password auth
- 🌐 Tailscale Support — Generate remote URLs using detected Tailscale IPs for private-network access
- 🤖 AI Chat — Side panel with configurable model integration
- 🎮 Discord Rich Presence — Show what you're working on in Discord
- 🔄 Auto-Updater — Check for updates via GitHub Releases, download & install with one click
- 🎨 Themes — Built-in themes (Dark, Light, Midnight Ocean) with full terminal color support
- ⚙️ Settings — Font size, font family, cursor style, scrollback, copy-on-select, default shell, WebGL toggle
- 🖥️ Custom Titlebar — Clean frameless window with app version display
- 📐 Resizable Panels — Split panes for editor + terminal side-by-side layout
| Platform | Download |
|---|---|
| Windows | Connexio_x64-setup.exe |
| macOS (Apple Silicon) | Connexio_aarch64.dmg |
| Linux | Connexio_amd64.AppImage |
Or go to Releases for all versions including pre-releases.
| Technology | Purpose |
|---|---|
| Tauri v2 | Cross-platform desktop framework |
| Rust | Native backend (PTY, git, SSH, file system) |
| portable-pty | Native PTY process management |
| React 18 | UI framework |
| TypeScript | Type safety |
| xterm.js | Terminal rendering (with WebGL addon) |
| CodeMirror 6 | Code editor |
| Zustand | State management |
| Tailwind CSS | Styling |
| Vite | Frontend build tool |
| tauri-plugin-store | Persistent storage |
| tauri-plugin-updater | Auto-update via GitHub Releases |
| discord-rich-presence | Discord RPC integration |
- Node.js 18+
- Rust (latest stable via rustup)
- Platform-specific dependencies:
- Windows: WebView2 (usually pre-installed on Windows 10/11), Visual Studio C++ Build Tools
- macOS:
xcode-select --install - Linux:
sudo apt install libwebkit2gtk-4.1-dev build-essential curl wget file libxdo-dev libssl-dev libayatana-appindicator3-dev librsvg2-dev
git clone https://github.com/yandanp/Connexio.git
cd Connexio
npm install
npm run dev| Command | Description |
|---|---|
npm run dev |
Start Tauri dev mode (hot-reload frontend + Rust backend) |
npm run dev:renderer |
Start Vite dev server only (frontend) |
npm run build |
Build frontend for production |
npm run build:tauri |
Build full Tauri app (installer) |
npm run typecheck |
Type-check all TypeScript |
# Patch release (e.g. 0.5.0 -> 0.5.1)
npm version patch
git push && git push --tags
# Pre-release (dev builds)
npm version prerelease --preid=dev
git push && git push --tagsPushing a v* tag triggers GitHub Actions → multi-platform build & GitHub Release.
Tag patterns for release channels:
v1.0.0— Stable releasev1.0.0-dev.1— Dev pre-releasev1.0.0-alpha.1/v1.0.0-beta.1— Alpha/Beta pre-release
Connexio/
├── AGENTS.md # Written conventions for AI agents & contributors
├── docs/
│ └── STYLEGUIDE.md # Canonical design tokens & utility classes
├── config/ # Tooling & quality gates
│ ├── check-max-lines.mjs # Max-lines ratchet (frontend + Rust)
│ ├── max-lines-baseline.txt # Big-file baseline (numbers only go down)
│ ├── check-feature-imports.mjs# Feature boundary checker
│ └── vitest.config.ts # Test config
├── src/
│ ├── shared/
│ │ └── types.ts # Pure shared types (frontend ↔ Rust)
│ └── renderer/ # React frontend
│ ├── core/ # Kernel — importable by every feature
│ │ ├── api/ # Typed IPC wrappers per domain (window.connexio)
│ │ ├── api-remote/ # Same API shape for remote (mobile/web) mode
│ │ ├── ui/ # Small primitives (ContextMenu, ConfirmDialog, …)
│ │ ├── hooks/ # use-terminal-resize-v2, useDiscordPresence
│ │ ├── stores/ # Cross-cutting stores: settings, theme, notifications
│ │ └── tauri-shim.ts # Picks desktop vs remote API at startup
│ ├── features/ # 1 folder = 1 domain; public API via index.ts only
│ │ ├── terminal/ # Terminal, TerminalLayer, ShellPicker, SearchPanel
│ │ ├── workspace/ # Workspace composition, tab bar, split layout, store
│ │ ├── projects/ # Sidebar, AddProjectModal, projects store
│ │ ├── git/ # SourcePanel, DiffViewer, BranchPicker, CommitBox, …
│ │ ├── ssh/ # SSH manager: hosts, identities, known hosts, SFTP
│ │ ├── remote/ # Remote access: login gate, mobile shell, settings
│ │ ├── tasks/ # TaskPanel + pinned commands
│ │ ├── explorer/ # FileExplorer
│ │ ├── editor/ # CodeEditor + RemoteEditorWrapper
│ │ ├── ai/ # AIChatPanel + provider client & store
│ │ ├── settings/ # SettingsModal + settings tabs
│ │ └── notifications/ # NotificationBell, NotificationToast
│ ├── styles/ # globals.css (design token source)
│ └── App.tsx / main.tsx # Composition root — only place features are joined
├── src-tauri/
│ ├── src/
│ │ ├── main.rs # Tauri app entry point
│ │ ├── lib.rs # Plugin registration & command setup
│ │ └── modules/
│ │ ├── pty/ # PTY process management (portable-pty)
│ │ ├── ssh/ # SSH module folder (connection, sftp, trust, secrets, …)
│ │ ├── remote/ # Remote access server folder (http, websocket, wol, …)
│ │ ├── projects.rs # Project CRUD
│ │ ├── workspace.rs # Workspace state persistence
│ │ ├── session.rs # Session persistence
│ │ ├── settings.rs # App settings + shell detection
│ │ ├── shell.rs # Shell detection & configuration
│ │ ├── git.rs # Git status & operations
│ │ ├── tasks.rs # Task runner (script detection)
│ │ ├── pinned.rs # Pinned commands
│ │ ├── theme.rs # Theme management
│ │ ├── explorer.rs # File system explorer
│ │ ├── clipboard.rs # Native clipboard handling
│ │ ├── notification.rs # Desktop notifications
│ │ ├── discord.rs # Discord Rich Presence
│ │ └── updater.rs # Auto-updater
│ ├── tauri.conf.json # Tauri configuration
│ ├── Cargo.toml # Rust dependencies
│ └── capabilities/ # Tauri permission capabilities
├── assets/ # App icons
├── .github/workflows/ # CI gates + multi-platform release
├── vite.config.ts # Vite configuration
├── tailwind.config.js # Tailwind configuration
└── package.json
| Theme | Style |
|---|---|
| Connexio Dark | Default dark theme with blue accents |
| Connexio Light | Clean light theme |
| Midnight Ocean | Deep blue with teal accents |
Themes apply to both the app UI and terminal colors.
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repo
- Create your feature branch (
git checkout -b feat/amazing-feature) - Commit your changes (
git commit -m 'feat: add amazing feature') - Push to the branch (
git push origin feat/amazing-feature) - Open a Pull Request
| Prefix | Usage |
|---|---|
feat: |
New feature |
fix: |
Bug fix |
refactor: |
Code refactoring |
ci: |
CI/CD changes |
chore: |
Maintenance |
MIT © yandanp
