README.vi.md

June 2, 2026 · View on GitHub

OxideTerm

⚡ OxideTerm

Workspace SSH local-first cho những người sống trong terminal.
Kết nối tới máy từ xa một lần, rồi làm việc với shell, tệp, cổng, truyền tải, editor nhẹ và BYOK AI từ một nơi.
Ứng dụng Tauri native · SSH thuần Rust · không cần tài khoản cho workflow SSH chính
Zero Electron. Zero OpenSSL. Zero telemetry. Zero subscription. BYOK-first. SSH thuần Rust.

Phiên bản Nền tảng Giấy phép Rust Tauri Tổng lượt tải

Tải phiên bản mới nhất Tải bản beta mới nhất

🌐 oxideterm.app — Documentation & website

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

OxideTerm AI opening a terminal demo

Xem OxideSens làm theo yêu cầu của người dùng và mở một terminal bên trong OxideTerm.


Bạn có thể làm gì

  • Quản lý SSH terminal, SFTP, port forward, truyền tải trong terminal và local shell cạnh nhau
  • Tiếp tục làm việc khi mạng chập chờn nhờ Grace Period reconnect
  • Dùng nhà cung cấp AI của bạn để kiểm tra phiên đang chạy và thực hiện thao tác workspace đã duyệt

Tại sao chọn OxideTerm?

Nếu bạn quan tâm đến...OxideTerm mang lại...
Một remote node, nhiều công cụTerminal, SFTP, port forwarding, trzsz, mini IDE, monitoring và ngữ cảnh AI cùng gắn với một workspace SSH
Workflow SSH local-firstSSH, SFTP, forwarding, local shell và cấu hình hoạt động không cần đăng ký; cloud sync là tùy chọn qua plugin chính thức
BYOK AI thay vì credit nền tảngOxideSens dùng endpoint OpenAI/Ollama/DeepSeek/OpenAI-compatible của bạn với hỗ trợ MCP và RAG
Reconnect ổn địnhGrace Period thăm dò kết nối cũ 30 giây trước khi thay thế, giúp vim/htop/yazi sống sót qua mất mạng ngắn
Ứng dụng native Rust thuầnỨng dụng Tauri 2.0 native, russh 0.59 biên dịch với ring, không Electron, không OpenSSL/libssh2
An toàn thông tin xác thựcMật khẩu và API key ở trong OS keychain, metadata kết nối được niêm phong cục bộ, .oxide dùng ChaCha20-Poly1305 + Argon2id

Là gì / Không phải là gì

OxideTerm tập trung vào workflow SSH local-first. Nó dành cho người dùng muốn terminal, tệp, cổng, truyền tải, chỉnh sửa nhẹ và ngữ cảnh AI xoay quanh máy của họ và các node từ xa.

Nó không cố trở thành nền tảng cloud Agent được host, cũng không chỉ bán benchmark render terminal. Hướng đi hẹp hơn: làm việc từ xa có cảm giác như một workspace local, không cần tài khoản OxideTerm.


Ảnh chụp màn hình

Terminal SSH + OxideSens AI

Terminal SSH với thanh bên OxideSens AI
Trình quản lý tệp SFTP

Trình quản lý tệp SFTP hai bảng với hàng đợi truyền tải
IDE tích hợp (CodeMirror 6)

Chế độ IDE tích hợp với trình soạn thảo CodeMirror 6
Chuyển tiếp cổng thông minh

Chuyển tiếp cổng thông minh với phát hiện tự động

Tải xuống

Tải phiên bản mới nhất từ GitHub Releases.


Tổng quan tính năng

