{"id":51135667,"url":"https://github.com/demonjr/xconsole","last_synced_at":"2026-06-25T18:00:26.999Z","repository":{"id":367350747,"uuid":"1279294985","full_name":"DemOnJR/xConsole","owner":"DemOnJR","description":"All your servers, on one canvas. A Tauri 2 + React 19 desktop app: a zoomable multi-VPS SSH terminal canvas on a pure-Rust stack (russh), with remote SFTP editing and a built-in AI assistant.","archived":false,"fork":false,"pushed_at":"2026-06-25T16:46:36.000Z","size":970,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-06-25T18:00:14.375Z","etag":null,"topics":["ai-assistant","desktop-app","devops","mcp","ollama","react","react-flow","russh","rust","sftp","ssh","ssh-client","sysadmin","tauri","terminal","terminal-emulator","typescript","vps","xterm-js"],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DemOnJR.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-24T14:53:08.000Z","updated_at":"2026-06-25T16:44:40.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/DemOnJR/xConsole","commit_stats":null,"previous_names":["demonjr/xconsole"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/DemOnJR/xConsole","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DemOnJR%2FxConsole","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DemOnJR%2FxConsole/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DemOnJR%2FxConsole/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DemOnJR%2FxConsole/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DemOnJR","download_url":"https://codeload.github.com/DemOnJR/xConsole/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DemOnJR%2FxConsole/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34786227,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-25T02:00:05.521Z","response_time":101,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-assistant","desktop-app","devops","mcp","ollama","react","react-flow","russh","rust","sftp","ssh","ssh-client","sysadmin","tauri","terminal","terminal-emulator","typescript","vps","xterm-js"],"created_at":"2026-06-25T18:00:17.537Z","updated_at":"2026-06-25T18:00:26.989Z","avatar_url":"https://github.com/DemOnJR.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# xConsole\n\n**All your servers, on one canvas.**\n\nxConsole is a desktop app that puts a live SSH terminal for every one of your\nservers onto a single zoomable, pannable canvas — switch between them instantly,\nbroadcast a command to many at once, and let a built-in AI assistant help you run\nand manage them.\n\nBuilt with **Tauri 2** (Rust) · **React 19** · **xterm.js** · **React Flow**, on a\npure-Rust SSH stack (**russh**).\n\n\u003c/div\u003e\n\n---\n\n\u003e ## 🔒 Important: xConsole is a *local* app — don't run it on a public server\n\u003e\n\u003e xConsole is meant to run **on your own computer**, in **local mode only**. **Do not\n\u003e deploy it on a public / internet-facing server or expose it on a public IP address.**\n\u003e\n\u003e Why: xConsole holds the keys to your infrastructure — your **SSH credentials** and\n\u003e **cloud/API keys** (kept in your operating system's keychain) — and its built-in AI\n\u003e assistant can **run shell commands on your machine and on your servers**. It is\n\u003e designed for a single, trusted machine that only you control.\n\u003e\n\u003e It never opens a port to the outside world: its only background services (the local\n\u003e AI helpers) listen on `127.0.0.1` (localhost) and are unreachable from the network.\n\u003e So running it on a public box gains you nothing and risks exposing your credentials.\n\u003e **Keep it on your desktop. 👍**\n\n---\n\n## ✨ What it does\n\n- **A canvas of terminals** — each server is a draggable, resizable terminal on an\n  infinite canvas with zoom, pan, and a minimap.\n- **Quick connect** — add servers from a searchable sidebar; click one to drop a\n  connected terminal onto the canvas.\n- **Broadcast** — type one command and send it to every selected terminal at once.\n- **Workspaces** — save and restore named layouts (which servers, where, and the view).\n- **Layout modes** — Freeform, Snap-to-grid, and one-click Tile auto-arrange.\n- **Remote file editing** — right-click a file in the SFTP browser → *Edit* to open it\n  in an in-app editor; `Ctrl/⌘+S` saves it straight back over SFTP.\n- **Built-in AI assistant** — ask it to check, fix, or set things up across your\n  servers. Works with local models (Ollama / llama.cpp) or cloud providers.\n- **Focus mode** — double-click a terminal header to zoom in; `Ctrl+Tab` cycles.\n\n## 🚀 Install (the easy way)\n\nxConsole compiles itself from source on your PC, so you always run a build you can\ninspect — and there's a one-click installer that handles everything for you.\n\n1. **[➡️ Download the installer](https://github.com/DemOnJR/xConsole/releases/latest)**\n   — grab `xConsole-Setup-windows-x64.zip` from the latest release.\n2. **Right-click the zip → Extract All.**\n3. **Double-click `xConsole-Setup.exe`** and press **Install**.\n\nThat's it. The installer downloads the build tools it needs and compiles xConsole on\nyour machine (about **10–20 minutes** the first time). It needs an **internet\nconnection**, but **no administrator rights** — everything installs neatly under your\nown user folder.\n\n\u003e **Updating later** is just as easy: xConsole tells you when there's a new version and\n\u003e updates itself in one click. Your chats, workspaces, settings, and saved keys are\n\u003e always kept safe across updates.\n\n*(Windows is supported today. macOS/Linux builds are on the roadmap.)*\n\n## 🛠️ Build from source (for developers)\n\nPrefer to build it yourself? You'll need:\n\n- **Node.js 22+** and **pnpm** (`corepack enable pnpm`)\n- **Rust** via rustup. xConsole links with the **GNU** toolchain + MinGW gcc, so you\n  *don't* need Visual Studio:\n\n```powershell\nrustup toolchain install stable-x86_64-pc-windows-gnu\nwinget install -e --id BrechtSanders.WinLibs.POSIX.UCRT --scope user\n# In the src-tauri folder:\nrustup override set stable-x86_64-pc-windows-gnu\n```\n\nMake sure the MinGW `bin` directory and `~/.cargo/bin` are on your `PATH`. Then:\n\n```powershell\npnpm install      # respects a 7-day dependency cooldown (see Security)\npnpm tauri dev    # run with hot reload\npnpm tauri build  # produce a release build\n```\n\n## 🛡️ Is it safe?\n\nYes — and because xConsole is **open source**, you don't have to take our word for it:\nthe security doesn't rely on hiding the code. Highlights:\n\n- **Your secrets stay in the OS keychain.** SSH passwords/passphrases and API keys live\n  in Windows Credential Manager (or the macOS/Linux equivalent) — **never** in the app's\n  database — and key material is wiped from memory right after it's used.\n- **Optional app lock (encryption at rest).** Turn on a master password and your local\n  database is encrypted with **AES-256-GCM**; the key is derived with **PBKDF2** and can\n  be remembered on your trusted device via the OS keychain. There's no backdoor and no\n  recovery — a stolen database file is just noise without your password.\n- **Host-key verification (TOFU)** protects your SSH sessions against man-in-the-middle.\n- **Supply-chain hardening** — a **7-day cooldown** on every dependency (npm *and* Cargo)\n  plus advisory/license audits in CI, so a freshly-published malicious package can't\n  sneak in.\n- **Local-only by design** (see the note at the top).\n\nFull details are in **[SECURITY.md](SECURITY.md)**. Found a vulnerability? Please report\nit privately to the maintainers before disclosing it publicly.\n\n## 🧱 Project layout\n\n```\nsrc/                       React UI\n  components/              Sidebar, CanvasFlow, TerminalNode, Toolbar, AgentPanel…\n  stores/                 Zustand state: vps, canvas, session, workspace, agent, lock\n  lib/tauri.ts            Typed IPC + event bridge\nsrc-tauri/src/\n  ssh/                    russh client, session manager, host-key TOFU\n  ai/                     the built-in agent (context, tools, providers, voice)\n  storage/                SQLite + at-rest encryption\n  crypto.rs / lock.rs     master-password key wrapping + the lock manifest\n  secrets.rs              OS keychain (keyring) + zeroize\n  mcp/                    local MCP server (stdio)\n  commands/               Tauri command handlers\ninstaller/                the one-click \"clone + compile on your PC\" setup app\n```\n\n## 📄 License\n\nxConsole is released under the **[MIT License](LICENSE)**.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdemonjr%2Fxconsole","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdemonjr%2Fxconsole","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdemonjr%2Fxconsole/lists"}