OxideTerm

⚡ OxideTerm

Workspace AI-native per server remoti.
Connettiti ai tuoi server via SSH e lavora con terminali, file, porte, trasferimenti, editing leggero e OxideSens AI in un'app local-first.
App Tauri nativa · SSH puro in Rust · OxideSens AI BYOK · nessun account per i workflow SSH principali
Zero Electron. Zero OpenSSL. Zero telemetria. Zero abbonamento. BYOK-first. SSH puro in Rust.

Versione Piattaforma Licenza Rust Tauri Download totali

Scarica ultima versione Scarica ultima beta

🌐 oxideterm.app — Documentation & website

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

OxideTerm AI opening a terminal demo *Guarda OxideSens seguire una richiesta dell’utente e aprire un terminale dentro OxideTerm.*
--- ## Cosa puoi fare - Gestire affiancati terminali SSH, SFTP, port forwarding, trasferimenti nel terminale e shell locali - Continuare a lavorare durante piccoli problemi di rete con Grace Period reconnect - Chiedere alOxideSens AI di ispezionare sessioni live ed eseguire azioni approvate tramite il tuo provider AI --- ## Perché OxideTerm? | Se ti interessa... | OxideTerm offre... | |---|---| | Un nodo remoto, molti strumenti | Terminale, SFTP, port forwarding, trzsz, mini IDE, monitoraggio e OxideSens AI restano legati allo stesso workspace SSH | | Workflow SSH local-first | SSH, SFTP, forwarding, shell locale e configurazione funzionano senza registrazione; la sincronizzazione cloud è opzionale via [plugin ufficiale](#plugin-ufficiali) | | OxideSens AI BYOK invece di crediti piattaforma | OxideSens usa il tuo endpoint OpenAI/Ollama/DeepSeek/OpenAI-compatible con MCP, RAG e azioni workspace approvate | | Riconnessione stabile | Grace Period prova la vecchia connessione per 30 s prima di sostituirla, così vim/htop/yazi possono sopravvivere a brevi interruzioni | | App nativa in Rust puro | App nativa Tauri 2.0, russh 0.59 compilato con `ring`, niente Electron, niente OpenSSL/libssh2 | | Sicurezza credenziali | Password e chiavi API restano nel portachiavi OS, i metadati sono sigillati localmente e `.oxide` usa ChaCha20-Poly1305 + Argon2id | ## Che cos’è / cosa non è OxideTerm si concentra su un **workspace AI local-first per server remoti**. È pensato per chi vuole tenere terminale, file, porte, trasferimenti, editing leggero e una OxideSens AI attorno alle proprie macchine e ai propri nodi remoti. Non vuole essere una piattaforma cloud Agent né un progetto centrato solo sui benchmark di rendering del terminale. La direzione è più stretta: far sembrare il lavoro remoto un workspace locale, senza account OxideTerm. --- ## Screenshot
Terminale SSH + OxideSens AI

Terminale SSH con OxideSens AI
Gestore file SFTP

Gestore file SFTP a doppio pannello con coda di trasferimento
IDE integrato (CodeMirror 6)

Modalità IDE integrata con editor CodeMirror 6
Port forwarding intelligente

