A TUI application for viewing Azure resources, inspired by lazydocker. Browse Azure subscriptions, resource groups, and resources with an interactive terminal interface.
About This Project: Built through AI pair programming with OpenCode. See AGENTS.md for development guidelines and Security for security information. It is provided as-is without warranties (MIT License).
- Full Resource Hierarchy: Browse Subscriptions → Resource Groups → Resources
- Multiple Authentication Methods: Supports Azure CLI, Azure PowerShell, Managed Identity, Environment Variables, and more
- Rich Detail Views:
- Summary view with color-coded keys and formatted nested properties
- JSON view with syntax highlighting
- Scrollable content for long resource details
- Keyboard and Mouse Navigation:
- Tab/Shift+Tab to cycle between panels
- Arrows to navigate in panels
- Enter/click to drill down hierarchy
- Visual focus indicators (green border on active panel)
- Mouse support (click, scrolling)
- Search & Filter: Real-time search with
/key across all panels (matches displayed text including suffixes) - Open portal link: Open portal link to subscription, resource group or resource in browser
- Copy portal link: Copy link to subscription, resource group or resource to clipboard
- Smart Resource Loading: Fetches full resource details with provider-specific API versions
- Background Preloading and Caching: Background preloading and multi-tier caching for instant navigation between previously viewed resources
See PLAN.md for implementation details and roadmap.
- Go: 1.26.1+ (only needed to install from source)
- Terminal: Modern terminal with Unicode and 256-color support (IDE consoles not recommended). Some recommendations:
- MacOS:Ghostty, iTerm2, Terminal.app
- Linux: Ghostty, Alacritty, Kitty, etc.
- Windows: Windows Terminal
- Azure account with appropriate permissions
- Azure CLI installed (optional, for
az loginconvenience method)
Download pre-built binaries for Linux, macOS, and Windows from the releases page. Each release includes installation instructions specific to that version.
go install github.com/matsest/lazyazure@latestOr clone and build:
git clone https://github.com/matsest/lazyazure.git
cd lazyazure
make buildNote: Using make build injects version information (git commit) into the binary. Plain go build . works but shows dev (unknown) for version.
- Authenticate
# Azure CLI example az login
See other methods under authentication.
- Run lazyazure:
lazyazure
lazyazure --help # short: -hlazyazure --version # short: -vlazyazure --check-updateChecks the latest release on GitHub and compares with your current version. Exit codes:
0: Up to date or development build1: Update available2: Error checking for updates
Note: Development builds (e.g., dev, -dirty, or commits ahead of a tag) skip version comparison but still show the latest available version.
Navigation:
- ↑ / ↓ or j / k: Navigate items in current panel
- Tab: Switch focus forward between panels (Subscriptions → Resource Groups → Resources → Details)
- Shift+Tab: Switch focus backward between panels (Details → Resources → Resource Groups → Subscriptions)
- Enter (on subscription): Load resource groups for that subscription
- Enter (on resource group): Load resources in that resource group
- Enter (on resource): View resource details and focus right panel
Mouse Support:
- Click panels: Focus any panel (Subscriptions, Resource Groups, Resources, or Details)
- Click list items: Select and trigger Enter action (same as pressing Enter)
- Click tabs: Switch between Summary and JSON views in the details panel
- Scroll: Navigate items in current panel
- Right Click list items: Copy portal url (same as 'c' shortcut)
- Middle Click list items: Open portal url (same as 'o' shortcut)
Search:
- /: Activate search mode for current panel (matches name, location, type, etc.)
- Characters (in search): Type to filter list
- Backspace: Delete last character
- Ctrl+U: Clear entire search
- Ctrl+W: Delete last word
- Enter: Confirm search and exit search mode
- Escape: Cancel search and clear filter
View Controls:
- [ and ]: Switch between Summary and JSON tabs
- Summary: Color-coded keys (green) with formatted values
- JSON: Syntax highlighted with proper formatting
- ↑ / ↓ or j / k (in details panel): Scroll content up/down
- PgUp / PgDn: Scroll content by page
- r: Refresh current panel data
Main Panel Search (when viewing resource details):
- /: Search within the details panel (highlights matching lines)
- Characters (in search): Type to find matches
- Backspace: Delete last character
- Ctrl+U: Clear entire search
- Ctrl+W: Delete last word
- n: Jump to next match
- N: Jump to previous match
- Enter: Confirm search and exit input mode
- Escape: Clear search and remove highlights
Application:
- q or Ctrl+C: Quit
- c: Copy portal link to clipboard (option: Mouse Right click)
- o: Open portal link in browser (alternative: Mouse Middle click)
- ?: Show version information and check for updates (auto-dismisses after 5 seconds or press Escape)
LazyAzure uses Azure's DefaultAzureCredential which automatically tries multiple authentication methods in order:
- Environment Variables - Set
AZURE_CLIENT_ID,AZURE_CLIENT_SECRET, andAZURE_TENANT_ID - Managed Identity - Automatic authentication when running in Azure (VMs, containers, etc.)
- Azure CLI - Run
az login(convenient for local development) - Azure PowerShell - Uses PowerShell credentials if available
- Visual Studio Code - Uses VS Code Azure extension credentials
- Azure Developer CLI - Uses
azdcredentials
For most users, simply run az login before starting lazyazure.
LazyAzure includes a demo mode that runs with mock Azure data - no Azure credentials required! This is perfect for:
- Creating GIFs or screenshots for documentation
- Testing the UI without a real Azure subscription
- Demonstrating features to users
To run in demo mode:
# Small dataset (2 subs, 4 RGs each, 2-4 resources each)
LAZYAZURE_DEMO=1 lazyazure
# Large dataset (15 subs, 20 RGs each, 15 resources = 4,500 total resources)
LAZYAZURE_DEMO=2 lazyazureDemo mode provides:
- Multiple mock subscriptions with different environments (Production, Development, Staging, etc.)
- Resource groups per subscription with various purposes (networking, databases, web-apps, etc.)
- 15 different Azure resource types (VMs, Storage Accounts, Key Vaults, SQL Databases, Load Balancers, etc.)
- Realistic nested properties and tags
All data in demo mode is completely fake and safe to display publicly.
To enable debug logging for troubleshooting, set the LAZYAZURE_DEBUG environment variable:
LAZYAZURE_DEBUG=1 lazyazureDebug logs are written to ~/.lazyazure/debug.log. The file is overwritten for each run of the program.
To view logs:
cat ~/.lazyazure/debug.logLazyAzure caches resource groups and resources to improve performance. You can configure the cache size using the LAZYAZURE_CACHE_SIZE environment variable:
| Size | RG Cache | Resource Cache | Approx Memory | Best For |
|---|---|---|---|---|
| small | 100 | 500 | ~20-40 MB | Low memory environments (<4GB) |
| medium | 300 | 1,500 | ~60-120 MB | Default value - Most users |
| large | 600 | 3,000 | ~120-240 MB | 100+ subscriptions, high activity |
Examples:
# Default (medium)
lazyazure
# Use small cache for constrained environments
LAZYAZURE_CACHE_SIZE=small lazyazure
# Use large cache for better performance with many subscriptions
LAZYAZURE_CACHE_SIZE=large lazyazureThe project aims to have full cross-platform support.
- Linux: Full support (main development platform)
- macOS: Full support
- Windows: Good support (recommend Windows Terminal; classic CMD/PowerShell not recommended)
Linux clipboard requires xclip or xsel (X11) or wl-copy (Wayland). macOS and Windows have native clipboard support. If using WSL it should pick up the Windows clipboard.
- Phase 1 (MVP): ✅ Complete - Auth & subscriptions working
- Phase 2: ✅ Complete - Resource groups with stacked layout
- Phase 3: ✅ Complete - Resources browser with 3-level hierarchy
- Phase 4: 📝 In progress - Polish, performance improvements & advanced features
See PLAN.md for the full implementation roadmap.
- gocui - TUI framework
- Chroma - Syntax highlighting for JSON
- Azure SDK for Go:
azidentity- Authenticationazcore- Core typesarmsubscriptions- Subscription managementarmresources- Resource management
You can see all dependencies in dependency graph.
LazyAzure uses Microsoft's official Azure SDK for Go with DefaultAzureCredential for authentication, supporting Azure CLI, Azure PowerShell, Managed Identity, environment variables, and other official Azure authentication methods. The application does not store credentials or sensitive data to disk; all tokens are handled in-memory only during runtime. No telemetry or logs is collected. Communication with Azure APIs uses HTTPS/TLS exclusively. Debug logging is disabled by default and can be enabled via the LAZYAZURE_DEBUG environment variable, which optionally logs to a local file in a user home directory. The repository is open source (MIT License) and uses Dependabot for automated dependency/security updates and GitHub's CodeQL for security analysis.
If you have any findings, please report a vulnerability.
Found a bug or have a feature idea? We welcome your feedback!
This project is still in an early phase so please add an issue before starting a big pull request.
- Bug reports: Open an issue with details about the problem, your environment, and steps to reproduce
- Feature requests: Open an issue describing the feature and your use case
Please check existing issues first to avoid duplicates.
