A fast, keyboard-driven TUI package manager written in Rust.
Search 50,000+ packages in under 50ms. Install, remove, and update without leaving your terminal.
What is TRX?
TRX is a terminal UI built on top of your existing package manager. It gives you a unified, keyboard-first interface for searching, inspecting, and managing packages, whether you're on macOS with Homebrew, Arch with Pacman + AUR, or Debian/Ubuntu with APT.
No daemon. No config file. Just run trx.
Features
- Renderer built on
ratatuiwith deterministic layout and minimal redraw overhead - Fully non-blocking event loop using
tokio - Unified command model for package managers with pluggable backend architecture
- In-built fuzzy matcher optimized for substring scoring and ranking
- Self-updating mechanism – Checks for new releases on startup and updates automatically
- Stateless backend operations executed via system calls with structured output parsing
- Extensible design suitable for adding new package managers without modifying the core engine
Installation
One-liner (Recommended)
|
From source
...
Requirements: Rust 1.70+ · Unicode/truecolor terminal
Cargo
Usage
Keybindings
| Key | Action |
|---|---|
e |
Enter search mode |
↑ / ↓ or j / k |
Navigate list |
space |
Toggle package selection |
i |
Install selected |
x |
Remove selected |
U |
System upgrade |
R |
Refresh databases |
Tab |
Switch tab (Search → Installed → Updates) |
q / Esc |
Quit / exit current mode |
Architecture
src/
├── main.rs # Entry point, terminal setup
├── ui/
│ ├── app.rs # App state, event loop, channel polling
│ └── input.rs # Input mode, debounce logic
├── managers/
│ ├── mod.rs # PackageManager trait, shared parsing
│ ├── arch.rs # Pacman + AUR (yay) backend
│ ├── apt.rs # APT backend
│ └── brew.rs # Homebrew backend
└── fuzzy/
└── mod.rs # Scoring engine
PackageManager trait
Concurrency model
Search, list loads, and detail fetches all run on OS threads communicating via std::sync::mpsc. The main loop polls keyboard input with a short timeout, redraws each frame, and non-blockingly drains result channels.
Supported Package Managers
| Manager | Platform | Status |
|---|---|---|
| Pacman | Arch Linux | Implemented |
| yay (AUR) | Arch Linux | Implemented |
| APT | Debian / Ubuntu | Implemented |
| Homebrew | macOS | Implemented |
| dnf / yum | Fedora / RHEL | Planned |
| zypper | openSUSE | Planned |
| winget / scoop | Windows | Planned |
Roadmap
- Configurable keybindings via config file
- Pluggable themes and renderer settings
- Transaction history and rollback
- Batch mode for scripting / CI use
- Dependency graph visualizer
- Metadata caching for faster repeated searches
- Plugin system for custom backends and widgets
- Binary releases via GitHub Actions
Contributing
Contributions are welcome. If you're interested in Rust, terminal UIs, or package manager internals, pick an open issue or start a discussion.
See CONTRIBUTING.md for guidelines.
License
MIT. See LICENSE for details.