Port forwarding intelligente con rilevamento automatico
--- ## Download Scarica l'ultima versione da [GitHub Releases](https://github.com/AnalyseDeCircuit/oxideterm/releases/latest). --- ## Panoramica delle funzionalità | Categoria | Funzionalità | |---|---| | **Terminale** | PTY locale (zsh/bash/fish/pwsh/WSL2), SSH remoto, terminali seriali locali, pannelli divisi, broadcast input, registrazione/riproduzione sessioni (asciicast v2), rendering WebGL, 30+ temi + editor personalizzato, palette comandi (`⌘K`), modalità zen, trasferimento file **trzsz** integrato | | **SSH e autenticazione** | Pool di connessioni e multiplexing, ProxyJump (salti illimitati) con grafo topologico, riconnessione automatica con periodo di grazia, Inoltro agente. Auth: password, chiave SSH (RSA/Ed25519/ECDSA), SSH Agent, certificati, 2FA interattivo da tastiera, Known Hosts TOFU | | **SFTP** | Browser a doppio pannello, drag-and-drop, anteprima intelligente (immagini/video/audio/codice/PDF/hex/font), coda di trasferimento con progresso ed ETA, segnalibri, estrazione archivi | | **Modalità IDE** | CodeMirror 6 con 30+ linguaggi, albero file + stato Git, multi-tab, risoluzione conflitti, terminale integrato. Agente remoto opzionale per Linux (9 architetture aggiuntive) | | **Port forwarding** | Locale (-L), remoto (-R), SOCKS5 dinamico (-D), I/O message-passing senza lock, ripristino automatico alla riconnessione, report di terminazione, timeout di inattività | | **IA (OxideSens)** | Assistente orientato ai target per connessioni salvate, sessioni SSH live, buffer del terminale, percorsi SFTP, impostazioni e voci della knowledge base; può diagnosticare output remoto, eseguire comandi approvati, ispezionare file e spiegare guasti senza un account OxideTerm | | **Plugin** | Caricamento ESM runtime, 18 namespace API, 24 componenti UI Kit, API congelata + ACL Proxy, circuit breaker, disattivazione automatica in caso di errori | | **CLI** | Companion `oxt`: JSON-RPC 2.0 tramite Unix Socket / Named Pipe, status/health/list/forward/config/connect/focus/attach/SFTP/import/AI, output leggibile + JSON | | **Sicurezza** | Export .oxide crittografato (ChaCha20-Poly1305 + Argon2id 256 MB), configurazione locale cifrata a riposo, portachiavi OS, Touch ID (macOS), keystore crittografato portatile, TOFU chiave host, pulizia memoria `zeroize` | | **i18n** | 11 lingue: EN, 简体中文, 繁體中文, 日本語, 한국어, FR, DE, ES, IT, PT-BR, VI | --- ## Sotto il cofano OxideTerm mantiene una superficie local-first, ma internamente è costruito per workflow SSH intensivi. I dettagli completi sono conservati sotto.
Architettura, internals SSH, riconnessione, AI, forwarding, plugin e altro
### Architettura — Comunicazione a doppio piano OxideTerm separa i dati del terminale dai comandi di controllo in due piani indipendenti: ``` ┌─────────────────────────────────────┐ │ Frontend (React 19) │ │ xterm.js 6 (WebGL) + 19 stores │ └──────────┬──────────────┬───────────┘ │ Tauri IPC │ WebSocket (binario) │ (JSON) │ porta per sessione ┌──────────▼──────────────▼───────────┐ │ Backend (Rust) │ │ NodeRouter → SshConnectionRegistry │ │ Wire Protocol v1 │ │ [Type:1][Length:4][Payload:n] │ └─────────────────────────────────────┘ ``` - **Piano dati (WebSocket)**: ogni sessione SSH ottiene la propria porta WebSocket. I byte del terminale fluiscono come frame binari con header Type-Length-Payload — nessuna serializzazione JSON, nessuna codifica Base64, zero overhead nel percorso critico. - **Piano di controllo (Tauri IPC)**: gestione connessioni, operazioni SFTP, inoltri, configurazione — JSON strutturato, ma fuori dal percorso critico. - **Indirizzamento per nodo**: il frontend non tocca mai `sessionId` né `connectionId`. Tutto viene indirizzato tramite `nodeId`, risolto atomicamente lato server dal `NodeRouter`. La riconnessione SSH modifica il `connectionId` sottostante — ma SFTP, IDE e inoltri non sono minimamente coinvolti. ### 🔩 SSH puro in Rust — russh 0.59 L'intero stack SSH è **russh 0.59** compilato con il backend crittografico **`ring`**: - **Zero dipendenze C/OpenSSL** — l'intero stack crittografico è in Rust. Niente più debug «quale versione di OpenSSL?». - Protocollo SSH2 completo: scambio chiavi, canali, sottosistema SFTP, port forwarding - Suite crittografiche ChaCha20-Poly1305 e AES-GCM, chiavi Ed25519/RSA/ECDSA - **`AgentSigner`** personalizzato: avvolge il SSH Agent di sistema e implementa il trait `Signer` di russh, risolvendo problemi di bound `Send` RPITIT clonando `&AgentIdentity` in un valore posseduto prima di attraversare `.await` ```rust pub struct AgentSigner { /* wraps system SSH Agent */ } impl Signer for AgentSigner { /* challenge-response via Agent IPC */ } ``` - **Supporto piattaforma**: Unix (`SSH_AUTH_SOCK`), Windows (`\\.\pipe\openssh-ssh-agent`) - **Catene proxy**: ogni salto utilizza l'autenticazione Agent in modo indipendente - **Riconnessione**: `AuthMethod::Agent` riprodotto automaticamente ### 🔄 Riconnessione intelligente con periodo di grazia La maggior parte dei client SSH distrugge tutto alla disconnessione e riparte da zero. L'orchestratore di riconnessione di OxideTerm adotta un approccio fondamentalmente diverso: 1. **Rilevamento** del timeout heartbeat WebSocket (300 s, calibrato per macOS App Nap e throttling dei timer JS) 2. **Snapshot** dello stato completo: pannelli terminale, trasferimenti SFTP in corso, port forward attivi, file IDE aperti 3. **Sondaggio intelligente**: eventi `visibilitychange` + `online` attivano keepalive SSH proattivo (~2 s di rilevamento contro 15–30 s di timeout passivo) 4. **Periodo di grazia** (30 s): sonda la vecchia connessione SSH via keepalive — se si ripristina (es.: cambio di access point WiFi), le tue app TUI (vim, htop, yazi) sopravvivono completamente intatte 5. Se il recupero fallisce → nuova connessione SSH → ripristino automatico degli inoltri → ripresa dei trasferimenti SFTP → riapertura dei file IDE Pipeline: `queued → snapshot → grace-period → ssh-connect → await-terminal → restore-forwards → resume-transfers → restore-ide → verify → done` Tutta la logica passa attraverso un `ReconnectOrchestratorStore` dedicato — zero codice di riconnessione sparso in hook o componenti. ### 🛡️ Pool di connessioni SSH `SshConnectionRegistry` con conteggio dei riferimenti supportato da `DashMap` per accesso concorrente senza lock: - **Una connessione, molti consumatori**: terminale, SFTP, port forward e IDE condividono una singola connessione SSH fisica — nessun handshake TCP ridondante - **Macchina a stati per connessione**: `connecting → active → idle → link_down → reconnecting` - **Gestione del ciclo di vita**: timeout di inattività configurabile (5 min / 15 min / 30 min / 1 h / mai), intervallo keepalive di 15 s, rilevamento guasti heartbeat - **Heartbeat WsBridge**: intervallo di 30 s, timeout di 5 min — tollera macOS App Nap e throttling JS del browser - **Propagazione a cascata**: guasto dell'host di salto → tutti i nodi a valle automaticamente marcati come `link_down` con sincronizzazione dello stato - **Disconnessione per inattività**: emette `connection_status_changed` al frontend (non solo `node:state` interno), prevenendo desincronizzazione dell'interfaccia ### 🤖 OxideSens AI Assistente IA incentrato sulla privacy con due modalità di interazione: - **Pannello inline** (`⌘I`): comandi terminale rapidi, output iniettato tramite bracketed paste - **Chat laterale**: conversazioni persistenti con cronologia completa - **Contesto workspace orientato ai target**: vede connessioni salvate, sessioni SSH live, buffer del terminale, percorsi SFTP, impostazioni e voci della knowledge base come target del workspace - **Azioni approvate**: può diagnosticare output remoto, eseguire comandi approvati, ispezionare file e spiegare guasti senza richiedere un account OxideTerm - **Supporto MCP**: connessione a server [Model Context Protocol](https://modelcontextprotocol.io) esterni (stdio e SSE) per integrazione di strumenti di terze parti - **Knowledge base RAG** (v0.20): importa documenti Markdown/TXT in collezioni con scope (globale o per connessione). La ricerca ibrida fonde indice di keyword BM25 + similarità coseno vettoriale tramite Reciprocal Rank Fusion. Chunking consapevole del Markdown che preserva la gerarchia dei titoli. Tokenizer a bigrammi CJK per cinese/giapponese/coreano. - **Provider**: OpenAI, Ollama, DeepSeek, OneAPI, o qualsiasi endpoint `/v1/chat/completions` - **Sicurezza**: chiavi API conservate nel portachiavi OS; su macOS, la lettura delle chiavi è protetta da **Touch ID** tramite `LAContext` — nessun entitlement o firma del codice richiesti, in cache dopo la prima autenticazione per sessione ### Port Forwarding — I/O senza lock Inoltro locale (-L), remoto (-R) e SOCKS5 dinamico (-D) completo: - **Architettura message-passing**: il canale SSH è posseduto da un singolo task `ssh_io` — nessun `Arc>`, eliminando completamente la contesa mutex - **Report di terminazione**: i task di inoltro segnalano attivamente il motivo di uscita (disconnessione SSH, chiusura porta remota, timeout) per diagnostica chiara - **Ripristino automatico**: gli inoltri `Suspended` riprendono automaticamente alla riconnessione senza intervento dell'utente - **Timeout di inattività**: `FORWARD_IDLE_TIMEOUT` (300 s) previene l'accumulo di connessioni zombie ### 📦 trzsz — Trasferimento File Integrato Carica e scarica file direttamente attraverso la sessione SSH — senza connessione SFTP: - **Protocollo integrato**: i file viaggiano come frame Base64 all'interno del flusso terminale esistente — funziona in modo trasparente attraverso catene ProxyJump e tmux senza porte o agenti aggiuntivi - **Bidirezionale**: il server esegue `tsz ` per inviare file al client; `trz` avvia il caricamento lato client; supporto drag-and-drop - **Supporto directory**: trasferimenti ricorsivi tramite `trz -d` / `tsz -d` - **Limiti di trasferimento**: limiti configurabili per sessione per dimensione del blocco, numero di file e byte totali - **I/O nativo Tauri**: lettura e scrittura di file tramite dialoghi nativi Tauri e Rust I/O — nessun vincolo di memoria del browser - **Notifiche in tempo reale**: notifiche Toast per avvio, completamento, annullamento ed errori — incluso un suggerimento quando viene rilevato trzsz ma la funzione è disabilitata - Attivare in **Impostazioni → Terminale → Trasferimento Integrato** ### 🔌 Sistema di plugin runtime Caricamento ESM dinamico con superficie API congelata e rinforzata in sicurezza: - **API PluginContext**: 18 namespace — terminal, ui, commands, settings, lifecycle, events, storage, system - **24 componenti UI Kit**: componenti React precostruiti (pulsanti, campi di input, dialoghi, tabelle…) iniettati nelle sandbox dei plugin tramite `window.__OXIDE__` - **Membrana di sicurezza**: `Object.freeze` su tutti gli oggetti di contesto, ACL basata su Proxy, whitelist IPC, circuit breaker con disattivazione automatica dopo errori ripetuti - **Moduli condivisi**: React, ReactDOM, zustand, lucide-react esposti per l'uso dei plugin senza duplicazione dei bundle ### ⚡ Rendering adattivo Scheduler di rendering a tre livelli che sostituisce il batching fisso di `requestAnimationFrame`: | Livello | Trigger | Frequenza | Beneficio | |---|---|---|---| | **Boost** | Dati frame ≥ 4 KB | 120 Hz+ (ProMotion nativo) | Elimina il lag di scorrimento su `cat largefile.log` | | **Normale** | Digitazione standard | 60 Hz (RAF) | Base fluida | | **Inattivo** | 3 s senza I/O / tab nascosto | 1–15 Hz (decadimento esponenziale) | Carico GPU quasi nullo, risparmio batteria | Le transizioni sono completamente automatiche — guidate dal volume dei dati, dall'input utente e dall'API Page Visibility. I tab in background continuano a svuotare i dati tramite timer di inattività senza svegliare RAF. ### 🔐 Export crittografato .oxide Backup di connessione portatile e a prova di manomissione: - Crittografia autenticata **ChaCha20-Poly1305 AEAD** - **KDF Argon2id**: costo memoria di 256 MB, 4 iterazioni — resistente al brute-force GPU - Checksum di integrità **SHA-256** - **Embedding opzionale delle chiavi**: chiavi private codificate in base64 nel payload crittografato - **Analisi preliminare**: breakdown dei tipi di autenticazione, rilevamento chiavi mancanti prima dell'export ### 📡 ProxyJump — Multi-hop con consapevolezza topologica - Profondità della catena illimitata: `Client → Salto A → Salto B → … → Destinazione` - Parsing automatico di `~/.ssh/config`, costruzione del grafo topologico, pathfinding Dijkstra per la rotta ottimale - Nodi di salto riutilizzabili come sessioni indipendenti - Propagazione di guasti a cascata: host di salto down → tutti i nodi a valle automaticamente marcati come `link_down` ### ⚙️ Terminale locale — PTY thread-safe Shell locale multipiattaforma tramite `portable-pty 0.8`, protetto dal feature gate `local-terminal`: - `MasterPty` avvolto in `std::sync::Mutex` — thread I/O dedicati mantengono le letture PTY bloccanti fuori dall'event loop di Tokio - Rilevamento automatico della shell: `zsh`, `bash`, `fish`, `pwsh`, Git Bash, WSL2 - `cargo build --no-default-features` rimuove PTY per build mobile/leggeri ### 🪟 Ottimizzazione Windows - **ConPTY nativo**: invoca direttamente l'API Windows Pseudo Console — supporto completo TrueColor e ANSI, nessun WinPTY legacy - **Scanner shell**: rileva automaticamente PowerShell 7, Git Bash, WSL2, CMD tramite Registro e PATH ### E altro ancora - **Modalità IDE**: CodeMirror 6 via SFTP, 24 linguaggi, albero file con stato Git, multi-scheda, risoluzione conflitti — agente remoto opzionale (~1 MB) per funzionalità avanzate su Linux - **Profiler risorse**: CPU/memoria/rete in tempo reale tramite canale SSH persistente che legge `/proc/stat`, calcolo basato su delta, degradazione automatica a solo RTT su sistemi non-Linux - **Motore temi personalizzato**: 30+ temi integrati, editor visuale con anteprima live, 20 campi xterm.js + 24 variabili colore UI, derivazione automatica dei colori UI dalla palette del terminale - **Registrazione sessioni**: formato asciicast v2, registrazione e riproduzione complete - **Broadcast input**: digita una volta, invia a tutti i pannelli divisi — operazioni batch sui server - **Galleria sfondi**: immagini di sfondo per tab, 16 tipi di tab, controllo opacità/sfocatura/adattamento - **Companion CLI** (`oxt`): binario di ~1 MB, JSON-RPC 2.0 tramite Unix Socket / Named Pipe, status/health/list/forward/config/connect/focus/attach/SFTP/import/AI con output leggibile o `--json` - **WSL Graphics** ⚠️ sperimentale: visualizzatore VNC integrato — 9 ambienti desktop + modalità singola applicazione, rilevamento WSLg, Xtigervnc + noVNC
### Plugin ufficiali | Plugin | Descrizione | Repository | |---|---|---| | **Cloud Sync** | Sincronizzazione self-hosted crittografata — carica e importa snapshot `.oxide` tramite WebDAV, HTTP JSON, Dropbox, Git o S3 | [oxideterm.cloud-sync](https://github.com/AnalyseDeCircuit/oxideterm.cloud-sync) | | **Telnet Client** | Client Telnet nativo per router, switch e dispositivi legacy — nessun binario esterno richiesto | [oxideterm.telnet](https://github.com/AnalyseDeCircuit/oxideterm.telnet) |
📸 11 lingue in azione

