
Yazi: Terminal file manager viết bằng Rust, thay thế ls/finder
Yazi (ya-zi) là terminal file manager mới nổi, được viết hoàn toàn bằng Rust, tập trung vào hiệu năng, UX hiện đại và khả năng mở rộng qua plugin Lua. Khác với ranger hay nnn, Yazi sử dụng non-blocking async I/O, render GPU-accelerated (via wgpu) và hỗ trợ preview file đa dạng (ảnh, video, PDF, code, archive) mà không làm chậm terminal. Khởi động Yazi chỉ mất vài mili-giây, cuộn thư mục hàng nghìn file mượt mà 60fps, và bộ nhớ tiêu thụ dưới 20MB. Đây là công cụ lý tưởng cho developer, sysadmin và power user sống trong terminal hàng giờ mỗi ngày. Xem trang chủ yazi-rs.github.io để cài đặt và tìm hiểu.
Yazi được phát triển bởi sxyazi từ năm 2023 và nhanh chóng đạt hơn 41.000 sao trên GitHub. Dự án này là minh chứng cho sức mạnh của Rust trong việc xây dựng CLI tool hiệu năng cao. Bài viết giải thích kỹ thuật Why is Yazi Fast? phân tích sâu về kiến trúc async I/O.

Giao diện và trải nghiệm người dùng
Yazi chia màn hình thành 3 pane: cây thư mục (tree), danh sách file (list), và preview pane. Phím tắt mặc định theo phong cách vi (hjkl, gg, G, /, n) nhưng hoàn toàn có thể remap qua file config YAML. Hỗ trợ mouse click, drag-drop, multi-select (Space), bulk rename, và tạo thư mục/file ngay trong UI. Preview pane tự động phát hiện loại file: ảnh hiển thị thumbnail (hỗ trợ EXIF), video phát preview frame đầu, PDF render trang đầu, code highlight syntax qua syntect, archive liệt kê nội dung không cần giải nén. Tất cả chạy bất đồng bộ — terminal không bị freeze khi preview file lớn.
Yazi hỗ trợ nhiều image protocol: Kitty graphics protocol, iTerm2 inline images, Sixel, và Chafa/Überzug++ fallback. Điều này giúp Yazi hoạt động tốt trên hầu hết terminal emulator hiện đại: Kitty, WezTerm, Ghostty, Alacritty, iTerm2, GNOME Terminal, Konsole. Xem tài liệu về image preview để cấu hình cho terminal của bạn.

Hiệu năng so với các lựa chọn hiện có
So với ranger (Python), Yazi nhanh hơn 10-50x khi liệt kê thư mục lớn nhờ async I/O và không có GIL bottleneck. So với nnn (C), Yazi cung cấp preview phong phú hơn mà vẫn giữ tốc độ gần như ngang ngửa. So với lf (Go), Yazi nhẹ hơn và không bị leak goroutine khi preview nhiều file liên tiếp. Benchmark thực tế trên thư mục 50,000 file: Yazi liệt kê trong 0.12s, ranger 2.8s, nnn 0.15s, lf 0.3s. Sử dụng bộ nhớ: Yazi 18MB, ranger 45MB, nnn 8MB, lf 25MB. Yazi đạt cân bằng tốt giữa features và resource usage.
Kiến trúc client-server của Yazi (không cần server process riêng) cho phép cross-instance communication và state persistence. Data Distribution Service (DDS) tích hợp mô hình publish-subscribe dựa trên Lua giúp các instance Yazi khác nhau chia sẻ trạng thái. Xem chi tiết kiến trúc tại Why is Yazi Fast?.

Plugin system và khả năng mở rộng
Yazi sử dụng Lua làm scripting language cho plugin — tương tự Neovim. Các plugin phổ biến: git status badge, docker container manager, npm/yarn script runner, fzf integration, zoxide jump, buku bookmark sync. Plugin API cung cấp hook vào sự kiện file operation, key binding, UI render, và CLI command. Ví dụ plugin git status: hiển thị indicator M/A/D/? cạnh file trong list pane, màu sắc theo theme. Plugin docker: list container, start/stop/logs ngay trong Yazi. Tất cả plugin tải động, không cần rebuild binary. Kho plugin chính thức tại yazi-rs/plugins.
Yazi cũng tích hợp sẵn với các công cụ developer phổ biến: ripgrep (tìm kiếm nội dung), fd (tìm file), fzf (fuzzy finder), zoxide (smart cd). Điều này tạo ra workflow mượt mà cho developer quen thuộc với các công cụ này. Xem hướng dẫn integration guide để cấu hình.
Cài đặt và cấu hình nhanh
Cài đặt qua package manager: `cargo install –locked yazi-fm yazi-cli` (Linux/macOS), `winget install yazi` (Windows), hoặc download binary release từ GitHub Releases. Config file tại `~/.config/yazi/yazi.toml` (behavior) và `~/.config/yazi/keymap.toml` (phím tắt). Theme được định nghĩa trong `theme.toml` với hỗ trợ 24-bit color. Nhiều theme có sẵn tại yazi-rs/flavors.
Để integrate với shell: thêm function `y() { local tmp=”$(mktemp -t “yazi-cwd.XXXXXX”)”; yazi “$@” –cwd-file=”$tmp”; if cwd=”$(cat — “$tmp”)” && [ -n “$cwd” ] && [ “$cwd” != “$PWD” ]; then cd — “$cwd”; fi; rm -f — “$tmp”; }` vào `.bashrc`/`.zshrc` — nhấn `q` trong Yazi sẽ cd shell vào thư mục hiện tại. Tính năng này rất hữu ích khi navigate qua nhiều thư mục sâu. Xem thêm tips tại shell integration.
