Aperture
Diagnostic tui for Windows power users
Install / Use
/learn @stylebending/ApertureREADME
Installation (standalone/portable)
Download and run the latest release (1 MB executable)
That's all! Run as admin to access all features.
If you want to run the aperture command from any terminal:
Just move Aperture.exe to a folder that is already in your user's PATH
Then restart your terminal and run aperture from anywhere!
Installation (package managers)
WinGet
winget install aperture
Scoop
Scoop requires 100 GitHub stars or 2000 downloads to be in their Extras bucket, for now please use this installation command:
scoop install https://raw.githubusercontent.com/stylebending/scoop-bucket/refs/heads/main/bucket/Aperture.json
Chocolatey
choco install aperture
Installing with these package managers automatically adds Aperture to your path. After running one of those installation commands, just close and re-open your terminal and you'll immediately be able to run aperture from any terminal.
Usage
aperture
Screenshots
Locker Tab - Process Management
┌────────────────────────────────────────┬───────────────────┐
│ Aperture [Locker] [Controller] [Nexus] │ Keys │
├────────────────────────────────────────┼───────────────────┤
│ → Find and kill processes holding file │ Navigation │
│ locks │ j/k Move │
│ │ ↑/↓ Move │
│ ┌────────────────────────────────────┐ │ C-d/u Page │
│ │ Processes (Locker) [CPU▼] [45/230] │ │ Tab SwitchTab │
│ │ │ │ │
│ │ 1234 chrome.exe 15.2% 245.6MB │ │ Actions │
│ │ 5678 firefox.exe 8.1% 189.2MB │ │ / Search │
│ │ 9012 notepad.exe 0.5% 4.2MB │ │ s/S Sort │
│ │ 3456 code.exe 3.2% 56.8MB │ │ f FindLocks │
│ │ 7890 explorer.exe 2.1% 78.3MB │ │ K Kill │
│ │ ... │ │ r Refresh │
│ └────────────────────────────────────┘ │ Esc ClearFilt │
│ Sort: CPU ▼ │ │
└────────────────────────────────────────┴───────────────────┘
Controller Tab - Service Management
┌────────────────────────────────────────┬───────────────────┐
│ ... [Controller] ... │ Keys │
├────────────────────────────────────────┼───────────────────┤
│ → Start, stop, and manage Windows │ Navigation │
│ services │ j/k Move │
│ │ ... │
│ ┌────────────────────────────────────┐ │ │
│ │ Services (Controller) [Status▲] │ │ Actions │
│ │ │ │ / Search │
│ │ Windows Update Running ... │ │ s/S Sort │
│ │ Print Spooler Running ... │ │ Enter Toggle │
│ │ Bluetooth Service Stopped ... │ │ r Refresh │
│ │ ... │ │ Esc ClearFilt │
│ └────────────────────────────────────┘ │ │
│ Sort: Status ▲ │ │
└────────────────────────────────────────┴───────────────────┘
File Lock Search Modal
┌────────────────────────────────────────┐
│ Find Locking Processes │
├────────────────────────────────────────┤
│ Path: C:\Users\Me\Documents\file.txt │
│ │
│ Locking processes: │
│ │
│ PID: 5678 notepad.exe │
│ ▶ PID: 9012 chrome.exe │
│ PID: 12345 excel.exe │
│ │
│ [/] Edit Path [Enter] Search │
│ [j/k] Navigate [K] Kill [Esc] Close │
└────────────────────────────────────────┘
Note: Press / to enter input mode and type a file path. Enter a folder path to scan all files in that directory.
Acknowledgements
This project wouldn't be possible without:
- Rust - Systems programming language making Windows API access safe and fast
- ratatui - The beautiful terminal user interface framework powering Aperture
- crossterm - Cross-platform terminal manipulation and event handling
- tokio - The asynchronous runtime enabling responsive UI updates
- windows-rs - Microsoft's official Windows API bindings for Rust
- Vim / Neovim - For the motion-based navigation philosophy
Quick Start Guide
Find What's Locking a File
Can't delete a file because it's "in use"? Aperture can find the culprit:
- Press
fto open the File Lock Search modal - Press
/to enter input mode - Type the full path to the file (e.g.,
C:\Users\You\file.txt) - Press
Enterto search - See which processes have the file locked
- Navigate with
j/kand pressKto kill the process (requires admin)
Tip: Enter a folder path to scan all files in that directory and find all locks.
Kill a Runaway Process
- Switch to Locker tab (press
Tabuntil you see "Locker") - Sort by CPU usage: Press
suntil title shows "CPU", thenSto toggle direction - Find the process using high CPU
- Press
Kto kill it (requires admin privileges)
Manage Services
- Switch to Controller tab
- Sort by Status: Press
suntil title shows "Status" - Find the service you want to control
- Press
Enterto toggle start/stop (requires admin)
View Process Tree
See hierarchical process relationships (parent/child):
- Switch to Locker tab
- Press
tto toggle Tree View - Navigate the tree with
j/k - Press
Spaceto expand/collapse nodes (> / v indicators) - Search/filter still works in tree view - shows matching processes and their ancestor chain
View Process Details
See detailed information about a process:
- Switch to Locker tab
- Navigate to a process with
j/k - Press
dto open Process Details modal - View loaded modules, parent PID, CPU, and memory usage
- Press
Kin the modal to kill the process (requires admin) - Press
Escorqto close
Export Data
Export all data to JSON or CSV format:
- Press
eto open the Export modal - Press
jto export as JSON - Press
cto export as CSV - Files are saved to your Documents folder with timestamps
- Press
Escorqto cancel
Export includes: All processes, services, and network connections from all tabs
Filter and Search
- Press
/to enter search mode - Type to filter the current list
- Press
Enterto apply the filter and exit search mode - Press
Escto clear the filter
Example workflow:
- In Locker tab, press
/ - Type "chrome" - list filters to show only Chrome processes
- Navigate with
j/k - Press
Escto clear filter and see all processes again
Navigate Large Lists
j/kor↑/↓- Move one item at a timeCtrl+D- Page down (jump 10 items)Ctrl+U- Page up (jump 10 items)gg- Jump to first itemG- Jump to last itemTab/Shift+Tab- Switch between tabs
Sort Data
Each tab supports different sorting:
Locker (Processes):
- Press
sto cycle: Name → PID → CPU → Memory - Press
S(Shift+s) to toggle ascending/descending - Default: CPU descending (highest first)
Controller (Services):
- Press
sto cycle: Name → Status → Type - Press
Sto toggle order - Default: Status ascending (Running first)
Nexus (Connections):
- Press
sto cycle: State → PID → Protocol → Process - Press
Sto toggle order - Default: State ascending (ESTABLISHED first)
Keybindings
| Category | Key | Action | Context | Description |
|----------|-----|--------|---------|-------------|
| Navigation | Tab / Shift+Tab | Switch tabs | Global | Move between Locker/Controller/Nexus |
| | j / k | Navigate | Lists | Move down/up one item |
| | ↑ / ↓ | Navigate | Lists | Alternative to j/k |
| | Ctrl+D | Page down | Lists | Jump down 10 items |
| | Ctrl+U | Page up | Lists | Jump up 10 items |
| | gg | Jump to first | Lists | Jump to first item |
| | G | Jump to last | Lists | Jump to last item |
| Actions | / | Toggle search | Global | Enter/exit search mode |
| | Esc | Clear/Cancel | Global | Clear filter, exit search, or close modal |
| | s | Cycle sort | Global | Change sort key (Name, PID, Status, etc.) |
| | S (Shift+s) | Toggle order | Global | Switch ascending/descending |
| | r | Refresh | Global | Force refresh current tab |
| | f | Find locks | Global | Open file lock search modal |
| | e | Export | Global | Open export format modal |
| Locker | t | Tree view | Locker only | Toggle hierarchical process tree view |
| | Space | Expand/Collapse | Locker only | Expand/collapse tree node (tree mode only) |
| | d | Details | Locker only | Show p