Danh mụcTính năng
TerminalPTY cục bộ (zsh/bash/fish/pwsh/WSL2), SSH từ xa, terminal serial cục bộ, chia bảng, phát sóng đầu vào, ghi/phát lại phiên (asciicast v2), kết xuất WebGL, 30+ giao diện + trình biên tập tùy chỉnh, bảng lệnh (⌘K), chế độ zen, truyền tệp trzsz tích hợp
SSH & Xác thựcPool kết nối & ghép kênh, ProxyJump (nhảy không giới hạn) với đồ thị topo, tự động kết nối lại với thời gian ân hạn, Chuyển tiếp Agent. Xác thực: mật khẩu, khóa SSH (RSA/Ed25519/ECDSA), SSH Agent, chứng chỉ, 2FA tương tác bàn phím, Known Hosts TOFU
SFTPTrình duyệt hai bảng, kéo thả, xem trước thông minh (ảnh/video/âm thanh/mã/PDF/hex/phông chữ), hàng đợi truyền tải với tiến trình & ETA, đánh dấu, giải nén lưu trữ
Chế độ IDECodeMirror 6 với 30+ ngôn ngữ, cây tệp + trạng thái Git, đa tab, giải quyết xung đột, terminal tích hợp. Agent từ xa tùy chọn cho Linux (9 kiến trúc bổ sung)
Chuyển tiếp cổngCục bộ (-L), từ xa (-R), SOCKS5 động (-D), I/O truyền thông điệp không khóa, tự động khôi phục khi kết nối lại, báo cáo ngừng hoạt động, hết thời gian nhàn rỗi
AI (OxideSens)Trợ lý hướng mục tiêu cho kết nối đã lưu, phiên SSH đang chạy, bộ đệm terminal, đường dẫn SFTP, cài đặt và mục trong cơ sở kiến thức; có thể chẩn đoán output từ xa, chạy lệnh đã được phê duyệt, kiểm tra tệp và giải thích lỗi mà không cần tài khoản OxideTerm
PluginTải ESM runtime, 18 không gian tên API, 24 thành phần UI Kit, API đóng băng + ACL Proxy, ngắt mạch, tự động vô hiệu hóa khi có lỗi
CLICông cụ đồng hành oxt: JSON-RPC 2.0 qua Unix Socket / Named Pipe, status/health/list/forward/config/connect/focus/attach/SFTP/import/AI, đầu ra dạng người đọc + JSON
Bảo mậtXuất .oxide được mã hóa (ChaCha20-Poly1305 + Argon2id 256 MB), cấu hình cục bộ được mã hóa khi lưu trữ, chuỗi khóa hệ điều hành, Touch ID (macOS), kho khóa mã hóa di động, TOFU khóa máy chủ, xóa bộ nhớ zeroize
i18n11 ngôn ngữ: EN, 简体中文, 繁體中文, 日本語, 한국어, FR, DE, ES, IT, PT-BR, VI

Bên trong

OxideTerm giữ bề mặt sản phẩm local-first, nhưng bên trong được xây cho workflow SSH nặng. Các chi tiết triển khai đầy đủ được giữ lại bên dưới.

Kiến trúc, nội bộ SSH, reconnect, AI, forwarding, plugin và hơn nữa

Kiến trúc — Giao tiếp hai mặt phẳng

OxideTerm tách dữ liệu terminal khỏi lệnh điều khiển thành hai mặt phẳng độc lập:

┌─────────────────────────────────────┐
│        Frontend (React 19)          │
│  xterm.js 6 (WebGL) + 19 stores     │
└──────────┬──────────────┬───────────┘
           │ Tauri IPC    │ WebSocket (nhị phân)
           │ (JSON)       │ cổng mỗi phiên
┌──────────▼──────────────▼───────────┐
│         Backend (Rust)              │
│  NodeRouter → SshConnectionRegistry │
│  Wire Protocol v1                   │
│  [Type:1][Length:4][Payload:n]      │
└─────────────────────────────────────┘
  • Mặt phẳng dữ liệu (WebSocket): mỗi phiên SSH có cổng WebSocket riêng. Các byte terminal chảy dưới dạng khung nhị phân với header Type-Length-Payload — không JSON serialization, không mã hóa Base64, không overhead trên đường dẫn nóng.
  • Mặt phẳng điều khiển (Tauri IPC): quản lý kết nối, thao tác SFTP, chuyển tiếp, cấu hình — JSON có cấu trúc, nhưng ngoài đường dẫn nóng.
  • Định danh theo nút: frontend không bao giờ chạm sessionId hay connectionId. Mọi thứ được định danh bằng nodeId, được giải quyết nguyên tử phía máy chủ bởi NodeRouter. Kết nối lại SSH thay đổi connectionId bên dưới — nhưng SFTP, IDE và chuyển tiếp hoàn toàn không bị ảnh hưởng.