English

简体中文

繁體中文

日本語

한국어

Français

Deutsch

Español

Italiano

Português

Tiếng Việt
--- ## Requisiti runtime OxideTerm usa il runtime WebView nativo fornito dal sistema operativo. La maggior parte degli utenti lo ha già installato; installalo manualmente solo se l'app non si avvia o se l'ambiente è air-gapped. | Piattaforma | Dipendenza runtime | |---|---| | **Windows** | [WebView2 Runtime](https://developer.microsoft.com/en-us/microsoft-edge/webview2/) — preinstallato su Windows 10 (1803+) e Windows 11. Per ambienti **air-gap / intranet**, utilizzare l'[installer standalone Evergreen](https://developer.microsoft.com/en-us/microsoft-edge/webview2/#download) (offline, ~170 MB) o distribuire il runtime a **versione fissa** tramite criteri di gruppo. | | **macOS** | Nessuna (utilizza WebKit nativo) | | **Linux** | `libwebkit2gtk-4.1` (generalmente preinstallato sui desktop moderni) | --- ## Modalità portatile OxideTerm supporta una modalità portatile completamente autonoma — tutti i dati (connessioni, segreti, impostazioni) vengono memorizzati accanto al binario dell’applicazione, ideale per chiavette USB o ambienti offline. ### Attivazione **Opzione A — File marcatore** (il più semplice): create un file vuoto chiamato `portable` (senza estensione) accanto all’applicazione. | Piattaforma | Dove posizionare il file `portable` | |---|---| | **macOS** | Accanto a `OxideTerm.app` (stessa directory) | | **Windows** | Accanto a `OxideTerm.exe` | | **Linux (AppImage)** | Accanto al file `.AppImage` | ``` /my-usb/ ├── OxideTerm.app (or .exe / .AppImage) ├── portable ← file vuoto creato da voi └── data/ ← creato automaticamente al primo avvio ``` **Opzione B — `portable.json`** (directory dati personalizzata): posizionate un file `portable.json` nella stessa posizione: ```json { "enabled": true, "dataDir": "my-data" } ``` - `enabled` è `true` per default se omesso - `dataDir` deve essere un **percorso relativo** (`..` non consentito); default è `data` ### Come funziona 1. **Primo avvio** — La schermata di bootstrap vi chiederà di creare una password portatile. Questa password cifra il keystore locale (ChaCha20-Poly1305 + Argon2id) e protegge tutti i segreti salvati. 2. **Avvii successivi** — Inserite la password per sbloccare. Su macOS con Touch ID, potete attivare lo sblocco biometrico in **Settings → General → Portable Runtime**. 3. **Blocco istanza** — Solo un’istanza di OxideTerm alla volta può utilizzare la directory portatile (`data/.portable.lock`). 4. **Gestione** — Modificate la password portatile o attivate lo sblocco biometrico in **Settings → General → Portable Runtime**. 5. **Portabilità** — Copiate l’intera cartella (applicazione + marcatore `portable` + `data/`) su un altro computer. La password viaggia con il keystore. > [!TIP] > Gli aggiornamenti automatici sono disabilitati in modalità portatile. Per aggiornare, sostituite il binario dell’applicazione mantenendo la directory `data/`. --- ## Avvio rapido ### Prerequisiti - **Rust** 1.85+ - **Node.js** 18+ (pnpm consigliato) - **Strumenti piattaforma**: - macOS: Xcode Command Line Tools - Windows: Visual Studio C++ Build Tools - Linux: `build-essential`, `libwebkit2gtk-4.1-dev`, `libssl-dev` ### Sviluppo ```bash git clone https://github.com/AnalyseDeCircuit/oxideterm.git cd oxideterm && pnpm install # Compilare il CLI companion (necessario per le funzionalità CLI) pnpm cli:build # App completa (frontend + backend Rust con hot reload) pnpm run tauri dev # Solo frontend (Vite sulla porta 1420) pnpm dev # Build di produzione pnpm run tauri build ``` --- ## Stack tecnologico | Livello | Tecnologia | Dettagli | |---|---|---| | **Framework** | Tauri 2.0 | Binario nativo, 25–40 MB | | **Runtime** | Tokio + DashMap 6 | Completamente asincrono, mappe concorrenti senza lock | | **SSH** | russh 0.59 (`ring`) | Puro Rust, zero dipendenze C, SSH Agent | | **PTY locale** | portable-pty 0.8 | Feature-gated, ConPTY su Windows | | **Frontend** | React 19.1 + TypeScript 5.8 | Vite 7, Tailwind CSS 4 | | **Stato** | Zustand 5 | 19 store specializzati | | **Terminale** | xterm.js 6 + WebGL | Accelerato da GPU, 60 fps+ | | **Editor** | CodeMirror 6 | 30+ modalità linguaggio | | **Crittografia** | ChaCha20-Poly1305 + Argon2id | AEAD + KDF ad alto consumo di memoria (256 MB) | | **Storage** | redb 2.1 | Store KV embedded | | **i18n** | i18next 25 | 11 lingue × 22 namespace | | **Plugin** | ESM Runtime | PluginContext congelato + 24 UI Kit | | **CLI** | JSON-RPC 2.0 | Unix Socket / Named Pipe | --- ## Dimensioni del progetto Misurato con `tokei`, escludendo dipendenze e artefatti di build. | Metrica | Dimensione attuale | |---|---:| | Codice totale | 286K+ | | TypeScript / TSX | 130K+ | | Rust | 100K+ | | Codice dei test frontend | 24K+ | | File di test frontend | 128 | | File sorgente (`src` + `src-tauri/src`) | 664 | --- ## Sicurezza | Aspetto | Implementazione | |---|---| | **Password** | Portachiavi OS (macOS Keychain / Windows Credential Manager / libsecret) | | **Keystore portatile** | Vault crittografato con ChaCha20-Poly1305 accanto all’applicazione, binding biometrico opzionale tramite portachiavi OS | | **Chiavi API IA** | Portachiavi OS + autenticazione biometrica Touch ID su macOS | | **Export** | .oxide: ChaCha20-Poly1305 + Argon2id (256 MB di memoria, 4 iterazioni) | | **Memoria** | Sicurezza della memoria di Rust + `zeroize` per la pulizia dei dati sensibili | | **Chiavi host** | TOFU con `~/.ssh/known_hosts`, rifiuta le modifiche (prevenzione MITM) | | **Plugin** | Object.freeze + ACL Proxy, circuit breaker, whitelist IPC | | **WebSocket** | Token monouso con limiti di tempo | --- ## Roadmap - [x] Forwarding dell'agente SSH - [x] Supporto completo ProxyCommand - [ ] Registrazione audit - [ ] Miglioramenti Agent - [ ] Ricerca sessioni e cambio rapido - [x] Migrazione nativa in Rust via GPUI — [in corso] --- ## Supporto e manutenzione Le segnalazioni di bug e le regressioni riproducibili hanno la priorità. Le richieste di funzionalità vengono valutate in base ad ambito, sicurezza e allineamento con la direzione di OxideTerm per il workspace dei server remoti. Se OxideTerm aiuta il tuo workflow, una stella su GitHub, una riproduzione di issue, una correzione di traduzione, un plugin o una pull request aiutano il progetto ad andare avanti. --- ## Licenza **GPL-3.0** — questo software è software libero rilasciato sotto la [Licenza Pubblica Generale GNU v3.0](https://www.gnu.org/licenses/gpl-3.0.html). È possibile utilizzare, modificare e distribuire liberamente questo software secondo i termini della GPL-3.0. Qualsiasi opera derivata deve essere distribuita sotto la stessa licenza. OxideTerm è passato da **PolyForm Noncommercial 1.0.0** a **GPL-3.0** a partire dalla v1.0.0. Il cambio è stato intenzionale: niente cosplay "open source" con trappole non commerciali o clausole anti-concorrenza, ma libertà copyleft chiara per utenti, fork, redistributori e operatori commerciali. Codice pubblico non significa automaticamente open source. Se un progetto mostra una licenza open source nota ma aggiunge clausole come "niente redistribuzione", "niente repackaging", "niente prodotti concorrenti" o "niente piattaforme di distribuzione non autorizzate", è più marketing source-available che la libertà che gli utenti si aspettano dall'open source. OxideTerm non aggiunge clausole di non concorrenza o anti-redistribuzione: i termini GPL-3.0 sono tutti i termini. Testo completo: [Licenza Pubblica Generale GNU v3.0](https://www.gnu.org/licenses/gpl-3.0.html) --- ## Ringraziamenti [russh](https://github.com/warp-tech/russh) · [portable-pty](https://github.com/wez/wezterm/tree/main/pty) · [Tauri](https://tauri.app/) · [xterm.js](https://xtermjs.org/) · [CodeMirror](https://codemirror.net/) · [Radix UI](https://www.radix-ui.com/) ---

271.000+ righe di Rust e TypeScript — costruito con ⚡ e ☕

## Star History Star History Chart