README.vi.md
June 2, 2026 · View on GitHub
⚡ 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.
🌐 oxideterm.app — Documentation & website
English | 简体中文 | 繁體中文 | 日本語 | 한국어 | Français | Deutsch | Español | Italiano | Português | Tiếng Việt
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-first | SSH, 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ảng | OxideSens dùng endpoint OpenAI/Ollama/DeepSeek/OpenAI-compatible của bạn với hỗ trợ MCP và RAG |
| Reconnect ổn định | Grace 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ực | Mậ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![]() |
Trình quản lý tệp SFTP![]() |
IDE tích hợp (CodeMirror 6)![]() |
Chuyển tiếp cổng thông minh![]() |
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ục | Tính năng |
|---|---|
| Terminal | PTY 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ực | Pool 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 |
| SFTP | Trì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ế độ IDE | CodeMirror 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ổng | Cụ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 |
| Plugin | Tả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 |
| CLI | Cô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ật | Xuấ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 |
| i18n | 11 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
sessionIdhayconnectionId. Mọi thứ được định danh bằngnodeId, được giải quyết nguyên tử phía máy chủ bởiNodeRouter. Kết nối lại SSH thay đổiconnectionIdbê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
AgentSignertùy chỉnh: bọc SSH Agent hệ thống và thực thi traitSignercủa russh, giải quyết vấn đề ràng buộcSendRPITIT bằng cách clone&AgentIdentitythà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:
- 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)
- 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ở
- Thăm dò thông minh: sự kiện
visibilitychange+onlinekích hoạt keepalive SSH chủ động (~2 giây phát hiện so với 15–30 giây timeout thụ động) - 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
- 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_downvới đồng bộ trạng thái - Ngắt kết nối nhàn rỗi: phát
connection_status_changedtới frontend (không chỉnode:statenộ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/completionsnà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_ioduy nhất — khôngArc<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
Suspendedtự độ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;trzkí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.freezetrê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ầng | Kích hoạt | Tần suất | Lợi ích |
|---|---|---|---|
| Boost | Dữ liệu khung ≥ 4 KB | 120 Hz+ (ProMotion gốc) | Loại bỏ lag cuộn khi cat largefile.log |
| Bình thường | Nhập liệu chuẩn | 60 Hz (RAF) | Nền tảng mượt mà |
| Nhàn rỗi | 3 giây không I/O / tab ẩn | 1–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:
MasterPtybọc trongstd::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-featuresloạ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
| Plugin | Mô 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 S3 | oxideterm.cloud-sync |
| Telnet Client | Trì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ài | oxideterm.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ảng | Phụ thuộc runtime |
|---|---|
| Windows | WebView2 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. |
| macOS | Không cần (sử dụng WebKit gốc) |
| Linux | libwebkit2gtk-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ảng | Vị trí đặt tệp portable |
|---|---|
| macOS | Bên cạnh OxideTerm.app (cùng thư mục) |
| Windows | Bê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"
}
enabledmặc định làtruekhi bỏ quadataDirphải là đường dẫn tương đối (không được dùng..); mặc định làdata
Cách hoạt động
- 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.
- 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.
- 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). - 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.
- 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ầng | Công nghệ | Chi tiết |
|---|---|---|
| Framework | Tauri 2.0 | Nhị phân gốc, 25–40 MB |
| Runtime | Tokio + DashMap 6 | Hoàn toàn bất đồng bộ, map đồng thời không khóa |
| SSH | russh 0.59 (ring) | Thuần Rust, không phụ thuộc C, SSH Agent |
| PTY cục bộ | portable-pty 0.8 | Feature-gated, ConPTY trên Windows |
| Frontend | React 19.1 + TypeScript 5.8 | Vite 7, Tailwind CSS 4 |
| Trạng thái | Zustand 5 | 19 store chuyên biệt |
| Terminal | xterm.js 6 + WebGL | Tăng tốc GPU, 60 fps+ |
| Trình soạn thảo | CodeMirror 6 | 30+ chế độ ngôn ngữ |
| Mã hóa | ChaCha20-Poly1305 + Argon2id | AEAD + KDF tiêu tốn bộ nhớ (256 MB) |
| Lưu trữ | redb 2.1 | Store KV nhúng |
| i18n | i18next 25 | 11 ngôn ngữ × 22 không gian tên |
| Plugin | ESM Runtime | PluginContext đóng băng + 24 UI Kit |
| CLI | JSON-RPC 2.0 | Unix 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ồn | 286K+ |
| TypeScript / TSX | 130K+ |
| Rust | 100K+ |
| Mã test frontend | 24K+ |
| Tệp test frontend | 128 |
Tệp nguồn (src + src-tauri/src) | 664 |
Bảo mật
| Mối quan tâm | Triển khai |
|---|---|
| Mật khẩu | Chuỗi khóa hệ điều hành (macOS Keychain / Windows Credential Manager / libsecret) |
| Kho khóa di động | Kho 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 AI | Chuỗ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) |
| Plugin | Object.freeze + ACL Proxy, ngắt mạch, whitelist IPC |
| WebSocket | Token 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à ☕