🔩 SSH thuần Rust — russh 0.59

Toàn bộ ngăn xếp SSH là russh 0.59 biên dịch với backend mật mã ring:

  • Không phụ thuộc C/OpenSSL — toàn bộ ngăn xếp mật mã là Rust. Không còn debug "phiên bản OpenSSL nào?".
  • Giao thức SSH2 đầy đủ: trao đổi khóa, kênh, hệ thống con SFTP, chuyển tiếp cổng
  • Bộ mật mã ChaCha20-Poly1305 và AES-GCM, khóa Ed25519/RSA/ECDSA
  • AgentSigner tùy chỉnh: bọc SSH Agent hệ thống và thực thi trait Signer của russh, giải quyết vấn đề ràng buộc Send RPITIT bằng cách clone &AgentIdentity thành giá trị owned trước khi vượt qua .await
pub struct AgentSigner { /* wraps system SSH Agent */ }
impl Signer for AgentSigner { /* challenge-response via Agent IPC */ }
  • Hỗ trợ nền tảng: Unix (SSH_AUTH_SOCK), Windows (\\.\pipe\openssh-ssh-agent)
  • Chuỗi proxy: mỗi bước nhảy sử dụng xác thực Agent độc lập
  • Kết nối lại: AuthMethod::Agent được phát lại tự động

🔄 Kết nối lại thông minh với thời gian ân hạn

Hầu hết client SSH hủy mọi thứ khi ngắt kết nối và bắt đầu lại từ đầu. Bộ điều phối kết nối lại của OxideTerm áp dụng cách tiếp cận khác biệt cơ bản:

  1. Phát hiện hết thời gian heartbeat WebSocket (300 giây, được hiệu chỉnh cho macOS App Nap và throttling bộ hẹn giờ JS)
  2. Chụp ảnh toàn bộ trạng thái: bảng terminal, chuyển SFTP đang thực hiện, chuyển tiếp cổng đang hoạt động, tệp IDE đang mở
  3. Thăm dò thông minh: sự kiện visibilitychange + online kích hoạt keepalive SSH chủ động (~2 giây phát hiện so với 15–30 giây timeout thụ động)
  4. Thời gian ân hạn (30 giây): thăm dò kết nối SSH cũ qua keepalive — nếu phục hồi (ví dụ: chuyển điểm truy cập WiFi), ứng dụng TUI của bạn (vim, htop, yazi) sống sót hoàn toàn
  5. Nếu phục hồi thất bại → kết nối SSH mới → tự động khôi phục chuyển tiếp → tiếp tục chuyển SFTP → mở lại tệp IDE

Pipeline: queued → snapshot → grace-period → ssh-connect → await-terminal → restore-forwards → resume-transfers → restore-ide → verify → done

Toàn bộ logic chạy qua một ReconnectOrchestratorStore chuyên dụng — không có mã kết nối lại rải rác trong hooks hay components.

🛡️ Pool kết nối SSH

