A native macOS app to visually manage your terminal aliases.
No more manually editing ~/.zshrc — add, edit, delete, tag and organize your shell aliases from a clean, native interface.
| Feature | Description |
|---|---|
| Parse & List | Automatically reads and parses aliases from ~/.zshrc |
| Add / Edit / Delete | Full CRUD with validation and duplicate detection |
| Enable / Disable | Toggle aliases on or off without deleting them |
| Search | Instantly filter by alias name, command, description, or tags |
| Sort | Sort by name, command, status, most used, or recently used |
| Duplicate | Clone an existing alias with one click |
| Auto Source | Runs source ~/.zshrc after every change |
| Backup | Create timestamped backups of your .zshrc |
| JSON Import / Export | Share or migrate aliases between machines |
| Native UI | Built with SwiftUI + NavigationSplitView (Finder-style layout) |
| Feature | Description |
|---|---|
| Categories / Tags | Tag aliases with git, docker, ssh... Sidebar tag filtering & chips in rows |
| Menu Bar Widget | Quick access from the menu bar — top aliases, copy commands, ⌘K |
| Undo / Redo | Full undo/redo stack for all changes — ⌘Z / ⌘⇧Z |
| Usage Statistics | Track how many times each alias was used, most used / never used views |
| Alias Test Runner | Run any alias command inline and see live output in the detail panel |
| Quick Search ⌘K | Spotlight-style floating search — find and copy any alias in 2 keystrokes |
| Syntax Highlighting | Command field highlights pipes |, flags, $ENV_VARS, strings |
| Theme Customization | 10 accent colors, compact/normal/spacious density modes (⌘,) |
| Alias Pack Templates | One-click import of 5 curated packs: Git, Docker, Kubernetes, Node/npm, System |
| Homebrew Cask | brew install --cask efekurucay/tap/alias-manager |
- macOS 14.0 (Sonoma) or later
- Xcode 15.2 or later
- Swift 5.9
git clone https://github.com/efekurucay/tam-cli.git
cd terminal-alias-manager
open AliasManager.xcodeproj
# Press ⌘R to build & runbrew tap efekurucay/tap
brew install --cask alias-manager| Shortcut | Action |
|---|---|
⌘N |
Add new alias |
⌘K |
Quick Search (Spotlight-style) |
⌘Z |
Undo last change |
⌘⇧Z |
Redo |
⌘R |
Refresh alias list |
⌘, |
Open Settings (theme, menu bar) |
Esc |
Cancel / close form |
AliasManager/
├── AliasManagerApp.swift ← App entry point, Settings scene
│
├── Models/
│ ├── AliasItem.swift ← Alias data model (+tags, usageCount, lastUsed)
│ ├── MetadataStore.swift ← Persists tags & stats (~/.config/alias-manager/)
│ ├── AppSettings.swift ← Theme & appearance preferences (@AppStorage)
│ └── AliasPack.swift ← 5 pre-built alias packs
│
├── Services/
│ ├── ZshrcService.swift ← Read/write/parse ~/.zshrc
│ ├── CommandRunner.swift ← Async zsh subprocess runner
│ └── MenuBarController.swift ← NSStatusItem + aliases menu
│
├── ViewModels/
│ └── AliasViewModel.swift ← Business logic, undo/redo, tag filtering, stats
│
└── Views/
├── ContentView.swift ← Main screen + StatsView
├── AliasRowView.swift ← Tag chips, usage badge, density-aware
├── AliasDetailView.swift ← Detail panel + Test Runner + Tags
├── AliasFormView.swift ← Add/Edit form + SyntaxHighlightedTextField + FlowLayout
├── QuickSearchView.swift ← ⌘K Spotlight-style overlay
├── AliasPacksView.swift ← Template pack browser
└── SettingsView.swift ← Accent color picker, density mode
- On launch — reads
~/.zshrc, parsesalias name='command'lines - Metadata — tags and usage stats are stored separately in
~/.config/alias-manager/metadata.json(zshrc stays clean) - On save — rewrites only the managed alias block, runs
source ~/.zshrc - Test Runner — spawns a
zsh -c "source ~/.zshrc; <command>"subprocess, captures stdout/stderr
Import pre-built alias collections with one click from the toolbar (Alias Packs):
| Pack | Count | Description |
|---|---|---|
| 🌿 Git | 17 | status, add, commit, push, branch, stash... |
| 🐳 Docker | 14 | ps, exec, logs, compose up/down... |
| ⚙️ Kubernetes | 12 | kubectl get/describe/logs/exec... |
| 📦 Node / npm | 13 | install, run dev/build/test, yarn... |
| 🖥️ System | 11 | ls, clear, reload, ip, ports... |
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes
- Push and open a Pull Request
MIT License — see LICENSE
Built with ❤️ using Swift & SwiftUI

