⚡ OxideTerm
リモートサーバー向けの AI-native ワークスペース。
SSH でサーバーに接続し、terminal、ファイル、ポート、転送、軽量編集、OxideSens AIを 1 つの local-first アプリで扱えます。
ネイティブ Tauri アプリ · 純粋な Rust SSH · BYOK OxideSens AI · コア SSH ワークフローにアカウント不要
Electron ゼロ。OpenSSL ゼロ。テレメトリゼロ。サブスクゼロ。BYOK-first。純粋な Rust SSH。
🌐 oxideterm.app — Documentation & website
English | 简体中文 | 繁體中文 | 日本語 | 한국어 | Français | Deutsch | Español | Italiano | Português | Tiếng Việt
*OxideSens がユーザーの依頼に従い、OxideTerm 内でターミナルを開く様子です。*
---
## できること
- SSH ターミナル、SFTP、ポートフォワーディング、帯域内転送、ローカル shell を並べて管理
- Grace Period 再接続で、ネットワークが揺れても作業を続行
- OxideSens AIに、自分の AI provider 経由で live session の確認と承認済み workspace action の実行を任せる
---
## なぜ OxideTerm なのか?
| 課題 | OxideTerm の回答 |
|---|---|
| 1 つのリモートノード、多数のツール | ターミナル、SFTP、ポートフォワーディング、trzsz、軽量 IDE、監視、OxideSens AIが同じ SSH ワークスペースに結び付きます |
| Local-first な SSH ワークフロー | SSH、SFTP、フォワーディング、ローカル shell、設定管理はサインアップ不要。クラウド同期は[公式プラグイン](#公式プラグイン)で必要なときだけ有効化できます |
| プラットフォームクレジットではなく BYOK OxideSens AI | OxideSens は OpenAI/Ollama/DeepSeek/OpenAI 互換エンドポイントを使い、MCP、RAG、承認済み workspace action に対応します |
| 再接続の安定性 | Grace Period が旧接続を 30 秒プローブしてから置き換えるため、短いネットワーク断でも vim/htop/yazi が生き残れます |
| 純粋な Rust のネイティブアプリ | Tauri 2.0 ネイティブアプリ、`ring` でコンパイルされた russh 0.59、Electron なし、OpenSSL/libssh2 なし |
| 認証情報の安全性 | パスワードと API キーは OS キーチェーンに保存され、接続メタデータはローカルで保護され、`.oxide` は ChaCha20-Poly1305 + Argon2id で暗号化されます |
## 何であり / 何ではないか
OxideTerm は **リモートサーバー向け local-first AI workspace** に集中しています。ターミナル、ファイル、ポート、転送、軽量編集、OxideSens AIを、自分のマシンとリモートノード中心に扱いたいユーザー向けです。
ホスト型クラウド Agent プラットフォームや、ターミナル描画ベンチマークだけを目的にしたプロジェクトではありません。方向性はより狭く、OxideTerm アカウントなしでリモート作業を 1 つのローカルワークスペースのように扱うことです。
---
## スクリーンショット
SSH ターミナル + OxideSens AI
 |
SFTP ファイルマネージャー
 |
内蔵 IDE(CodeMirror 6)
 |
スマートポートフォワーディング
 |
---
## ダウンロード
[GitHub Releases](https://github.com/AnalyseDeCircuit/oxideterm/releases/latest) から最新版をダウンロードしてください。
---
## 機能概要
| カテゴリ | 機能 |
|---|---|
| **ターミナル** | ローカル PTY(zsh/bash/fish/pwsh/WSL2)、SSH リモート、ローカルシリアル端末、分割ペイン、ブロードキャスト入力、セッション録画・再生(asciicast v2)、WebGL レンダリング、30 以上のテーマ + カスタムエディター、コマンドパレット(`⌘K`)、Zen モード、**trzsz** 帯域内ファイル転送 |
| **SSH と認証** | 接続プーリングと多重化、ProxyJump(無制限ホップ)+トポロジーグラフ、Grace Period 付き自動再接続、Agent 転送。認証:パスワード、SSH キー(RSA/Ed25519/ECDSA)、SSH Agent、証明書、keyboard-interactive 2FA、Known Hosts TOFU |
| **SFTP** | デュアルペインブラウザー、ドラッグ&ドロップ、スマートプレビュー(画像/動画/音声/コード/PDF/Hex/フォント)、進捗・ETA 付き転送キュー、ブックマーク、アーカイブ展開 |
| **IDE モード** | CodeMirror 6、30 以上の言語、ファイルツリー + Git ステータス、マルチタブ、競合解決、統合ターミナル。Linux 向けオプションのリモートエージェント(9 種の追加アーキテクチャ) |
| **ポートフォワーディング** | Local (-L)、Remote (-R)、Dynamic SOCKS5 (-D)、ロックフリーなメッセージパッシング I/O、再接続時の自動復元、停止報告、アイドルタイムアウト |
| **AI(OxideSens)** | 保存済み接続、ライブ SSH セッション、ターミナルバッファ、SFTP パス、設定、ナレッジベース項目を対象として扱う target-first アシスタント。OxideTerm アカウントなしで、リモート出力の診断、承認済みコマンドの実行、ファイル確認、障害説明ができます |
| **プラグイン** | ランタイム ESM ローディング、18 の API 名前空間、24 の UI Kit コンポーネント、凍結 API + Proxy ACL、サーキットブレーカー、エラー時の自動無効化 |
| **CLI** | `oxt` コンパニオン:JSON-RPC 2.0 over Unix Socket / Named Pipe、status/health/list/forward/config/connect/focus/attach/SFTP/import/AI、ヒューマン & JSON 出力 |
| **セキュリティ** | .oxide 暗号化エクスポート(ChaCha20-Poly1305 + Argon2id 256 MB)、ローカル設定の保存時暗号化、OS キーチェーン、Touch ID(macOS)、ポータブル暗号化キーストア、ホストキー TOFU、`zeroize` メモリクリア |
| **i18n** | 11 言語:EN, 简体中文, 繁體中文, 日本語, 한국어, FR, DE, ES, IT, PT-BR, VI |
---
## 技術的な詳細
OxideTerm の表面は local-first に保ちつつ、内部は SSH 多用ワークフロー向けに作っています。実装の詳細は、エンジニアリング面を読みたい人のために下に残しています。
アーキテクチャ、SSH 内部、再接続、AI、フォワーディング、プラグインなど
### アーキテクチャ — デュアルプレーン通信
OxideTerm はターミナルデータとコントロールコマンドを 2 つの独立したプレーンに分離しています:
```
┌─────────────────────────────────────┐
│ 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] │
└─────────────────────────────────────┘
```
- **データプレーン(WebSocket)**:各 SSH セッションが専用の WebSocket ポートを持ちます。ターミナルバイトは Type-Length-Payload ヘッダー付きのバイナリフレームとして転送されます — JSON シリアライズなし、Base64 エンコードなし、ホットパスのオーバーヘッドはゼロです。
- **コントロールプレーン(Tauri IPC)**:接続管理、SFTP 操作、フォワーディング、設定 — 構造化 JSON ですがクリティカルパスの外にあります。
- **ノードファーストアドレッシング**:フロントエンドは `sessionId` や `connectionId` を直接操作しません。すべてが `nodeId` で指定され、サーバーサイドの `NodeRouter` がアトミックに解決します。SSH 再接続で内部の `connectionId` が変わっても、SFTP、IDE、フォワードは一切影響を受けません。
### 🔩 純粋な Rust SSH — russh 0.59
SSH スタック全体が **`ring`** 暗号バックエンドでコンパイルされた **russh 0.59** で構成されています:
- **C/OpenSSL 依存ゼロ** — 暗号スタック全体が Rust 実装。「どのバージョンの OpenSSL?」というデバッグが不要。
- 完全な SSH2 プロトコル:鍵交換、チャネル、SFTP サブシステム、ポートフォワーディング
- ChaCha20-Poly1305 および AES-GCM 暗号スイート、Ed25519/RSA/ECDSA キー
- カスタム **`AgentSigner`**:システム SSH Agent をラップし、russh の `Signer` トレイトを実装。`.await` をまたぐ際の RPITIT `Send` バウンド問題を、`&AgentIdentity` を所有値にクローンして解決
```rust
pub struct AgentSigner { /* wraps system SSH Agent */ }
impl Signer for AgentSigner { /* challenge-response via Agent IPC */ }
```
- **プラットフォーム対応**:Unix(`SSH_AUTH_SOCK`)、Windows(`\\.\pipe\openssh-ssh-agent`)
- **プロキシチェーン**:各ホップが独立して Agent 認証を使用
- **再接続**:`AuthMethod::Agent` が自動的にリプレイ
### 🔄 Grace Period 付きスマート再接続
多くの SSH クライアントは切断時にすべてを終了して最初からやり直します。OxideTerm の再接続オーケストレーターは根本的に異なるアプローチを取ります:
1. **検出** WebSocket ハートビートタイムアウト(300 秒、macOS App Nap と JS タイマースロットリングに最適化)
2. **スナップショット** 完全な状態を取得:ターミナルペイン、転送中の SFTP、アクティブなポートフォワード、開いている IDE ファイル
3. **インテリジェントプローブ**:`visibilitychange` + `online` イベントがプロアクティブな SSH keepalive をトリガー(受動的な 15〜30 秒のタイムアウトに対し約 2 秒で検出)
4. **Grace Period**(30 秒):旧 SSH 接続を keepalive でプローブ — 回復すれば(例:WiFi AP 切替)、TUI アプリ(vim、htop、yazi)は完全に無傷のまま生存
5. 回復に失敗した場合 → 新規 SSH 接続 → フォワードを自動復元 → SFTP 転送を再開 → IDE ファイルを再オープン
パイプライン:`queued → snapshot → grace-period → ssh-connect → await-terminal → restore-forwards → resume-transfers → restore-ide → verify → done`
すべてのロジックは専用の `ReconnectOrchestratorStore` を通じて実行されます — フックやコンポーネントに再接続コードは一切散在しません。
### 🛡️ SSH 接続プール
`DashMap` をバックエンドとした参照カウント方式の `SshConnectionRegistry` でロックフリーな並行アクセスを実現:
- **1 接続、複数コンシューマー**:ターミナル、SFTP、ポートフォワード、IDE が 1 本の物理 SSH 接続を共有 — 冗長な TCP ハンドシェイク不要
- **接続ごとのステートマシン**:`connecting → active → idle → link_down → reconnecting`
- **ライフサイクル管理**:設定可能なアイドルタイムアウト(5 分 / 15 分 / 30 分 / 1 時間 / 無制限)、15 秒の keepalive 間隔、ハートビート障害検出
- **WsBridge ハートビート**:30 秒間隔、5 分タイムアウト — macOS App Nap とブラウザの JS スロットリングに対応
- **カスケード伝播**:ジャンプホスト障害 → すべての下流ノードが自動的に `link_down` に、ステータス同期
- **アイドル切断**:フロントエンドに `connection_status_changed` を発行(内部の `node:state` だけではない)、UI の非同期を防止
### 🤖 OxideSens AI
プライバシーファーストの AI アシスタント、デュアルインタラクションモード:
- **インラインパネル**(`⌘I`):素早いターミナルコマンド、出力はブラケットペーストで挿入
- **サイドバーチャット**:完全な履歴付きの永続的な会話
- **Target-first ワークスペースコンテキスト**:保存済み接続、ライブ SSH セッション、ターミナルバッファ、SFTP パス、設定、ナレッジベース項目をワークスペース対象として扱います
- **承認済みアクション**:OxideTerm アカウントなしで、リモート出力の診断、承認済みコマンドの実行、ファイル確認、障害説明ができます
- **MCP サポート**:外部 [Model Context Protocol](https://modelcontextprotocol.io) サーバー(stdio & SSE)を接続してサードパーティツールを統合
- **RAG ナレッジベース**(v0.20):Markdown/TXT ドキュメントをスコープ付きコレクション(グローバルまたは接続単位)にインポート。Reciprocal Rank Fusion で BM25 キーワードインデックス + ベクトルコサイン類似度のハイブリッド検索を融合。Markdown 対応のチャンキングで見出し階層を保持。CJK バイグラムトークナイザーで中国語/日本語/韓国語に対応。
- **プロバイダー**:OpenAI、Ollama、DeepSeek、OneAPI、または任意の `/v1/chat/completions` エンドポイント
- **セキュリティ**:API キーは OS キーチェーンに保存、macOS ではキー読み取りは `LAContext` 経由の **Touch ID** で認証ゲート — エンタイトルメントやコード署名は不要、セッションごとに初回認証後キャッシュ
### ポートフォワーディング — ロックフリー I/O
完全な Local (-L)、Remote (-R)、Dynamic SOCKS5 (-D) フォワーディング:
- **メッセージパッシングアーキテクチャ**:SSH Channel は単一の `ssh_io` タスクが所有 — `Arc>` なし、ミューテックス競合を完全に排除
- **停止報告**:フォワードタスクが終了理由(SSH 切断、リモートポートクローズ、タイムアウト)を能動的に報告し、明確な診断を提供
- **自動復元**:`Suspended` 状態のフォワードは再接続時にユーザー操作なしで自動再開
- **アイドルタイムアウト**:`FORWARD_IDLE_TIMEOUT`(300 秒)でゾンビ接続の蓄積を防止
### 📦 trzsz — 帯域内ファイル転送
SFTP 接続不要で、SSH ターミナルセッションを通じて直接ファイルをアップロード・ダウンロード:
- **帯域内プロトコル**:ファイルは既存のターミナルストリーム内で Base64 エンコードフレームとして転送——追加ポートやエージェント不要で ProxyJump チェインや tmux を透過的に通過
- **双方向転送**:サーバーが `tsz ` を実行してクライアントへ送信;`trz` でクライアントアップロードを開始;ドラッグ&ドロップ対応
- **ディレクトリ対応**:`trz -d` / `tsz -d` による再帰的ディレクトリ転送
- **転送制限**:セッションごとにチャンクサイズ、ファイル数、総バイト数の上限を設定可能
- **ネイティブ Tauri I/O**:ファイルの読み書きは Tauri ネイティブファイルダイアログと Rust I/O を使用——ブラウザのメモリ制限なし
- **リアルタイム通知**:転送開始・完了・キャンセル・エラーの Toast 通知——trzsz を検出したが機能が無効の場合もヒントを表示
- **設定 → ターミナル → 帯域内転送** で有効化
### 🔌 ランタイムプラグインシステム
セキュリティ強化された凍結 API サーフェスを持つ動的 ESM ローディング:
- **PluginContext API**:18 の名前空間 — terminal、ui、commands、settings、lifecycle、events、storage、system
- **24 の UI Kit コンポーネント**:プラグインサンドボックスに `window.__OXIDE__` 経由で注入されるビルド済み React コンポーネント(ボタン、入力、ダイアログ、テーブル…)
- **セキュリティメンブレン**:すべてのコンテキストオブジェクトに `Object.freeze`、Proxy ベースの ACL、IPC ホワイトリスト、繰り返しエラー時の自動無効化付きサーキットブレーカー
- **共有モジュール**:React、ReactDOM、zustand、lucide-react がプラグイン用に公開され、重複バンドルを回避
### ⚡ アダプティブレンダリング
固定の `requestAnimationFrame` バッチ処理を置き換える 3 段階レンダースケジューラー:
| ティア | トリガー | レート | 効果 |
|---|---|---|---|
| **Boost** | フレームデータ ≥ 4 KB | 120 Hz+(ProMotion ネイティブ) | `cat largefile.log` でのスクロールラグを排除 |
| **Normal** | 通常のタイピング | 60 Hz(RAF) | スムーズなベースライン |
| **Idle** | 3 秒間 I/O なし / タブ非表示 | 1〜15 Hz(指数バックオフ) | GPU 負荷ほぼゼロ、バッテリー節約 |
遷移は完全に自動 — データ量、ユーザー入力、Page Visibility API に基づいて駆動。バックグラウンドタブは RAF を起動せずアイドルタイマーでデータをフラッシュし続けます。
### 🔐 .oxide 暗号化エクスポート
ポータブルで改ざん防止の接続バックアップ:
- **ChaCha20-Poly1305 AEAD** 認証付き暗号化
- **Argon2id KDF**:メモリコスト 256 MB、4 イテレーション — GPU ブルートフォース耐性
- **SHA-256** 整合性チェックサム
- **オプションの鍵埋め込み**:秘密鍵を Base64 エンコードして暗号化ペイロードに含める
- **プリフライト分析**:認証タイプの内訳、エクスポート前の不足キー検出
### 📡 ProxyJump — トポロジー対応マルチホップ
- 無制限のチェーン深度:`Client → Jump A → Jump B → … → Target`
- `~/.ssh/config` を自動解析、トポロジーグラフを構築、Dijkstra 経路探索で最適ルートを決定
- ジャンプノードを独立セッションとして再利用可能
- カスケード障害伝播:ジャンプホストのダウン → すべての下流ノードを自動的に `link_down` に設定
### ⚙️ ローカルターミナル — スレッドセーフ PTY
`portable-pty 0.8` によるクロスプラットフォームローカルシェル、`local-terminal` フィーチャーゲート:
- `MasterPty` は `std::sync::Mutex` でラップ — 専用 I/O スレッドでブロッキング PTY 読み取りを Tokio イベントループから分離
- シェル自動検出:`zsh`、`bash`、`fish`、`pwsh`、Git Bash、WSL2
- `cargo build --no-default-features` で PTY を除外し、モバイル/軽量ビルドに対応
### 🪟 Windows 最適化
- **ネイティブ ConPTY**:Windows Pseudo Console API を直接呼び出し — フル TrueColor と ANSI サポート、レガシー WinPTY 不要
- **シェルスキャナー**:レジストリと PATH から PowerShell 7、Git Bash、WSL2、CMD を自動検出
### その他の機能
- **IDE モード**:SFTP 経由の CodeMirror 6、24 言語、Git ステータス付きファイルツリー、マルチタブ、競合解決——Linux では機能強化のためオプションのリモートエージェント(~1 MB)が利用可能
- **リソースプロファイラー**:永続 SSH チャネルで `/proc/stat` を読み取り、デルタベース計算でリアルタイム CPU/メモリ/ネットワーク監視、非 Linux では RTT のみに自動縮退
- **カスタムテーマエンジン**:30 以上の内蔵テーマ、ライブプレビュー付きビジュアルエディター、20 の xterm.js フィールド + 24 の UI カラー変数、ターミナルパレットから UI カラーを自動導出
- **セッション録画**:asciicast v2 形式、完全な録画と再生
- **ブロードキャスト入力**:一度入力するとすべての分割ペインに送信 — バッチサーバー操作
- **背景ギャラリー**:タブごとの背景画像、16 のタブタイプ、不透明度/ぼかし/フィットコントロール
- **CLI コンパニオン**(`oxt`):約 1 MB のバイナリ、JSON-RPC 2.0 over Unix Socket / Named Pipe、status/health/list/forward/config/connect/focus/attach/SFTP/import/AI をヒューマンまたは `--json` 出力
- **WSL Graphics** ⚠️ 実験的:内蔵 VNC ビューア — 9 つのデスクトップ環境 + 単一アプリモード、WSLg 検出、Xtigervnc + noVNC
### 公式プラグイン
| プラグイン | 説明 | リポジトリ |
|---|---|---|
| **Cloud Sync** | 暗号化セルフホスト同期 — WebDAV、HTTP JSON、Dropbox、Git、S3 経由で `.oxide` スナップショットのアップロード・インポート | [oxideterm.cloud-sync](https://github.com/AnalyseDeCircuit/oxideterm.cloud-sync) |
| **Telnet Client** | ルーター、スイッチ、レガシーデバイス向けのネイティブTelnetクライアント — 外部バイナリ不要 | [oxideterm.telnet](https://github.com/AnalyseDeCircuit/oxideterm.telnet) |
📸 11 言語の実動作
 English |
 简体中文 |
 繁體中文 |
 日本語 |
 한국어 |
 Français |
 Deutsch |
 Español |
 Italiano |
 Português |
 Tiếng Việt |
|
---
## ランタイム要件
OxideTerm は OS が提供するネイティブ WebView ランタイムを使用します。ほとんどの環境ではすでにインストール済みです。アプリが起動しない場合やエアギャップ環境の場合のみ、手動でインストールしてください。
| プラットフォーム | ランタイム依存関係 |
|---|---|
| **Windows** | [WebView2 ランタイム](https://developer.microsoft.com/en-us/microsoft-edge/webview2/) — Windows 10(1803+)および Windows 11 にはプリインストール済み。**エアギャップ / イントラネット**環境では、[Evergreen スタンドアロンインストーラー](https://developer.microsoft.com/en-us/microsoft-edge/webview2/#download)(オフライン、約 170 MB)を使用するか、グループポリシーで**固定バージョン**ランタイムをデプロイしてください。 |
| **macOS** | なし(ネイティブ WebKit を使用) |
| **Linux** | `libwebkit2gtk-4.1`(モダンなデスクトップでは通常プリインストール済み) |
---
## ポータブルモード
OxideTerm は完全に自己完結型のポータブルモードをサポートしています——すべてのデータ(接続、シークレット、設定)がアプリケーションバイナリの横に保存され、USB ドライブやエアギャップ環境に適しています。
### 有効化方法
**方法 A — マーカーファイル**(最も簡単):アプリの横に `portable` という名前の空ファイル(拡張子なし)を作成します。
| プラットフォーム | `portable` ファイルの配置場所 |
|---|---|
| **macOS** | `OxideTerm.app` の横(同階層ディレクトリ) |
| **Windows** | `OxideTerm.exe` の横 |
| **Linux (AppImage)** | `.AppImage` ファイルの横 |
```
/my-usb/
├── OxideTerm.app (or .exe / .AppImage)
├── portable ← 作成する空ファイル
└── data/ ← 初回起動時に自動作成
```
**方法 B — `portable.json`**(カスタムデータディレクトリ):同じ場所に `portable.json` を配置します:
```json
{
"enabled": true,
"dataDir": "my-data"
}
```
- `enabled` は省略時デフォルトで `true`
- `dataDir` は**相対パス**である必要があります(`..` は使用不可);省略時デフォルトは `data`
### 動作の仕組み
1. **初回起動** — ブートストラップ画面でポータブルパスワードの作成が求められます。このパスワードでローカルキーストア(ChaCha20-Poly1305 + Argon2id)を暗号化し、すべての保存済みシークレットを保護します。
2. **次回以降の起動** — パスワードを入力してロック解除します。Touch ID 対応の macOS では、**Settings → General → Portable Runtime** で生体認証ロック解除をオプションで有効にできます。
3. **インスタンスロック** — 同時に 1 つの OxideTerm インスタンスのみがポータブルデータディレクトリを使用できます(`data/.portable.lock`)。
4. **管理** — **Settings → General → Portable Runtime** でポータブルパスワードの変更や生体認証ロック解除の切り替えができます。
5. **ポータビリティ** — フォルダ全体(アプリ + `portable` マーカー + `data/`)を別のマシンにコピーするだけで使えます。パスワードはキーストアと一緒に携帯されます。
> [!TIP]
> ポータブルモードでは自動更新は無効です。更新するには、`data/` ディレクトリを保持したままアプリケーションバイナリを置き換えてください。
---
## クイックスタート
### 前提条件
- **Rust** 1.85 以上
- **Node.js** 18 以上(pnpm 推奨)
- **プラットフォームツール**:
- macOS:Xcode コマンドラインツール
- Windows:Visual Studio C++ ビルドツール
- Linux:`build-essential`、`libwebkit2gtk-4.1-dev`、`libssl-dev`
### 開発
```bash
git clone https://github.com/AnalyseDeCircuit/oxideterm.git
cd oxideterm && pnpm install
# CLI コンパニオンをビルド(CLI 機能に必要)
pnpm cli:build
# フルアプリ(フロントエンド + Rust バックエンド、ホットリロード付き)
pnpm run tauri dev
# フロントエンドのみ(Vite、ポート 1420)
pnpm dev
# プロダクションビルド
pnpm run tauri build
```
---
## テックスタック
| レイヤー | テクノロジー | 詳細 |
|---|---|---|
| **フレームワーク** | Tauri 2.0 | ネイティブバイナリ、25〜40 MB |
| **ランタイム** | Tokio + DashMap 6 | 完全非同期、ロックフリー並行マップ |
| **SSH** | russh 0.59(`ring`) | 純粋な Rust、C 依存ゼロ、SSH Agent |
| **ローカル PTY** | portable-pty 0.8 | フィーチャーゲート、Windows は ConPTY |
| **フロントエンド** | React 19.1 + TypeScript 5.8 | Vite 7、Tailwind CSS 4 |
| **状態管理** | Zustand 5 | 19 の専用ストア |
| **ターミナル** | xterm.js 6 + WebGL | GPU アクセラレーション、60fps 以上 |
| **エディター** | CodeMirror 6 | 30 以上の言語モード |
| **暗号化** | ChaCha20-Poly1305 + Argon2id | AEAD + メモリハード KDF(256 MB) |
| **ストレージ** | redb 2.1 | 組込み KV ストア |
| **i18n** | i18next 25 | 11 言語 × 22 名前空間 |
| **プラグイン** | ESM ランタイム | 凍結 PluginContext + 24 UI Kit |
| **CLI** | JSON-RPC 2.0 | Unix Socket / Named Pipe |
---
## プロジェクト規模
依存関係とビルド成果物を除外して `tokei` で計測しています。
| 指標 | 現在の規模 |
|---|---:|
| 総コード量 | 286K+ |
| TypeScript / TSX | 130K+ |
| Rust | 100K+ |
| フロントエンドテストコード | 24K+ |
| フロントエンドテストファイル | 128 |
| ソースファイル(`src` + `src-tauri/src`) | 664 |
---
## セキュリティ
| 項目 | 実装 |
|---|---|
| **パスワード** | OS キーチェーン(macOS Keychain / Windows Credential Manager / libsecret) |
| **ポータブルキーストア** | ChaCha20-Poly1305 暗号化ボールト(アプリの横に配置)、OS キーチェーン経由で生体認証バインドがオプション |
| **AI API キー** | OS キーチェーン + macOS での Touch ID 生体認証ゲート |
| **エクスポート** | .oxide:ChaCha20-Poly1305 + Argon2id(メモリ 256 MB、4 イテレーション) |
| **メモリ** | Rust メモリ安全性 + 機密データの `zeroize` クリア |
| **ホストキー** | `~/.ssh/known_hosts` による TOFU、変更検出で拒否(MITM 防止) |
| **プラグイン** | Object.freeze + Proxy ACL、サーキットブレーカー、IPC ホワイトリスト |
| **WebSocket** | 時間制限付きシングルユーストークン |
---
## ロードマップ
- [x] SSH Agent フォワーディング
- [x] 完全な ProxyCommand サポート
- [ ] 監査ログ
- [ ] Agent 機能強化
- [ ] セッション検索とクイック切替
- [x] GPUI(ZedのGPUアクセラレーションフレームワーク)によるRustネイティブ移行 — [進行中]
---
## サポートとメンテナンス
バグ報告と再現可能なリグレッションを優先して対応します。機能リクエストは範囲、安全性、OxideTerm の remote-server workspace の方向性との整合性に基づいて検討します。
OxideTerm があなたのワークフローに役立ったなら、GitHub スター、再現手順、翻訳修正、プラグイン、Pull Request のいずれもプロジェクトを前に進める助けになります。
---
## ライセンス
**GPL-3.0** — 本ソフトウェアは [GNU 一般公衆利用許諾書 v3.0](https://www.gnu.org/licenses/gpl-3.0.html) のもとで公開されているフリーソフトウェアです。
GPL-3.0 の条件のもとで、本ソフトウェアを自由に使用、修正、配布できます。派生物は同じライセンスのもとで配布する必要があります。
OxideTerm は v1.0.0 から **PolyForm Noncommercial 1.0.0** から **GPL-3.0** に切り替わりました。この移行は意図的です。非商用トラップや競業禁止条項を抱えた「オープンソースごっこ」ではなく、ユーザー、fork、再配布者、商用運用者に明確な copyleft の自由を提供するためです。
コードが公開されているだけでは、自動的にオープンソースとは言えません。よく知られたオープンソースライセンスを掲げながら、「再配布禁止」「再パッケージ禁止」「競合製品禁止」「未承認プラットフォームでの配布禁止」といった追加条項を重ねるなら、それはユーザーが期待するオープンソースの自由ではなく、source-available の看板に近いものです。OxideTerm は競業禁止や反再配布の追加条項を加えません。GPL-3.0 の条項がすべてです。
全文:[GNU 一般公衆利用許諾書 v3.0](https://www.gnu.org/licenses/gpl-3.0.html)
---
## 謝辞
[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/)
---
286,000 行以上のコード — ⚡ と ☕ で構築
## Star History