⚡ OxideTerm

KI-gestützter nativer Betriebsarbeitsbereich für Remote-Server — native App aus reinem Rust
SSH, Telnet, serielle Terminals, RDP/VNC, SFTP, Portweiterleitung und leichtes Editieren in einem nativen Arbeitsbereich.
GPU-gerendert. Kostenlos. Kein Konto nötig.
Kein Electron. Kein gebündeltes WebView. Keine Telemetrie. Kein Abo. BYOK zuerst. Reines Rust-SSH ohne OpenSSL/libssh2.

Version Plattform Lizenz Rust 2024 GPUI

Open Source, lokal orientiert und GPU-gerendert mit GPUI.

English | 简体中文 | 繁體中文 | 日本語 | 한국어 | Français | Deutsch | Español | Italiano | Português | Tiếng Việt

OxideTerm Funktionsübersicht

--- ## Was OxideTerm ist OxideTerm ist ein Open-Source-Arbeitsbereich für SSH und Remote-Betrieb. Terminal, Dateien, Portweiterleitungen, Host-Werkzeuge und Remote-Desktops bleiben in einem gemeinsamen Arbeitsbereich. **Was Sie tun können:** - SSH, Telnet, serielle Verbindungen, RDP/VNC, SFTP, Portweiterleitungen, lokale Shells und leichtes Editieren in einem Arbeitsbereich verwalten - Remote-Arbeit mit Grace-Period-Wiederverbindung über kurze Netzwerkausfälle hinweg aufrechterhalten - OxideSens aktive Sitzungen prüfen und freigegebene Arbeitsbereichsaktionen über Ihren eigenen KI-Anbieter ausführen lassen Verbindungen und Betriebsdaten bleiben unter Ihrer Kontrolle. Für OxideSens verwenden Sie Ihren eigenen KI-Anbieter; ein Konto ist nicht erforderlich. --- ## Warum OxideTerm? | Wenn Ihnen wichtig ist … | OxideTerm bietet Ihnen … | |---|---| | Ein Remote-Knoten, viele Werkzeuge | Terminal, SFTP, Portweiterleitung, RDP/VNC, trzsz, native IDE, Monitoring und OxideSens AI bleiben an denselben Arbeitsbereich gebunden | | Eine Desktop-App ohne Electron oder gebündelte WebView | GPUI zeichnet die Oberfläche direkt auf einer GPU-Fläche, ohne Browser-Laufzeit auszuliefern | | Local-first-Betriebsabläufe | SSH, Telnet, SFTP, Weiterleitung, RDP/VNC, lokale Shell, serielle Terminals und Konfiguration funktionieren ohne Anmeldung | | BYOK-OxideSens-AI statt Plattformguthaben | OxideSens verwendet Ihren OpenAI-, Anthropic-, Gemini-, Ollama- oder OpenAI-kompatiblen Endpunkt mit MCP, RAG, anbieterabhängigen Denkstufen und genehmigten Arbeitsbereichsaktionen | | Stabiles Wiederverbinden | Grace Period prüft die alte Verbindung 30 Sekunden lang, bevor sie ersetzt wird, damit TUI-Anwendungen kurze Netzunterbrechungen überstehen | | Reines Rust-SSH und Schutz von Zugangsdaten | Der SSH-Stack nutzt `russh` + `ring` ohne OpenSSL/libssh2; gespeicherte Zugangsdaten liegen im Betriebssystem-Schlüsselbund und `.oxide`-Pakete verwenden ChaCha20-Poly1305 + Argon2id | --- ## Screenshots Die folgenden Screenshots zeigen Terminal-, Datei-, Editor- und Weiterleitungsabläufe in OxideTerm.
SSH-Terminal + OxideSens AI

SSH-Terminal mit OxideSens AI
SFTP-Dateimanager

SFTP Dual-Pane-Dateimanager mit Transfer-Warteschlange
Integrierte IDE

Integrierter IDE-Modus
Intelligente Portweiterleitung

