Aperture

Diagnostic tui for Windows power users



Quick Navigation

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 stylebending.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 (may be behind in version)

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] [Env] β”‚ Keys              β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β†’ Find and kill processes holding file locks β”‚ Navigation        β”‚
β”‚                                              β”‚ 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 β–Ό            CPU: 45.2%  Mem: 4.2/31.9GB β”‚             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Controller Tab - Service Management

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ ... [Controller] ...         [Nexus] [Env]   β”‚ Keys              β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β†’ Start, stop, and manage Windows services   β”‚ Navigation        β”‚
β”‚                                              β”‚ j/k     Move      β”‚
β”‚                                              β”‚ ↑/↓     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 β–²         CPU: 45.2%  Mem: 4.2/31.9GB β”‚             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Env Tab - Environment Variables

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ ... [Nexus] [Env]                            β”‚ Keys              β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
 β”‚ β†’ View user, system, and process environment β”‚ Navigation        β”‚
 β”‚   variables                                  β”‚ j/k     Move      β”‚
 β”‚                                              β”‚ ↑/↓     Move      β”‚
 β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”‚ ...               β”‚
 β”‚ β”‚ Environment [74/74 | Name β–²]         β”‚     β”‚ Actions           β”‚
 β”‚ β”‚                                      β”‚     β”‚ /       Search    β”‚
 β”‚ β”‚ ALLUSERSPROFILE  C:\ProgramData  Sys β”‚     β”‚ s/S     Sort      β”‚
 β”‚ β”‚ APPDATA          C:\Users\Me\... Usr β”‚     β”‚ a       Add       β”‚
 β”‚ β”‚ JAVA_HOME        C:\Java\...     Usr β”‚     β”‚ E       Edit      β”‚
 β”‚ β”‚ PATH             C:\Windows\...  Sys β”‚     β”‚ D       Delete    β”‚
 β”‚ β”‚ MY_VAR        some value         Usr β”‚     β”‚ r       Refresh   β”‚
 β”‚ β”‚ TEMP          C:\Temp            Sys β”‚     β”‚ Esc     ClearFilt β”‚
 β”‚ β”‚ ZENDATA_HOME  C:\zend\...        Prc β”‚     β”‚                   β”‚
 β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚ Quit              β”‚
 β”‚ Sort: Name β–²           CPU: 45.2%  Mem: 4.2/31.9GB β”‚ q Exit     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Scope colors: System=Cyan, User=Green, Process=Yellow. Process-only entries shown when not backed by registry.

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:

Quick Start Guide

Find What’s Locking a File

Can’t delete a file because it’s β€œin use”? Aperture can find the culprit:

  1. Press f to open the File Lock Search modal
  2. Press / to enter input mode
  3. Type the full path to the file (e.g., C:\Users\You\file.txt)
  4. Press Enter to search
  5. See which processes have the file locked
  6. Navigate with j/k and press K to 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

  1. Switch to Locker tab (press Tab until you see β€œLocker”)
  2. Sort by CPU usage: Press s until title shows β€œCPU”, then S to toggle direction
  3. Find the process using high CPU
  4. Press K to kill it (requires admin privileges)

Manage Services

  1. Switch to Controller tab
  2. Sort by Status: Press s until title shows β€œStatus”
  3. Find the service you want to control
  4. Press Enter to toggle start/stop (requires admin)

View Process Tree

See hierarchical process relationships (parent/child):

  1. Switch to Locker tab
  2. Press t to toggle Tree View
  3. Navigate the tree with j/k
  4. Press Space to expand/collapse nodes (> / v indicators)
  5. Search/filter still works in tree view - shows matching processes and their ancestor chain

View Process Details

See detailed information about a process:

  1. Switch to Locker tab
  2. Navigate to a process with j/k
  3. Press d to open Process Details modal
  4. View loaded modules, parent PID, CPU, and memory usage
  5. Press K in the modal to kill the process (requires admin)
  6. Press Esc or q to close

Manage Environment Variables

View, add, edit, and delete environment variables across scopes:

  1. Switch to Env tab (press Tab until you see β€œEnv”)
  2. See System (cyan), User (green), and Process (yellow) variables
  3. Sort by: Name or Scope β€” press s to cycle, S to toggle order
  4. Filter with / β€” search by name, value, or scope
  5. Process-only variables (set by current shell, no registry backing) shown in yellow
  6. Registry-backed variables only show once (Process copy hidden when redundant)
  7. Add a new variable: press a to open the edit modal with empty fields
  8. Edit a variable: navigate to an entry and press E
  9. Delete a variable: navigate to an entry and press D
  10. System scope operations require admin elevation
  11. Process-only entries are session-only β€” press a to persist one

Export Data

Export all data to JSON or CSV format:

  1. Press e to open the Export modal
  2. Press j to export as JSON
  3. Press c to export as CSV
  4. Files are saved to your Documents folder with timestamps
  5. Press Esc or q to cancel

Export includes: All processes, services, and network connections from all tabs

Example workflow:

  1. In Locker tab, press /
  2. Type β€œchrome” - list filters to show only Chrome processes
  3. Navigate with j/k
  4. Press Esc to clear filter and see all processes again