SshConnectionRegistry đếm tham chiếu dựa trên DashMap cho truy cập đồng thời không khóa:

  • Một kết nối, nhiều người dùng: terminal, SFTP, chuyển tiếp cổng và IDE chia sẻ một kết nối SSH vật lý duy nhất — không bắt tay TCP dư thừa
  • Máy trạng thái mỗi kết nối: connecting → active → idle → link_down → reconnecting
  • Quản lý vòng đời: hết thời gian nhàn rỗi có thể cấu hình (5 phút / 15 phút / 30 phút / 1 giờ / không bao giờ), khoảng keepalive 15 giây, phát hiện lỗi heartbeat
  • Heartbeat WsBridge: khoảng 30 giây, hết thời gian 5 phút — chịu được macOS App Nap và throttling JS trình duyệt
  • Lan truyền dây chuyền: lỗi máy chủ nhảy → tất cả nút hạ nguồn tự động đánh dấu link_down với đồng bộ trạng thái
  • Ngắt kết nối nhàn rỗi: phát connection_status_changed tới frontend (không chỉ node:state nội bộ), ngăn mất đồng bộ giao diện

🤖 OxideSens AI

Trợ lý AI ưu tiên quyền riêng tư với hai chế độ tương tác:

  • Bảng inline (⌘I): lệnh terminal nhanh, đầu ra được tiêm qua bracketed paste
  • Trò chuyện thanh bên: cuộc trò chuyện liên tục với lịch sử đầy đủ
  • Ngữ cảnh workspace hướng mục tiêu: xem kết nối đã lưu, phiên SSH đang chạy, bộ đệm terminal, đường dẫn SFTP, cài đặt và mục trong cơ sở kiến thức như các mục tiêu của workspace
  • Hành động đã phê duyệt: có thể chẩn đoán output từ xa, chạy lệnh đã được phê duyệt, kiểm tra tệp và giải thích lỗi mà không cần tài khoản OxideTerm
  • Hỗ trợ MCP: kết nối máy chủ Model Context Protocol bên ngoài (stdio & SSE) cho tích hợp công cụ bên thứ ba
  • Cơ sở kiến thức RAG (v0.20): nhập tài liệu Markdown/TXT vào bộ sưu tập có phạm vi (toàn cục hoặc mỗi kết nối). Tìm kiếm lai kết hợp chỉ mục từ khóa BM25 + tương đồng cosine vector qua Reciprocal Rank Fusion. Phân đoạn nhận biết Markdown bảo tồn phân cấp tiêu đề. Tokenizer bigram CJK cho tiếng Trung/Nhật/Hàn.
  • Nhà cung cấp: OpenAI, Ollama, DeepSeek, OneAPI, hoặc bất kỳ endpoint /v1/chat/completions nào
  • Bảo mật: khóa API lưu trong chuỗi khóa hệ điều hành; trên macOS, đọc khóa được bảo vệ bởi Touch ID qua LAContext — không cần entitlement hay ký mã, được cache sau lần xác thực đầu tiên mỗi phiên

Chuyển tiếp cổng — I/O không khóa

Chuyển tiếp cục bộ (-L), từ xa (-R) và SOCKS5 động (-D) đầy đủ:

  • Kiến trúc truyền thông điệp: kênh SSH thuộc sở hữu của một task ssh_io duy nhất — không Arc<Mutex<Channel>>, loại bỏ hoàn toàn tranh chấp mutex
  • Báo cáo ngừng hoạt động: các task chuyển tiếp chủ động báo cáo lý do thoát (ngắt SSH, đóng cổng từ xa, hết thời gian) để chẩn đoán rõ ràng
  • Tự động khôi phục: chuyển tiếp Suspended tự động tiếp tục khi kết nối lại mà không cần can thiệp người dùng
  • Hết thời gian nhàn rỗi: FORWARD_IDLE_TIMEOUT (300 giây) ngăn tích tụ kết nối zombie

📦 trzsz — Truyền Tệp Tích Hợp