Intelligente Portweiterleitung mit Auto-Erkennung
--- ## Für Remote-Betrieb entwickelt OxideTerm hält Verbindungen, Dateien, Weiterleitungen, Host-Werkzeuge, Automatisierung und KI-Kontext in einem Rust-Arbeitsbereich. Werkzeuge teilen dieselbe Serveridentität und denselben Sitzungslebenszyklus. | Aspekt | Ansatz mit gebündeltem Browser | OxideTerm | |---|---|---| | **Rendering** | Browser-Engine und Web-Layout | GPUI auf einer GPU-Fläche | | **Terminal-Datenfluss** | WebSocket → JS-Ereignisschleife → xterm.js | Rust-Eingabe → `TerminalState`-Änderung → GPUI-Rendern | | **Verbindungslebenszyklus** | Auf Frontend- und Backend-Schichten verteilt | Eine In-Process-Pipeline für Verbindung und Wiederverbindung | | **KI-Kontext** | Über eine Anwendungsbrücke kopiert | Mit Nutzerfreigabe aus dem aktiven Arbeitsbereich aufgebaut | | **Plugin-Laufzeit** | Browser-Skripting-Umgebung | Manifest-only-, begrenzte WASM- und vertrauensabhängige Prozesspfade | | **CLI** | Erfordert eine laufende Desktop-App | Eigenständiges Programm mit direkter Crate-Verknüpfung | | **Runtime-Grenze** | Desktop-Wrapper plus Browser-Laufzeit | Nativer Prozess ohne gebündelte Browser-Laufzeit | --- ## Funktionen | Kategorie | Funktionen | |---|---| | **Terminal und Verbindungen** | Lokale Shells, SSH, Telnet, seriell, geteilte Bereiche, freier Eingabemodus, erweiterte Befehlsübertragung an mehrere Ziele, Multi-Hop-Routen und stabile Wiederverbindung | | **Dateien und Remote-Bearbeitung** | SFTP, Übertragungswarteschlangen, Lesezeichen, sichere Schreibvorgänge, Projektbäume und Mehrfachbearbeitung | | **Weiterleitung und Netzwerk** | Lokale, entfernte und dynamische SOCKS5-Weiterleitung, gespeicherte Regeln und Socket-Debugging | | **Host-Betrieb und Remote-Desktop** | Überwachung, Prozesse, Dienste, Logs, Ports, Aufgaben, Datenträger, Pakete, Container, tmux, RDP und VNC | | **OxideSens und Automatisierung** | Eigene KI-Anbieter, MCP, lokales RAG, Agent Skills, freigegebene Aktionen, verschlüsselte Cloud-Synchronisierung und CLI | | **Erweiterungen und Personalisierung** | Manifest-only-, WASM- und Prozess-Plugins, eigene Tabs, Schnellbefehle, Themes, Hintergrundbilder, Tastenkürzel und 11 Sprachen | ---
OxideSens öffnet ein Terminal in OxideTerm *OxideSens folgt einer Nutzeranfrage und öffnet ein Terminal in OxideTerm.*
--- ## Architektur OxideTerm vereint Terminal, SSH, Telnet, RDP, VNC, SFTP, Forwarding, IDE, KI, Plugins und CLI in einer Rust-Architektur. Die technischen Details folgen unten.
Architektur, SSH-Internals, GPUI-Shell, Reconnect, KI, Plugins und mehr
### Architektur — Kern in einem Prozess, keine WebView-Bridge ```text GPUI Render Loop WorkspaceApp / Tab surfaces / GPUI views │ in-process Arc<> / async Domain Crates NodeRouter → SshConnectionRegistry TerminalState ← SSH PTY channel SftpSession / ForwardingRuntime / IdeWorkspace Ai/ACP Entities / CloudSync / Plugin Runtimes ``` Zwischen UI und SSH/Terminal-Backend gibt es keine Serialisierungsgrenze. Terminal-Bytes mutieren `TerminalState` direkt; GPUI liest den State und erzeugt GPU draw calls. ### Reines Rust-SSH — russh (ring) - **Kein OpenSSL/libssh2 im SSH-Stack** — die SSH-Kryptografie wird von `ring` bereitgestellt - Vollständiges SSH2: Key Exchange, Channels, SFTP-Subsystem, Portweiterleitung - ChaCha20-Poly1305 / AES-GCM, Ed25519/RSA/ECDSA-Schlüssel - SSH Agent unter Unix (`SSH_AUTH_SOCK`) und Windows (`\\.\pipe\openssh-ssh-agent`) - Mehrstufiges ProxyJump mit unabhängiger Authentifizierung pro Hop ### Smart Reconnect mit Grace Period 1. SSH-keepalive timeout erkennen, ohne JavaScript timer throttling 2. Terminal-Panes, SFTP-Transfers, Forwards und IDE-Dateien snapshotten 3. Die alte Verbindung 30 Sekunden lang während der Grace Period prüfen, damit TUI-Apps Netzwerkwechsel überstehen können 4. Wenn die Wiederherstellung scheitert: neu verbinden, Forwards wiederherstellen, Transfers je nach Strategie fortsetzen oder neu versuchen und IDE-Dateien erneut öffnen Pipeline: `queued → snapshot → grace-period → ssh-connect → await-terminal → restore-forwards → retry-or-resume-transfers → restore-ide → verify → done` ### SSH-Verbindungspool und Node-Routing - Im Standardmodus kann eine physische SSH-Verbindung Terminal-Panes, SFTP, Port-Forwards und IDE-Arbeit bedienen; ein Terminal kann bei Bedarf eine eigene Verbindung verwenden - Jede Verbindung durchläuft `connecting → active → idle → link_down → reconnecting` - UI-Kommandos adressieren `nodeId`; `NodeRouter` löst die aktive `connectionId` atomar auf - `NodeRuntimeStore` hält den Node-Laufzeitstatus und exportiert Topologie-Snapshots; Workspace-Helfer schreiben diese Snapshots in `session_tree.json`, während Live-Handles beim Start neu aufgebaut werden - Jump-Host-Ausfälle propagieren `link_down` auf nachgelagerte Nodes ### OxideSens KI OxideSens bleibt BYOK zuerst, mit Kontextaufbau direkt im Prozess: - Anbieter: OpenAI, Anthropic, Gemini, Ollama oder jeder OpenAI-kompatible Endpunkt - MCP: stdio- und SSE-Transports, Tool Discovery und Invocation - RAG: BM25-Volltext, HNSW-Vektorindex, Reciprocal Rank Fusion, CJK-Bigram-Tokenizer - Nachrichten an Anbieter durchlaufen eine Redigierung für Zugangsdatenmuster; Arbeitsbereichskontext und Aktionen bleiben unter Nutzerkontrolle - API-Schlüssel liegen im Systemschlüsselbund und werden bewusst aus strukturierten Logs und Nachrichten des Desktop-Kerns ausgeschlossen ### GPUI Desktop-Shell Die UI wird direkt mit GPUI gezeichnet, ohne DOM/CSS/JavaScript-Rendering-Pipeline: - Workspace-Tab-Typen: lokale, SSH-, Telnet-, serielle, RDP-, VNC-, SFTP, IDE, Forwards, Settings, Plugins, Topology und mehr - Binärer Pane-Tree mit ziehbaren Dividern, bis zu vier Panes pro Terminal-Tab - Command Palette, globale Tastenkürzel und Sidebars bestehen aus GPUI-Primitives - Immediate-mode Rendering reagiert auf Rust-State ohne Serialisierungs-Roundtrip ### Terminalzustand und Rendering Terminal-Rendering wird zuerst als Rust-State modelliert und anschließend von GPUI gezeichnet: - PTY-Ausgabe landet in `TerminalState`; Scrollback, Cursor, Auswahl, Marks und Suchzustand bleiben in Rust - Die Rendering Policy kann zwischen Boost, Normal und Idle wechseln, ohne auf einen Browser Event Loop zu warten - Sixel- und Kitty-Grafiken werden als terminal-eigene Assets verfolgt, nicht als DOM-Nodes oder Canvas-Overlays - Split Panes teilen dasselbe Arbeitsbereichsstatus-Modell, sodass Tab-Restore und Reconnect die Terminal-Topologie gemeinsam snapshotten können ### SFTP- und IDE-Workspace Remote-Dateien sind Teil desselben Node-Workspace und keine getrennte Nebenfunktion: - SFTP-Sessions werden über `NodeRouter` mit einer Verbindungsgeneration aufgelöst; Reconnect kann eine gültige Sitzung neu erwerben, aber eine Operation der alten Generation wird nie still durch eine neue Verbindung ersetzt - Transfer Queues verfolgen Richtung, Fortschritt, Retry-Zustand und Speed Limits unabhängig von den sichtbaren Datei-Panes - IDE-Tabs halten Dirty Buffers, Remote-Pfade, Conflict State und Restore-Metadaten zusammen - Remote Writes nutzen staged/atomic behavior, wo das Backend es unterstützt, damit normale Edit-Flows keine Partial Writes sehen ### Plugins, CLI und Diagnosen Erweiterungen und Support-Flächen folgen klaren Rust-eigenen Grenzen: - Plugins unterstützen Manifest-only-, WASM- und normale Prozesspfade. WASM nutzt die integrierte Wasmtime/WASI-Laufzeit; Prozess-Plugins sind lokale Prozesse ohne Betriebssystem-Sandbox. - Die CLI linkt direkt gegen Domain Crates für doctor, settings, connections, forwards, portable bundles, backups und reports - Diagnosen bevorzugen Zähler, Pfade, Feature-Flags und redigierte Hinweise statt roher payloads mit Geheimnisse - Mutierende CLI-Flows nutzen dry-run plans, `--yes` guards und rollback backups, wo anwendbar ### Portweiterleitung — Lock-Free I/O - Local `-L`, Remote `-R`, Dynamic SOCKS5 `-D` - Ein einzelner `ssh_io`-Task besitzt jeden SSH Channel und vermeidet `Arc>` - Reconnect Auto-Restore, Death Reporting und Idle Timeout ### trzsz — In-Band-Dateitransfer trzsz nutzt weiterhin den Terminal-Stream, ohne zusätzlichen Port oder Remote-Agent: - Upload/download über den bestehenden Terminal-Stream - Funktioniert durch ProxyJump-Ketten - Native Dateiauswahl vermeidet Browser-Speichergrenzen - Bidirektional, Verzeichnis-Support, konfigurierbare Limits ### `.oxide` verschlüsselter Export - **ChaCha20-Poly1305 AEAD** authenticated encryption - **Argon2id KDF**: 256 MB memory cost, 4 iterations, erhöht die Kosten für GPU-Bruteforce - Enthält connections, forwards, settings, quick commands, plugin settings und portable secrets
--- ## Aus dem Quellcode starten **Voraussetzungen:** Rust-Toolchain (Edition 2024) und eine Desktop-Umgebung, die GPUI ausführen kann. ```sh cargo run OXIDETERM_RENDER_PROFILE=compatibility cargo run ./scripts/build/build-cli.sh ./scripts/build/build-agent.sh ``` ## CLI Die Headless-CLI `oxideterm` funktioniert ohne gestartete App und eignet sich für Automatisierung, CI und Diagnosen. ```sh cargo run -p oxideterm-cli -- doctor --strict cargo run -p oxideterm-cli -- settings validate --strict --json cargo run -p oxideterm-cli -- connections search prod cargo run -p oxideterm-cli -- forwards list --format json cargo run -p oxideterm-cli -- cloud-sync push --dry-run --json cargo run -p oxideterm-cli -- oxide export ./profile.oxide --connection prod --password-stdin cargo run -p oxideterm-cli -- report --bundle ./oxideterm-report.zip cargo run -p oxideterm-cli -- completion install zsh --force ``` ## Technik | Ebene | Technologie | Hinweise | |---|---|---| | Benutzeroberfläche | GPUI (Zed) | GPU-beschleunigter Immediate Mode, vollständig in Rust | | Laufzeit | Tokio + DashMap | Asynchrone Laufzeit und nebenläufige Maps | | SSH | russh (`ring`) | Kein OpenSSL/libssh2 im SSH-Stack; SSH Agent | | Terminal | portable-pty + alacritty_terminal | Lokale PTYs, Terminalemulation, Sixel- und Kitty-Grafik | | Plugins | Wasmtime/WASI und Prozesspfade | Manifest-only, kontrollierte WASM-Host-Aufrufe sowie ausdrücklich vertrauensbedürftige lokale Prozesse | | KI und Suche | SSE + BM25 + HNSW | Anbieter-Streaming, CJK-Bigramme und RRF-Fusion | | Editor | tree-sitter (Syntax), eigener Puffer | Mehrsprachig, SFTP-gestützt | | Verschlüsselung | ChaCha20-Poly1305 + Argon2id | AEAD + speicherintensive KDF (256 MB) | | i18n | oxideterm-i18n | Eingebauter Loader, 11 ausgelieferte Sprachen | ## Sicherheit | Thema | Umsetzung | |---|---| | Gespeicherte Zugangsdaten | macOS Keychain / Windows Credential Manager / libsecret | | Geheimnisse im Speicher | Geheimnistragende Typen und temporäre Puffer verwenden an unterstützten Besitzgrenzen `zeroize` / `Zeroizing` | | Diagnosen | Support-Ausgaben bevorzugen strukturierte Metadaten und redigierte Hinweise statt geheimnistragender Nutzdaten | | KI-Kontext | Nachrichten an Anbieter durchlaufen eine Redigierung für Zugangsdatenmuster; Workspace-Kontext und Aktionen bleiben unter Nutzerkontrolle | | `.oxide` | ChaCha20-Poly1305 + Argon2id | | CLI-Schreibzugriffe | dry-run plans, `--yes` guards, rollback backups | | Host-Schlüssel | TOFU mit `~/.ssh/known_hosts`, unerwartete Änderungen werden abgelehnt | | Plugins | Manifest-only, kontrollierte WASM-Host-API und vertrauensabhängige lokale Prozesse | ## Hinweis zur rechtmäßigen Nutzung OxideTerm ist unter GPL-3.0-only ohne zusätzliche Lizenzbeschränkungen lizenziert. Greifen Sie bei der Nutzung nur auf Systeme, Netzwerke und Geräte zu, die Ihnen gehören oder für die Sie eine ausdrückliche Zugriffsberechtigung besitzen, und beachten Sie das geltende Recht. Verwenden Sie OxideTerm nicht für unbefugte Zugriffe, Dienststörungen oder zur Umgehung von Zugriffskontrollen. ## Beiträge Beiträge zu Code, Dokumentation, Übersetzungen, Plugins, Tests und Fehlerberichten sind willkommen. Größere Änderungen oder klar begrenzte Korrekturen sollten zuerst in einem Issue abgestimmt werden. ```sh cargo run -p oxideterm-cli -- report --bundle ./oxideterm-report.zip ``` --- ## Support und Wartung Reproduzierbare Bug Reports und Regressionen mit redigierten Diagnosen werden priorisiert. Feature Requests werden nach Umfang, Sicherheit und Ausrichtung auf OxideTerms Remote-Server-Workspace-Richtung bewertet.

GitHub stars

Wenn OxideTerm Ihrem Workflow hilft, machen GitHub Star, Reproduktion, Übersetzungskorrektur oder Plugin das Projekt leichter weiterzuführen. --- ## Lizenz **GPL-3.0-only**. Ausführliche Hinweise zu Drittanbietern stehen in [`THIRD_PARTY_NOTICES.md`](../../THIRD_PARTY_NOTICES.md); zusätzliche Hinweise enthält [`NOTICE`](../../NOTICE). ## Danksagung Danke an `russh`, `GPUI`, `alacritty_terminal`, `portable-pty`, `wasmtime` und `tree-sitter`.