Sort Data

Each tab supports different sorting:

Locker (Processes):

Controller (Services):

Nexus (Connections):

Env (Environment Variables):

Keybindings

Category Key Action Context Description
Navigation Tab / Shift+Tab Switch tabs Global Move between Locker/Controller/Nexus/Env
Β  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 process details modal
Β  K Kill process Locker only Kill selected process (admin)
Controller Enter Toggle service Controller only Start/stop selected service (admin)
Env a Add var Env only Add new environment variable (User/System)
Β  E Edit var Env only Edit selected environment variable
Β  D Delete var Env only Delete selected environment variable
Env Edit Modal Tab/Shift+Tab Cycle fields Modal Switch between Name, Value, Scope fields
Β  Space Toggle scope Modal Switch between User and System scope
Β  Enter Save Modal Save changes to registry (green status)
Β  Esc Cancel Modal Discard changes
File Lock Modal / Edit path Modal Enter input mode to type path
Β  Enter Search Modal Execute search
Β  j/k Navigate Modal Move up/down results
Β  K Kill Modal Kill selected locking process
System q Quit Global Exit application

Search Mode Keybindings

When in search mode (/):

File Lock Search Modal

When file lock modal is open (f):

Directory Scanning:

Export Modal

When export modal is open (e):

Export Location: Files are saved to your Documents folder with timestamps (e.g., aperture_export_1234567890.json)

Process Details Modal

When process details modal is open (d in Locker tab):

Env Var Edit Modal

When env var add/edit modal is open (a or E in Env tab):

Configuration

Aperture currently uses sensible defaults optimized for real-time performance:

Setting Default Description
Data refresh interval 2 seconds How often to poll for new data
Navigation debounce 50ms Delay after navigation before accepting updates
CPU metrics interval 1 second How often to update CPU/memory usage

Note: Configurable polling intervals are on the roadmap. Currently, these values are optimized for smooth real-time performance without overwhelming the system.

Performance

Aperture is designed for real-time performance on Windows:

Smart Update System

Data Loading

Why Not WMI?

Aperture uses direct Win32 APIs instead of WMI for maximum performance:

Architecture

aperture/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ main.rs          # Entry point, event loop, keybindings
β”‚   β”œβ”€β”€ app.rs           # Application state, tab management
β”‚   β”œβ”€β”€ ui/              # UI rendering
β”‚   β”‚   β”œβ”€β”€ mod.rs       # Layout, sidebar, status bar
β”‚   β”‚   β”œβ”€β”€ locker.rs    # Process tab UI with sorting
β”‚   β”‚   β”œβ”€β”€ controller.rs # Services tab UI with sorting
β”‚   β”‚   β”œβ”€β”€ nexus.rs     # Network tab UI with sorting
β”‚   β”‚   └── env.rs       # Environment variables tab UI
β”‚   β”œβ”€β”€ sys/             # Windows API abstractions
β”‚   β”‚   β”œβ”€β”€ process.rs   # Process enumeration, CPU/memory metrics
β”‚   β”‚   β”œβ”€β”€ service.rs   # SCM/Service control
β”‚   β”‚   β”œβ”€β”€ network.rs   # IP Helper/TCP-UDP connections
β”‚   β”‚   β”œβ”€β”€ env.rs       # Registry and process environment variables
β”‚   β”‚   └── handle.rs    # File lock detection (Restart Manager)
β”‚   └── state/           # Per-tab state with sorting
β”‚       β”œβ”€β”€ locker.rs    # Process state, PID tracking
β”‚       β”œβ”€β”€ controller.rs # Service state, name tracking
β”‚       β”œβ”€β”€ nexus.rs     # Connection state, key tracking
β”‚       └── env.rs       # Environment variable state, filter, sort
β”œβ”€β”€ Cargo.toml
└── README.md

Win32 APIs Used

Feature API
Process Enumeration EnumProcesses, QueryFullProcessImageNameW, CreateToolhelp32Snapshot, Process32FirstW
Process Tree/Parent PID CreateToolhelp32Snapshot, Process32FirstW/NextW
Process Metrics GetProcessTimes, GetProcessMemoryInfo
Process Details EnumProcessModules, GetModuleBaseNameW, GetModuleFileNameExW
Elevation Check OpenProcessToken, GetTokenInformation
Service Management OpenSCManagerW, EnumServicesStatusExW, ControlService
Network Connections (IPv4) GetExtendedTcpTable, GetExtendedUdpTable
Network Connections (IPv6) GetExtendedTcpTable (AF_INET6), GetExtendedUdpTable (AF_INET6)
File Lock Detection RmRegisterResources, RmGetList (Restart Manager)
Environment Variables (Read) RegOpenKeyExW, RegEnumValueW, RegQueryInfoKeyW, RegCloseKey
Environment Variables (Write) RegSetValueExW, RegDeleteValueW, SendMessageTimeoutW

Roadmap

Completed βœ…

In Progress / TODO

Features

The Locker (Process Management)

The Controller (Service Management)

The Nexus (Network Monitor)

The Env (Environment Variables)

UI Features

License

MIT