Tải lên và tải xuống tệp trực tiếp qua phiên SSH — không cần kết nối SFTP:

  • Giao thức tích hợp: tệp được truyền dưới dạng các frame Base64 trong luồng terminal hiện có — hoạt động trong suốt qua chuỗi ProxyJump và tmux mà không cần cổng hoặc agent bổ sung
  • Hai chiều: server chạy tsz <tệp> để gửi tệp đến client; trz kích hoạt tải lên từ client; hỗ trợ kéo và thả
  • Hỗ trợ thư mục: truyền đệ quy qua trz -d / tsz -d
  • Giới hạn truyền tệp: giới hạn có thể cấu hình theo phiên cho kích thước chunk, số lượng tệp và tổng byte
  • I/O Tauri gốc: đọc và ghi tệp sử dụng hộp thoại tệp gốc của Tauri và Rust I/O — không bị giới hạn bộ nhớ trình duyệt
  • Thông báo trực tiếp: thông báo Toast cho bắt đầu, hoàn thành, hủy và lỗi — bao gồm gợi ý khi phát hiện trzsz nhưng tính năng bị tắt
  • Bật trong Cài đặt → Thiết bị đầu cuối → Truyền tệp tích hợp

🔌 Hệ thống plugin runtime

Tải ESM động với bề mặt API đóng băng và được tăng cường bảo mật:

  • API PluginContext: 18 không gian tên — terminal, ui, commands, settings, lifecycle, events, storage, system
  • 24 thành phần UI Kit: thành phần React dựng sẵn (nút, trường nhập liệu, hộp thoại, bảng…) được tiêm vào sandbox plugin qua window.__OXIDE__
  • Màng bảo mật: Object.freeze trên tất cả đối tượng ngữ cảnh, ACL dựa trên Proxy, whitelist IPC, ngắt mạch với tự động vô hiệu hóa sau lỗi lặp lại
  • Module chia sẻ: React, ReactDOM, zustand, lucide-react được cung cấp cho plugin sử dụng mà không trùng lặp bundle

⚡ Kết xuất thích ứng

Bộ lập lịch kết xuất ba tầng thay thế batching cố định requestAnimationFrame:

TầngKích hoạtTần suấtLợi ích
BoostDữ liệu khung ≥ 4 KB120 Hz+ (ProMotion gốc)Loại bỏ lag cuộn khi cat largefile.log
Bình thườngNhập liệu chuẩn60 Hz (RAF)Nền tảng mượt mà
Nhàn rỗi3 giây không I/O / tab ẩn1–15 Hz (suy giảm lũy thừa)Tải GPU gần bằng không, tiết kiệm pin

Các chuyển đổi hoàn toàn tự động — được điều khiển bởi lượng dữ liệu, đầu vào người dùng và API Page Visibility. Tab nền tiếp tục xả dữ liệu qua bộ hẹn giờ nhàn rỗi mà không đánh thức RAF.

🔐 Xuất mã hóa .oxide

Sao lưu kết nối di động, chống giả mạo:

  • Mã hóa xác thực ChaCha20-Poly1305 AEAD
  • KDF Argon2id: chi phí bộ nhớ 256 MB, 4 vòng lặp — chống brute-force GPU
  • Checksum toàn vẹn SHA-256
  • Nhúng khóa tùy chọn: khóa riêng tư được mã hóa base64 trong payload đã mã hóa
  • Phân tích trước: phân tích loại xác thực, phát hiện khóa thiếu trước khi xuất

📡 ProxyJump — Đa chặng nhận biết topo

  • Độ sâu chuỗi không giới hạn: Client → Chặng A → Chặng B → … → Đích
  • Tự động phân tích ~/.ssh/config, xây dựng đồ thị topo, tìm đường Dijkstra cho tuyến tối ưu
  • Nút nhảy tái sử dụng như phiên độc lập
  • Lan truyền lỗi dây chuyền: máy chủ nhảy hỏng → tất cả nút hạ nguồn tự động đánh dấu link_down

⚙️ Terminal cục bộ — PTY an toàn luồng

Shell cục bộ đa nền tảng qua portable-pty 0.8, được bảo vệ bởi feature gate local-terminal:

  • MasterPty bọc trong std::sync::Mutex — luồng I/O chuyên dụng giữ đọc PTY chặn khỏi vòng lặp sự kiện Tokio
  • Tự động phát hiện shell: zsh, bash, fish, pwsh, Git Bash, WSL2
  • cargo build --no-default-features loại bỏ PTY cho bản build di động/nhẹ

