README.de.md
June 1, 2026 · View on GitHub
⚡ OxideTerm
Ein lokales SSH-Workspace für Menschen, die im Terminal leben.
Einmal mit einer entfernten Maschine verbinden und Shell, Dateien, Ports, Transfers, leichtgewichtigen Editor und BYOK-KI an einem Ort nutzen.
Native Tauri-App · reines Rust-SSH · kein Konto für zentrale SSH-Workflows erforderlich
Zero Electron. Zero OpenSSL. Zero Telemetrie. Zero Subscription. BYOK-first. Reines Rust-SSH.
🌐 oxideterm.app — Documentation & website
English | 简体中文 | 繁體中文 | 日本語 | 한국어 | Français | Deutsch | Español | Italiano | Português | Tiếng Việt
Was Sie damit tun können
- SSH-Terminals, SFTP, Portweiterleitungen, In-Terminal-Transfers und lokale Shells nebeneinander verwalten
- Mit Grace-Period-Reconnect trotz kurzer Netzwerkaussetzer weiterarbeiten
- Den eigenen KI-Anbieter nutzen, um Live-Sitzungen zu prüfen und freigegebene Workspace-Aktionen auszuführen
Warum OxideTerm?
| Wenn Ihnen wichtig ist... | OxideTerm bietet... |
|---|---|
| Ein Remote-Node, viele Werkzeuge | Terminal, SFTP, Portweiterleitung, trzsz, Mini-IDE, Monitoring und KI-Kontext bleiben am selben SSH-Workspace |
| Local-first SSH-Workflows | SSH, SFTP, Forwarding, lokale Shell und Konfiguration funktionieren ohne Registrierung; Cloud Sync ist optional per offiziellem Plugin |
| BYOK-KI statt Plattform-Credits | OxideSens nutzt Ihren OpenAI/Ollama/DeepSeek/OpenAI-kompatiblen Endpoint mit MCP- und RAG-Unterstützung |
| Stabile Wiederverbindung | Grace Period prüft die alte Verbindung 30 s lang, bevor sie ersetzt wird, damit vim/htop/yazi kurze Aussetzer überstehen können |
| Native App in reinem Rust | Tauri-2.0-App, russh 0.59 mit ring, kein Electron, keine OpenSSL/libssh2-Abhängigkeit |
| Sichere Zugangsdaten | Passwörter und API-Schlüssel bleiben im OS-Keychain, Verbindungsmetadaten werden lokal versiegelt, .oxide nutzt ChaCha20-Poly1305 + Argon2id |
Was es ist / nicht ist
OxideTerm konzentriert sich auf local-first SSH-Workflows. Es richtet sich an Nutzer, die Terminal, Dateien, Ports, Transfers, leichtgewichtiges Editieren und KI-Kontext um ihre eigenen Maschinen und Remote-Nodes herum halten wollen.
Es ist keine gehostete Cloud-Agent-Plattform und kein Projekt, das nur Terminal-Rendering-Benchmarks verkauft. Die Richtung ist enger: Remote-Arbeit soll sich wie ein lokales Workspace anfühlen, ohne OxideTerm-Konto.
Screenshots
SSH-Terminal + OxideSens AI![]() |
SFTP-Dateimanager![]() |
Integrierte IDE (CodeMirror 6)![]() |
Intelligente Portweiterleitung![]() |
Download
Laden Sie die neueste Version von GitHub Releases herunter.
Funktionsübersicht
| Kategorie | Funktionen |
|---|---|
| Terminal | Lokales PTY (zsh/bash/fish/pwsh/WSL2), SSH Remote, lokale serielle Terminals, geteilte Fenster, Broadcast-Eingabe, Sitzungsaufzeichnung/-wiedergabe (asciicast v2), WebGL-Rendering, 30+ Designs + benutzerdefinierter Editor, Befehlspalette (⌘K), Zen-Modus, trzsz In-Band-Dateiübertragung |
| SSH & Authentifizierung | Verbindungspool & Multiplexing, ProxyJump (unbegrenzte Hops) mit Topologiegraph, Auto-Reconnect mit Grace Period, Agent-Weiterleitung. Auth: Passwort, SSH-Schlüssel (RSA/Ed25519/ECDSA), SSH Agent, Zertifikate, Keyboard-Interactive 2FA, Known Hosts TOFU |
| SFTP | Dual-Pane-Browser, Drag-and-Drop, intelligente Vorschau (Bilder/Video/Audio/Code/PDF/Hex/Schriftarten), Transfer-Warteschlange mit Fortschritt & ETA, Lesezeichen, Archivextraktion |
| IDE-Modus | CodeMirror 6 mit 30+ Sprachen, Dateibaum + Git-Status, Multi-Tab, Konfliktlösung, integriertes Terminal. Optionaler Remote-Agent für Linux (9 zusätzliche Architekturen) |
| Portweiterleitung | Lokal (-L), Remote (-R), dynamisches SOCKS5 (-D), lock-freie Message-Passing-I/O, automatische Wiederherstellung bei Reconnect, Ausfallberichterstattung, Leerlauf-Timeout |
| KI (OxideSens) | Zielorientierter Assistent für gespeicherte Verbindungen, Live-SSH-Sitzungen, Terminal-Buffer, SFTP-Pfade, Einstellungen und Wissensdatenbank-Einträge; kann Remote-Ausgaben diagnostizieren, genehmigte Befehle ausführen, Dateien prüfen und Fehler erklären, ohne ein OxideTerm-Konto zu benötigen |
| Plugins | Laufzeit-ESM-Laden, 18 API-Namensräume, 24 UI-Kit-Komponenten, eingefrorene API + Proxy-ACL, Circuit Breaker, automatische Deaktivierung bei Fehlern |
| CLI | oxt-Companion: JSON-RPC 2.0 über Unix Socket / Named Pipe, status/health/list/forward/config/connect/focus/attach/SFTP/import/AI, menschenlesbare + JSON-Ausgabe |
| Sicherheit | .oxide-verschlüsselter Export (ChaCha20-Poly1305 + Argon2id 256 MB), lokal verschlüsselte Konfiguration im Ruhezustand, Betriebssystem-Schlüsselbund, Touch ID (macOS), portabler verschlüsselter Schlüsselspeicher, Host-Key-TOFU, zeroize-Speicherbereinigung |
| i18n | 11 Sprachen: EN, 简体中文, 繁體中文, 日本語, 한국어, FR, DE, ES, IT, PT-BR, VI |
Unter der Haube
OxideTerm bleibt an der Oberfläche local-first, ist intern aber für intensive SSH-Workflows gebaut. Die vollständigen Implementierungsdetails bleiben unten erhalten.
Architektur, SSH-Internals, Reconnect, KI, Forwarding, Plugins und mehr
Architektur — Dual-Plane-Kommunikation
OxideTerm trennt Terminaldaten von Steuerbefehlen in zwei unabhängige Ebenen:
┌─────────────────────────────────────┐
│ Frontend (React 19) │
│ xterm.js 6 (WebGL) + 19 stores │
└──────────┬──────────────┬───────────┘
│ Tauri IPC │ WebSocket (binary)
│ (JSON) │ per-session port
┌──────────▼──────────────▼───────────┐
│ Backend (Rust) │
│ NodeRouter → SshConnectionRegistry │
│ Wire Protocol v1 │
│ [Type:1][Length:4][Payload:n] │
└─────────────────────────────────────┘
- Datenebene (WebSocket): Jede SSH-Sitzung erhält ihren eigenen WebSocket-Port. Terminal-Bytes fließen als Binärframes mit Type-Length-Payload-Header — keine JSON-Serialisierung, kein Base64-Encoding, null Overhead auf dem kritischen Pfad.
- Steuerungsebene (Tauri IPC): Verbindungsverwaltung, SFTP-Operationen, Weiterleitungen, Konfiguration — strukturiertes JSON, aber abseits des kritischen Pfads.
- Knoten-basierte Adressierung: Das Frontend berührt niemals
sessionIdoderconnectionId. Alles wird übernodeIdadressiert, serverseitig atomar vomNodeRouteraufgelöst. SSH-Reconnect ändert die zugrunde liegendeconnectionId— aber SFTP, IDE und Weiterleitungen sind davon völlig unberührt.
🔩 Reines Rust-SSH — russh 0.59
Der gesamte SSH-Stack ist russh 0.59, kompiliert gegen das ring-Crypto-Backend:
- Null C/OpenSSL-Abhängigkeiten — der gesamte Crypto-Stack ist Rust. Keine „Welche OpenSSL-Version?"-Debugging-Sessions mehr.
- Vollständiges SSH2-Protokoll: Schlüsselaustausch, Kanäle, SFTP-Subsystem, Portweiterleitung
- ChaCha20-Poly1305 und AES-GCM Cipher Suites, Ed25519/RSA/ECDSA-Schlüssel
- Benutzerdefinierter
AgentSigner: kapselt den System-SSH-Agent und implementiert dasSigner-Trait von russh, löst RPITIT-Send-Bound-Probleme durch Klonen von&AgentIdentityzu einem eigenen Wert vor dem.await
pub struct AgentSigner { /* wraps system SSH Agent */ }
impl Signer for AgentSigner { /* challenge-response via Agent IPC */ }
- Plattformunterstützung: Unix (
SSH_AUTH_SOCK), Windows (\\.\pipe\openssh-ssh-agent) - Proxy-Ketten: Jeder Hop verwendet unabhängig Agent-Authentifizierung
- Reconnect:
AuthMethod::Agentwird automatisch wiederholt
🔄 Intelligenter Reconnect mit Grace Period
Die meisten SSH-Clients beenden alles bei einer Unterbrechung und starten neu. OxideTerms Reconnect-Orchestrator verfolgt einen grundlegend anderen Ansatz:
- Erkennung des WebSocket-Heartbeat-Timeouts (300 s, kalibriert für macOS App Nap und JS-Timer-Throttling)
- Snapshot des vollständigen Zustands: Terminalfenster, laufende SFTP-Transfers, aktive Portweiterleitungen, geöffnete IDE-Dateien
- Intelligente Prüfung:
visibilitychange+online-Events lösen proaktives SSH-Keepalive aus (~2 s Erkennung gegenüber 15–30 s passivem Timeout) - Grace Period (30 s): prüft die alte SSH-Verbindung per Keepalive — falls sie sich erholt (z. B. WLAN-Accesspoint-Wechsel), überleben Ihre TUI-Apps (vim, htop, yazi) vollständig unberührt
- Falls die Wiederherstellung fehlschlägt → neue SSH-Verbindung → automatische Wiederherstellung der Weiterleitungen → Wiederaufnahme der SFTP-Transfers → Wiedereröffnung der IDE-Dateien
Pipeline: queued → snapshot → grace-period → ssh-connect → await-terminal → restore-forwards → resume-transfers → restore-ide → verify → done
Die gesamte Logik läuft über einen dedizierten ReconnectOrchestratorStore — kein Reconnect-Code verstreut in Hooks oder Komponenten.
🛡️ SSH-Verbindungspool
Referenzgezählte SshConnectionRegistry mit DashMap für lock-freien nebenläufigen Zugriff:
- Eine Verbindung, viele Konsumenten: Terminal, SFTP, Portweiterleitungen und IDE teilen sich eine einzige physische SSH-Verbindung — keine redundanten TCP-Handshakes
- Zustandsmaschine pro Verbindung:
connecting → active → idle → link_down → reconnecting - Lebenszyklus-Management: konfigurierbares Leerlauf-Timeout (5 Min. / 15 Min. / 30 Min. / 1 Std. / nie), 15 s Keepalive-Intervall, Heartbeat-Fehlererkennung
- WsBridge-Heartbeat: 30 s Intervall, 5 Min. Timeout — toleriert macOS App Nap und Browser-JS-Throttling
- Kaskadenpropagation: Ausfall des Jump-Hosts → alle nachgelagerten Knoten automatisch als
link_downmarkiert mit Statussynchronisation - Leerlauf-Trennung: sendet
connection_status_changedan das Frontend (nicht nur internesnode:state), verhindert UI-Desynchronisation
🤖 OxideSens AI
Datenschutzorientierter KI-Assistent mit zwei Interaktionsmodi:
- Inline-Panel (
⌘I): schnelle Terminalbefehle, Ausgabe per Bracketed Paste eingefügt - Seitenleisten-Chat: persistente Konversationen mit vollständigem Verlauf
- Zielorientierter Workspace-Kontext: sieht gespeicherte Verbindungen, Live-SSH-Sitzungen, Terminal-Buffer, SFTP-Pfade, Einstellungen und Wissensdatenbank-Einträge als Workspace-Ziele
- Genehmigte Aktionen: kann Remote-Ausgaben diagnostizieren, genehmigte Befehle ausführen, Dateien prüfen und Fehler erklären, ohne ein OxideTerm-Konto zu benötigen
- MCP-Unterstützung: externe Model Context Protocol-Server (stdio & SSE) für Drittanbieter-Werkzeugintegration verbinden
- RAG-Wissensdatenbank (v0.20): Importieren Sie Markdown/TXT-Dokumente in bereichsbezogene Sammlungen (global oder pro Verbindung). Hybridsuche fusioniert BM25-Schlüsselwortindex + Vektor-Kosinusähnlichkeit über Reciprocal Rank Fusion. Markdown-bewusstes Chunking erhält die Überschriftenhierarchie. CJK-Bigramm-Tokenizer für Chinesisch/Japanisch/Koreanisch.
- Anbieter: OpenAI, Ollama, DeepSeek, OneAPI oder jeder
/v1/chat/completions-Endpunkt - Sicherheit: API-Schlüssel im Betriebssystem-Schlüsselbund gespeichert; unter macOS wird der Schlüsselzugriff durch Touch ID über
LAContextgeschützt — keine Entitlements oder Code-Signierung erforderlich, nach der ersten Authentifizierung pro Sitzung zwischengespeichert
Portweiterleitung — Lock-freie I/O
Vollständige lokale (-L), Remote- (-R) und dynamische SOCKS5-Weiterleitung (-D):
- Message-Passing-Architektur: SSH Channel wird von einer einzelnen
ssh_io-Task gehalten — keinArc<Mutex<Channel>>, eliminiert Mutex-Contention vollständig - Ausfallberichterstattung: Weiterleitungs-Tasks melden aktiv den Beendigungsgrund (SSH-Trennung, Remote-Port-Schließung, Timeout) für klare Diagnose
- Automatische Wiederherstellung:
Suspended-Weiterleitungen werden bei Reconnect automatisch fortgesetzt, ohne Benutzereingriff - Leerlauf-Timeout:
FORWARD_IDLE_TIMEOUT(300 s) verhindert die Ansammlung von Zombie-Verbindungen
📦 trzsz — In-Band-Dateiübertragung
Dateien direkt über die SSH-Terminalsitzung hoch- und herunterladen — ohne SFTP-Verbindung:
- In-Band-Protokoll: Dateien werden als Base64-kodierte Frames im bestehenden Terminalstream übertragen — funktioniert transparent durch ProxyJump-Ketten und tmux ohne zusätzliche Ports oder Agenten
- Bidirektional: der Server führt
tsz <Datei>aus, um Dateien an den Client zu senden;trzstartet den Client-Upload; Drag-and-Drop unterstützt - Verzeichnis-Unterstützung: rekursive Übertragungen via
trz -d/tsz -d - Übertragungslimits: konfigurierbare Limits pro Sitzung für Chunk-Größe, Dateianzahl und Gesamtbytes
- Natives Tauri I/O: Dateilese- und -schreibvorgänge über native Tauri-Dateidialoge und Rust I/O — keine Browser-Speicherbeschränkungen
- Live-Benachrichtigungen: Toast-Benachrichtigungen für Start, Abschluss, Abbruch und Fehler — einschließlich eines Hinweises, wenn trzsz erkannt, aber die Funktion deaktiviert ist
- Aktivieren unter Einstellungen → Terminal → In-Band-Übertragung
🔌 Laufzeit-Plugin-System
Dynamisches ESM-Laden mit sicherheitsgehärteter, eingefrorener API-Oberfläche:
- PluginContext-API: 18 Namensräume — terminal, ui, commands, settings, lifecycle, events, storage, system
- 24 UI-Kit-Komponenten: vorgefertigte React-Komponenten (Buttons, Eingabefelder, Dialoge, Tabellen…), in Plugin-Sandboxen über
window.__OXIDE__injiziert - Sicherheitsmembran:
Object.freezeauf allen Kontextobjekten, Proxy-basierte ACL, IPC-Whitelist, Circuit Breaker mit automatischer Deaktivierung nach wiederholten Fehlern - Geteilte Module: React, ReactDOM, zustand, lucide-react für Plugins bereitgestellt, ohne Bundle-Duplikation
⚡ Adaptives Rendering
Dreistufiger Render-Scheduler, der festes requestAnimationFrame-Batching ersetzt:
| Stufe | Auslöser | Rate | Vorteil |
|---|---|---|---|
| Boost | Frame-Daten ≥ 4 KB | 120 Hz+ (natives ProMotion) | Eliminiert Scroll-Lag bei cat largefile.log |
| Normal | Standard-Eingabe | 60 Hz (RAF) | Flüssige Basislinie |
| Idle | 3 s ohne I/O / Tab verborgen | 1–15 Hz (exponentielle Verlangsamung) | Nahezu null GPU-Last, Batterieersparnis |
Übergänge sind vollautomatisch — gesteuert durch Datenvolumen, Benutzereingaben und Page Visibility API. Hintergrund-Tabs leeren Daten weiterhin über den Idle-Timer, ohne RAF zu wecken.
🔐 .oxide-verschlüsselter Export
Portables, manipulationssicheres Verbindungs-Backup:
- Authentifizierte Verschlüsselung mit ChaCha20-Poly1305 AEAD
- Argon2id KDF: 256 MB Speicherkosten, 4 Iterationen — GPU-Brute-Force-resistent
- SHA-256-Integritätsprüfsumme
- Optionale Schlüsseleinbettung: private Schlüssel base64-kodiert in der verschlüsselten Nutzlast
- Vorab-Analyse: Aufschlüsselung der Auth-Typen, Erkennung fehlender Schlüssel vor dem Export
📡 ProxyJump — Topologie-bewusstes Multi-Hop
- Unbegrenzte Kettentiefe:
Client → Sprung A → Sprung B → … → Ziel - Automatisches Parsen von
~/.ssh/config, Aufbau des Topologiegraphen, Dijkstra-Pfadfindung für optimale Route - Sprungknoten als unabhängige Sitzungen wiederverwendbar
- Kaskadierende Fehlerpropagation: Jump-Host ausgefallen → alle nachgelagerten Knoten automatisch als
link_downmarkiert
⚙️ Lokales Terminal — Thread-sicheres PTY
Plattformübergreifende lokale Shell über portable-pty 0.8, Feature-gated hinter local-terminal:
MasterPtyinstd::sync::Mutexgekapselt — dedizierte I/O-Threads halten blockierende PTY-Lesevorgänge von der Tokio-Event-Loop fern- Automatische Shell-Erkennung:
zsh,bash,fish,pwsh, Git Bash, WSL2 cargo build --no-default-featuresentfernt PTY für Mobile-/Leichtgewicht-Builds
🪟 Windows-Optimierung
- Natives ConPTY: ruft direkt die Windows Pseudo Console API auf — volle TrueColor- und ANSI-Unterstützung, kein veraltetes WinPTY
- Shell-Scanner: erkennt automatisch PowerShell 7, Git Bash, WSL2, CMD über Registry und PATH
Und mehr
- IDE-Modus: CodeMirror 6 über SFTP, 24 Sprachen, Dateibaum mit Git-Status, Multi-Tab, Konflikterkennung — optionaler Remote-Agent (~1 MB) für erweiterte Funktionen unter Linux
- Ressourcen-Profiler: Live CPU/Speicher/Netzwerk über persistenten SSH-Kanal, liest
/proc/stat, deltabasierte Berechnung, automatischer Fallback auf RTT-only bei Nicht-Linux-Systemen - Benutzerdefinierte Design-Engine: 30+ integrierte Designs, visueller Editor mit Live-Vorschau, 20 xterm.js-Felder + 24 UI-Farbvariablen, automatische Ableitung der UI-Farben aus der Terminal-Palette
- Sitzungsaufzeichnung: asciicast v2-Format, vollständige Aufzeichnung und Wiedergabe
- Broadcast-Eingabe: einmal tippen, an alle geteilten Fenster senden — Batch-Server-Operationen
- Hintergrund-Galerie: Hintergrundbilder pro Tab, 16 Tab-Typen, Steuerung von Deckkraft/Unschärfe/Anpassung
- CLI-Companion (
oxt): ~1 MB Binärdatei, JSON-RPC 2.0 über Unix Socket / Named Pipe, status/health/list/forward/config/connect/focus/attach/SFTP/import/AI mit menschenlesbarer oder--json-Ausgabe - WSL Graphics ⚠️ experimentell: integrierter VNC-Viewer — 9 Desktop-Umgebungen + Einzelanwendungsmodus, WSLg-Erkennung, Xtigervnc + noVNC
Offizielle Plugins
| Plugin | Beschreibung | Repository |
|---|---|---|
| Cloud Sync | Verschlüsselte selbstgehostete Synchronisation — .oxide-Snapshots über WebDAV, HTTP JSON, Dropbox, Git oder S3 hochladen und importieren | oxideterm.cloud-sync |
| Telnet Client | Nativer Telnet-Client für Router, Switches und Legacy-Geräte — keine externe Binary erforderlich | oxideterm.telnet |
📸 11 Sprachen in Aktion
![]() English |
![]() 简体中文 |
![]() 繁體中文 |
![]() 日本語 |
![]() 한국어 |
![]() Français |
![]() Deutsch |
![]() Español |
![]() Italiano |
![]() Português |
![]() Tiếng Việt |
Laufzeitanforderungen
OxideTerm verwendet die native WebView-Laufzeit des Betriebssystems. Die meisten Nutzer haben sie bereits installiert; installieren Sie sie manuell nur, wenn die App nicht startet oder Ihre Umgebung air-gapped ist.
| Plattform | Laufzeitabhängigkeit |
|---|---|
| Windows | WebView2 Runtime — vorinstalliert auf Windows 10 (1803+) und Windows 11. Für Air-Gap- / Intranet-Umgebungen verwenden Sie den Evergreen Standalone Installer (offline, ~170 MB) oder stellen Sie die Fixed Version Runtime per Gruppenrichtlinie bereit. |
| macOS | Keine (verwendet natives WebKit) |
| Linux | libwebkit2gtk-4.1 (normalerweise auf modernen Desktops vorinstalliert) |
Portabler Modus
OxideTerm unterstützt einen vollständig eigenständigen portablen Modus — alle Daten (Verbindungen, Geheimnisse, Einstellungen) werden neben der Anwendungsdatei gespeichert, ideal für USB-Sticks oder Offline-Umgebungen.
Aktivierung
Option A — Markierungsdatei (am einfachsten): Erstellen Sie eine leere Datei namens portable (ohne Erweiterung) neben der Anwendung.
| Plattform | Wo die portable-Datei platziert wird |
|---|---|
| macOS | Neben OxideTerm.app (gleiches Verzeichnis) |
| Windows | Neben OxideTerm.exe |
| Linux (AppImage) | Neben der .AppImage-Datei |
/my-usb/
├── OxideTerm.app (or .exe / .AppImage)
├── portable ← von Ihnen erstellte leere Datei
└── data/ ← wird beim ersten Start automatisch erstellt
Option B — portable.json (benutzerdefiniertes Datenverzeichnis): Platzieren Sie eine portable.json am selben Ort:
{
"enabled": true,
"dataDir": "my-data"
}
enabledist standardmäßigtrue, wenn weggelassendataDirmuss ein relativer Pfad sein (..nicht erlaubt); Standard istdata
Funktionsweise
- Erster Start — Der Bootstrap-Bildschirm fordert Sie auf, ein portables Passwort zu erstellen. Dieses Passwort verschlüsselt den lokalen Schlüsselspeicher (ChaCha20-Poly1305 + Argon2id) und schützt alle gespeicherten Geheimnisse.
- Weitere Starts — Geben Sie das Passwort zum Entsperren ein. Auf macOS mit Touch ID können Sie die biometrische Entsperrung unter Settings → General → Portable Runtime optional aktivieren.
- Instanzsperre — Es kann jeweils nur eine OxideTerm-Instanz das portable Datenverzeichnis verwenden (
data/.portable.lock). - Verwaltung — Ändern Sie das portable Passwort oder wechseln Sie die biometrische Entsperrung unter Settings → General → Portable Runtime.
- Portabilität — Kopieren Sie den gesamten Ordner (Anwendung +
portable-Markierung +data/) auf einen anderen Computer. Das Passwort reist mit dem Schlüsselspeicher.
Tip
Im portablen Modus sind automatische Updates deaktiviert. Zum Aktualisieren ersetzen Sie die Anwendungsdatei und behalten das data/-Verzeichnis bei.
Schnellstart
Voraussetzungen
- Rust 1.85+
- Node.js 18+ (pnpm empfohlen)
- Plattform-Tools:
- macOS: Xcode Command Line Tools
- Windows: Visual Studio C++ Build Tools
- Linux:
build-essential,libwebkit2gtk-4.1-dev,libssl-dev
Entwicklung
git clone https://github.com/AnalyseDeCircuit/oxideterm.git
cd oxideterm && pnpm install
# CLI-Companion bauen (erforderlich für CLI-Funktionen)
pnpm cli:build
# Vollständige App (Frontend + Rust-Backend mit Hot Reload)
pnpm run tauri dev
# Nur Frontend (Vite auf Port 1420)
pnpm dev
# Produktions-Build
pnpm run tauri build
Technologie-Stack
| Schicht | Technologie | Details |
|---|---|---|
| Framework | Tauri 2.0 | Native Binärdatei, 25–40 MB |
| Runtime | Tokio + DashMap 6 | Vollständig asynchron, lock-freie nebenläufige Maps |
| SSH | russh 0.59 (ring) | Reines Rust, null C-Abhängigkeiten, SSH Agent |
| Lokales PTY | portable-pty 0.8 | Feature-gated, ConPTY unter Windows |
| Frontend | React 19.1 + TypeScript 5.8 | Vite 7, Tailwind CSS 4 |
| Zustand | Zustand 5 | 19 spezialisierte Stores |
| Terminal | xterm.js 6 + WebGL | GPU-beschleunigt, 60 fps+ |
| Editor | CodeMirror 6 | 30+ Sprachmodi |
| Verschlüsselung | ChaCha20-Poly1305 + Argon2id | AEAD + speicherintensive KDF (256 MB) |
| Speicher | redb 2.1 | Eingebetteter KV-Store |
| i18n | i18next 25 | 11 Sprachen × 22 Namensräume |
| Plugins | ESM Runtime | Eingefrorener PluginContext + 24 UI Kit |
| CLI | JSON-RPC 2.0 | Unix Socket / Named Pipe |
Projektgröße
Gemessen mit tokei, ohne Abhängigkeiten und Build-Artefakte.
| Metrik | Aktuelle Größe |
|---|---|
| Gesamter Code | 286K+ |
| TypeScript / TSX | 130K+ |
| Rust | 100K+ |
| Frontend-Testcode | 24K+ |
| Frontend-Testdateien | 128 |
Quelldateien (src + src-tauri/src) | 664 |
Sicherheit
| Bereich | Implementierung |
|---|---|
| Passwörter | Betriebssystem-Schlüsselbund (macOS Keychain / Windows Credential Manager / libsecret) |
| Portabler Schlüsselspeicher | ChaCha20-Poly1305-verschlüsselter Tresor neben der Anwendung, optionale biometrische Bindung über den OS-Schlüsselbund |
| KI-API-Schlüssel | Betriebssystem-Schlüsselbund + biometrische Touch ID-Authentifizierung unter macOS |
| Export | .oxide: ChaCha20-Poly1305 + Argon2id (256 MB Speicher, 4 Iterationen) |
| Speicher | Rust-Speichersicherheit + zeroize zur Bereinigung sensibler Daten |
| Host-Schlüssel | TOFU mit ~/.ssh/known_hosts, lehnt Änderungen ab (MITM-Prävention) |
| Plugins | Object.freeze + Proxy-ACL, Circuit Breaker, IPC-Whitelist |
| WebSocket | Einmal-Token mit Zeitlimits |
Roadmap
- SSH-Agent-Forwarding
- Vollständige ProxyCommand-Unterstützung
- Audit-Protokollierung
- Agent-Verbesserungen
- Sitzungssuche & Schnellwechsel
- Rust-native Migration via GPUI (Zed's GPU-beschleunigtem Framework) — [in Arbeit]
Support und Wartung
OxideTerm wird von einem einzelnen Entwickler nach dem Best-Effort-Prinzip gepflegt. Fehlerberichte und reproduzierbare Regressionen haben Priorität; Feature-Anfragen sind willkommen, werden aber nicht immer umgesetzt.
Wenn OxideTerm Ihren Workflow verbessert, helfen ein GitHub-Stern, eine Issue-Reproduktion, eine Übersetzungskorrektur, ein Plugin oder ein Pull Request dabei, das Projekt voranzubringen.
Lizenz
GPL-3.0 — diese Software ist freie Software, lizenziert unter der GNU General Public License v3.0.
Sie dürfen diese Software gemäß den Bedingungen der GPL-3.0 frei nutzen, ändern und verteilen. Abgeleitete Werke müssen ebenfalls unter derselben Lizenz verteilt werden.
OxideTerm wechselte ab v1.0.0 von PolyForm Noncommercial 1.0.0 zu GPL-3.0. Wir haben diesen Wechsel bewusst vorgenommen: kein „Open Source“-Theater mit Noncommercial-Fallen oder No-Competition-Zusatzklauseln, sondern klare Copyleft-Freiheit für Nutzer, Forks, Weiterverbreiter und kommerzielle Betreiber.
Öffentlich einsehbarer Code ist nicht automatisch Open Source. Wenn ein Projekt eine bekannte Open-Source-Lizenz zeigt, aber zusätzlich Klauseln wie „keine Weiterverbreitung“, „kein Repackaging“, „keine konkurrierenden Produkte“ oder „keine nicht autorisierten Vertriebsplattformen“ anhängt, ist das eher Source-Available-Marketing als die Freiheit, die Nutzer von Open Source erwarten. OxideTerm fügt keine No-Compete- oder Anti-Redistribution-Klauseln hinzu: Die GPL-3.0-Bedingungen sind die vollständigen Bedingungen.
Vollständiger Text: GNU General Public License v3.0
Danksagungen
russh · portable-pty · Tauri · xterm.js · CodeMirror · Radix UI
271.000+ Zeilen Rust & TypeScript — gebaut mit ⚡ und ☕














