{"id":36852657,"url":"https://github.com/rshelekhov/lazymake","last_synced_at":"2026-02-20T07:01:11.186Z","repository":{"id":315009780,"uuid":"1057712843","full_name":"rshelekhov/lazymake","owner":"rshelekhov","description":"Modern TUI for Makefiles with interactive target selection, dependency    visualization, and command safety analysis","archived":false,"fork":false,"pushed_at":"2026-01-08T21:42:41.000Z","size":27873,"stargazers_count":43,"open_issues_count":1,"forks_count":3,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-09T08:12:52.316Z","etag":null,"topics":["bubbles","bubbletea","cli","cobra","go","golang","lipgloss","makefile","terminal","tui"],"latest_commit_sha":null,"homepage":"https://lazymake.vercel.app/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rshelekhov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-16T05:39:37.000Z","updated_at":"2026-01-09T06:08:00.000Z","dependencies_parsed_at":"2025-09-16T07:28:20.588Z","dependency_job_id":"3ecb05c8-a6d4-479c-8102-46c803cf2dba","html_url":"https://github.com/rshelekhov/lazymake","commit_stats":null,"previous_names":["rshelekhov/lazymake"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/rshelekhov/lazymake","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rshelekhov%2Flazymake","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rshelekhov%2Flazymake/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rshelekhov%2Flazymake/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rshelekhov%2Flazymake/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rshelekhov","download_url":"https://codeload.github.com/rshelekhov/lazymake/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rshelekhov%2Flazymake/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28340403,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T12:22:26.515Z","status":"ssl_error","status_checked_at":"2026-01-12T12:22:10.856Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bubbles","bubbletea","cli","cobra","go","golang","lipgloss","makefile","terminal","tui"],"created_at":"2026-01-12T14:39:32.656Z","updated_at":"2026-01-12T14:39:32.746Z","avatar_url":"https://github.com/rshelekhov.png","language":"Go","funding_links":[],"categories":["Go","cli","Table of Contents"],"sub_categories":[],"readme":"\u003cimg src=\"./assets/lazymake-logo.svg\" alt=\"LAZYMAKE\" width=\"600\"\u003e\n\n\u003c/br\u003e\n\n[![CI](https://img.shields.io/github/actions/workflow/status/rshelekhov/lazymake/ci.yml?branch=main\u0026label=CI)](https://github.com/rshelekhov/lazymake/actions/workflows/ci.yml)\n[![GitHub release](https://img.shields.io/github/release/rshelekhov/lazymake.svg)](https://github.com/rshelekhov/lazymake/releases)\n[![Go Report Card](https://goreportcard.com/badge/github.com/rshelekhov/lazymake)](https://goreportcard.com/report/github.com/rshelekhov/lazymake)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![GitHub stars](https://img.shields.io/github/stars/rshelekhov/lazymake?style=social)](https://github.com/rshelekhov/lazymake/stargazers)\n\nA terminal UI for browsing and running Makefile targets.\n\n\u003cimg src=\"docs/assets/demo.gif\" alt=\"Demo\" width=\"100%\" style=\"max-width: 909px;\"\u003e\n\n## Quick Start\n\n```bash\n# Install\nbrew install rshelekhov/tap/lazymake\n\n# Run in any directory with a Makefile\nlazymake\n```\n\n## What It Does\n\nlazymake provides an interactive interface for Makefiles with:\n\n- **Target browser** with fuzzy search and execution history\n- **Dependency graph visualization** showing what runs when you execute a target\n- **Variable inspector** for debugging complex variable expansions\n- **Syntax highlighting** for recipes (detects Python, Go, shell scripts, etc.)\n- **Safety warnings** for destructive commands (configurable)\n- **Performance tracking** to identify slow targets\n\n\n## Why?\n\nIn large projects, Makefiles can have dozens or hundreds of targets. Finding the right one means either memorizing names or grepping through the file. This tool gives you a searchable list with descriptions and shows you exactly what will run before you execute anything.\n\nThe dependency graph is particularly useful for understanding complex build systems—you can see the full chain of prerequisites, identify bottlenecks, and spot circular dependencies.\n\n## Installation\n\n### Homebrew (macOS/Linux)\n```bash\nbrew install rshelekhov/tap/lazymake\n```\n\n### Go\n```bash\ngo install github.com/rshelekhov/lazymake/cmd/lazymake@latest\n```\n\n## Usage\n\n```bash\n# Use Makefile in current directory\nlazymake\n\n# Specify path\nlazymake -f path/to/Makefile\n```\n\n### Keyboard shortcuts\n\n- `↑/↓` or `j/k` - Navigate\n- `Enter` - Execute selected target\n- `g` - Show dependency graph\n- `v` - Open variable inspector\n- `w` - Switch between Makefiles (workspace picker)\n- `/` - Search/filter\n- `?` - Help\n- `q` - Quit\n\n## Configuration\n\nOptional `.lazymake.yaml` for customization:\n\n```yaml\nsafety:\n  enabled: true\n  exclude_targets:\n    - clean  # Don't warn about these targets\n\nexport:\n  enabled: true\n  format: json\n\nshell_integration:\n  enabled: true\n```\n\nPlace in `~/.lazymake.yaml` (global) or `./.lazymake.yaml` (project-specific).\n\nSee [configuration guide](docs/guides/configuration.md) for all options.\n\n## Makefile Documentation\n\nIf your targets have comments starting with `##`, they'll appear as descriptions in the UI:\n\n```makefile\nbuild: ## Build the application\n\tgo build -o bin/app\n\ntest: ## Run test suite\n\tgo test ./...\n```\n\nThis is optional—lazymake works fine without comments.\n\n## Features\n\n### Dependency Graph Visualization\n\n![Dependency Graph](docs/assets/dependency-graph.png)\n\nPress `g` on any target to see its dependency tree with execution order and parallel opportunities. Useful for understanding what `make deploy` actually does.\n\n[Full documentation](docs/features/dependency-graphs.md)\n\n### Variable Inspector\n\n![Variable Inspector](docs/assets/variable-inspector.png)\n\nPress `v` to browse all variables, see their expanded values, and find out which targets use them. Helpful when debugging complex variable substitutions or figuring out where `LDFLAGS` is defined.\n\n[Full documentation](docs/features/variable-inspector.md)\n\n### Dangerous Command Detection\n\n![Safety Features](docs/assets/safety-features.png)\n\nHelps prevent accidental execution of destructive commands. lazymake scans targets for potentially dangerous operations (like `rm -rf`, `DROP DATABASE`, etc.) and prompts for confirmation.\n\n[Full documentation](docs/features/safety-features.md)\n\n### Workspace Management\n\n![Workspace Management](docs/assets/workspace-management.png)\n\nPress `w` to switch between Makefiles in your project. Automatically discovers Makefiles in subdirectories and remembers recent files.\n\n[Full documentation](docs/features/workspace-management.md)\n\n## FAQ\n\n**Does it work with my existing Makefile?**  \nYes. No changes required.\n\n**Which Make implementations are supported?**  \nAll of them. lazymake parses the file and uses your system's `make` for execution.\n\n**Does it modify my Makefile?**  \nNo. It's read-only.\n\n**Can I disable safety warnings?**  \nYes. Add target names to `exclude_targets` in `.lazymake.yaml`.\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md).\n\n## License\n\nMIT - see [LICENSE](LICENSE).\n\n## Acknowledgments\n\nBuilt with [Bubble Tea](https://github.com/charmbracelet/bubbletea), [Lipgloss](https://github.com/charmbracelet/lipgloss), [Chroma](https://github.com/alecthomas/chroma), and [Cobra](https://github.com/spf13/cobra).\n\nInspired by [lazygit](https://github.com/jesseduffield/lazygit) and [lazydocker](https://github.com/jesseduffield/lazydocker).\n\n---\n\n**Made with ❤️ for developers.**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frshelekhov%2Flazymake","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frshelekhov%2Flazymake","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frshelekhov%2Flazymake/lists"}