🪟 Tối ưu hóa Windows

  • ConPTY gốc: gọi trực tiếp API Windows Pseudo Console — hỗ trợ đầy đủ TrueColor và ANSI, không có WinPTY cũ
  • Quét shell: tự động phát hiện PowerShell 7, Git Bash, WSL2, CMD qua Registry và PATH

Và nhiều hơn nữa

  • Chế độ IDE: CodeMirror 6 qua SFTP, 24 ngôn ngữ, cây tệp với trạng thái Git, đa tab, giải quyết xung đột — agent từ xa tùy chọn (~1 MB) cho các tính năng nâng cao trên Linux
  • Trình phân tích tài nguyên: CPU/bộ nhớ/mạng trực tiếp qua kênh SSH liên tục đọc /proc/stat, tính toán dựa trên delta, tự động giảm xuống chỉ RTT trên hệ thống không phải Linux
  • Công cụ giao diện tùy chỉnh: 30+ giao diện tích hợp, trình biên tập trực quan với xem trước trực tiếp, 20 trường xterm.js + 24 biến màu UI, tự động suy diễn màu UI từ bảng màu terminal
  • Ghi phiên: định dạng asciicast v2, ghi và phát lại đầy đủ
  • Phát sóng đầu vào: gõ một lần, gửi đến tất cả bảng chia — thao tác máy chủ hàng loạt
  • Thư viện nền: hình nền từng tab, 16 loại tab, điều khiển độ mờ/làm mờ/khớp
  • CLI đồng hành (oxt): nhị phân ~1 MB, JSON-RPC 2.0 qua Unix Socket / Named Pipe, status/health/list/forward/config/connect/focus/attach/SFTP/import/AI với đầu ra dạng người đọc hoặc --json
  • WSL Graphics ⚠️ thử nghiệm: trình xem VNC tích hợp — 9 môi trường desktop + chế độ ứng dụng đơn, phát hiện WSLg, Xtigervnc + noVNC

Plugin chính thức

PluginMô tảKho lưu trữ
Cloud SyncĐồng bộ tự lưu trữ được mã hóa — tải lên và nhập snapshot .oxide qua WebDAV, HTTP JSON, Dropbox, Git hoặc S3oxideterm.cloud-sync
Telnet ClientTrình khách Telnet gốc cho bộ định tuyến, switch và thiết bị cũ — không cần file nhị phân bên ngoàioxideterm.telnet
📸 11 ngôn ngữ đang hoạt động

English

简体中文

繁體中文

日本語

한국어

Français

Deutsch

Español

Italiano

Português

Tiếng Việt

Yêu cầu runtime

OxideTerm sử dụng runtime WebView gốc do hệ điều hành cung cấp. Hầu hết người dùng đã có sẵn; chỉ cần cài thủ công nếu ứng dụng không khởi động hoặc môi trường của bạn không có internet.

Nền tảngPhụ thuộc runtime
WindowsWebView2 Runtime — được cài sẵn trên Windows 10 (1803+) và Windows 11. Đối với môi trường không có internet / mạng nội bộ, hãy sử dụng trình cài đặt độc lập Evergreen (ngoại tuyến, ~170 MB) hoặc triển khai runtime phiên bản cố định qua group policy.
macOSKhông cần (sử dụng WebKit gốc)
Linuxlibwebkit2gtk-4.1 (thường được cài sẵn trên các desktop hiện đại)

Chế độ di động

OxideTerm hỗ trợ chế độ di động hoàn toàn độc lập — tất cả dữ liệu (kết nối, bí mật, cài đặt) được lưu trữ bên cạnh tệp nhị phân của ứng dụng, lý tưởng cho USB hoặc môi trường ngoại tuyến.

Kích hoạt

Cách A — Tệp đánh dấu (đơn giản nhất): tạo một tệp trống tên portable (không có phần mở rộng) bên cạnh ứng dụng.

Nền tảngVị trí đặt tệp portable
macOSBên cạnh OxideTerm.app (cùng thư mục)
WindowsBên cạnh OxideTerm.exe
Linux (AppImage)Bên cạnh tệp .AppImage
/my-usb/
├── OxideTerm.app   (or .exe / .AppImage)
├── portable        ← tệp trống bạn tạo
└── data/           ← tự động tạo khi khởi chạy lần đầu

Cách B — portable.json (thư mục dữ liệu tùy chỉnh): đặt một tệp portable.json ở cùng vị trí:

{
  "enabled": true,
  "dataDir": "my-data"
}
  • enabled mặc định là true khi bỏ qua
  • dataDir phải là đường dẫn tương đối (không được dùng ..); mặc định là data

Cách hoạt động

  1. Lần chạy đầu tiên — Màn hình khởi động yêu cầu bạn tạo mật khẩu di động. Mật khẩu này mã hóa kho khóa cục bộ (ChaCha20-Poly1305 + Argon2id) và bảo vệ tất cả bí mật đã lưu.
  2. Lần chạy tiếp theo — Nhập mật khẩu để mở khóa. Trên macOS có Touch ID, bạn có thể bật mở khóa sinh trắc học trong Settings → General → Portable Runtime.
  3. Khóa phiên bản — Chỉ một phiên bản OxideTerm có thể sử dụng thư mục dữ liệu di động tại một thời điểm (data/.portable.lock).
  4. Quản lý — Thay đổi mật khẩu di động hoặc bật mở khóa sinh trắc học trong Settings → General → Portable Runtime.
  5. Tính di động — Sao chép toàn bộ thư mục (ứng dụng + tệp đánh dấu portable + data/) sang máy khác. Mật khẩu đi cùng kho khóa.

Tip

Cập nhật tự động được tắt trong chế độ di động. Để cập nhật, thay thế tệp nhị phân ứng dụng và giữ lại thư mục data/.


Bắt đầu nhanh

Yêu cầu

  • Rust 1.85+
  • Node.js 18+ (khuyến nghị pnpm)
  • Công cụ nền tảng:
    • macOS: Xcode Command Line Tools
    • Windows: Visual Studio C++ Build Tools
    • Linux: build-essential, libwebkit2gtk-4.1-dev, libssl-dev

Phát triển

git clone https://github.com/AnalyseDeCircuit/oxideterm.git
cd oxideterm && pnpm install

# Build CLI companion (cần thiết cho tính năng CLI)
pnpm cli:build

# Ứng dụng đầy đủ (frontend + backend Rust với hot reload)
pnpm run tauri dev

# Chỉ frontend (Vite trên cổng 1420)
pnpm dev

# Build sản phẩm
pnpm run tauri build

Ngăn xếp công nghệ

TầngCông nghệChi tiết
FrameworkTauri 2.0Nhị phân gốc, 25–40 MB
RuntimeTokio + DashMap 6Hoàn toàn bất đồng bộ, map đồng thời không khóa
SSHrussh 0.59 (ring)Thuần Rust, không phụ thuộc C, SSH Agent
PTY cục bộportable-pty 0.8Feature-gated, ConPTY trên Windows
FrontendReact 19.1 + TypeScript 5.8Vite 7, Tailwind CSS 4
Trạng tháiZustand 519 store chuyên biệt
Terminalxterm.js 6 + WebGLTăng tốc GPU, 60 fps+
Trình soạn thảoCodeMirror 630+ chế độ ngôn ngữ
Mã hóaChaCha20-Poly1305 + Argon2idAEAD + KDF tiêu tốn bộ nhớ (256 MB)
Lưu trữredb 2.1Store KV nhúng
i18ni18next 2511 ngôn ngữ × 22 không gian tên
PluginESM RuntimePluginContext đóng băng + 24 UI Kit
CLIJSON-RPC 2.0Unix Socket / Named Pipe

Quy mô dự án

Được đo bằng tokei, không tính dependency và artifact build.

Chỉ sốQuy mô hiện tại
Tổng mã nguồn286K+
TypeScript / TSX130K+
Rust100K+
Mã test frontend24K+
Tệp test frontend128
Tệp nguồn (src + src-tauri/src)664

Bảo mật

Mối quan tâmTriển khai
Mật khẩuChuỗi khóa hệ điều hành (macOS Keychain / Windows Credential Manager / libsecret)
Kho khóa di độngKho lưu trữ mã hóa ChaCha20-Poly1305 bên cạnh ứng dụng, tùy chọn liên kết sinh trắc học qua chuỗi khóa hệ điều hành
Khóa API AIChuỗi khóa hệ điều hành + xác thực sinh trắc học Touch ID trên macOS
Xuất.oxide: ChaCha20-Poly1305 + Argon2id (256 MB bộ nhớ, 4 vòng lặp)
Bộ nhớAn toàn bộ nhớ Rust + zeroize để xóa dữ liệu nhạy cảm
Khóa máy chủTOFU với ~/.ssh/known_hosts, từ chối thay đổi (ngăn MITM)
PluginObject.freeze + ACL Proxy, ngắt mạch, whitelist IPC
WebSocketToken dùng một lần với giới hạn thời gian

Lộ trình

  • Chuyển tiếp SSH Agent
  • Hỗ trợ ProxyCommand đầy đủ
  • Nhật ký kiểm toán
  • Nâng cao Agent
  • Tìm kiếm phiên & chuyển đổi nhanh
  • Chuyển sang Rust native qua GPUI — [đang tiến hành]

Hỗ trợ và bảo trì

OxideTerm được duy trì bởi một nhà phát triển độc lập theo nguyên tắc nỗ lực tối đa. Báo cáo lỗi và hồi quy có thể tái hiện được ưu tiên; yêu cầu tính năng luôn được hoan nghênh, nhưng không phải lúc nào cũng được triển khai.

Nếu OxideTerm giúp ích cho workflow của bạn, một GitHub star, bản tái hiện issue, sửa bản dịch, plugin hoặc pull request đều giúp dự án tiếp tục tiến lên.


Giấy phép

GPL-3.0 — phần mềm này là phần mềm tự do được cấp phép theo Giấy phép Công cộng GNU v3.0.

Bạn được tự do sử dụng, sửa đổi và phân phối phần mềm này theo các điều khoản của GPL-3.0. Bất kỳ tác phẩm phái sinh nào cũng phải được phân phối theo cùng giấy phép.

OxideTerm đã chuyển từ PolyForm Noncommercial 1.0.0 sang GPL-3.0 kể từ v1.0.0. Đây là lựa chọn có chủ đích: không cosplay "mã nguồn mở" bằng bẫy phi thương mại hay điều khoản cấm cạnh tranh, mà là quyền tự do copyleft rõ ràng cho người dùng, fork, bên phân phối lại và nhà vận hành thương mại.

Mã công khai không tự động là mã nguồn mở. Nếu một dự án treo một giấy phép mã nguồn mở quen thuộc nhưng lại thêm các điều khoản như "không được phân phối lại", "không được đóng gói lại", "không được tạo sản phẩm cạnh tranh" hoặc "không được phân phối trên nền tảng chưa được phê duyệt", đó giống tiếp thị source-available hơn là quyền tự do mà người dùng kỳ vọng ở mã nguồn mở. OxideTerm không thêm điều khoản chống cạnh tranh hay chống phân phối lại: các điều khoản GPL-3.0 là toàn bộ điều khoản.

Toàn văn: Giấy phép Công cộng GNU v3.0


Lời cảm ơn

russh · portable-pty · Tauri · xterm.js · CodeMirror · Radix UI


271.000+ dòng Rust & TypeScript — xây dựng với ⚡ và ☕

Star History

Star History Chart