Roadmap
zigcli already has two complementary kinds of value:
- as a set of reusable Zig packages for building CLI tools
- as a collection of standalone command-line programs that users can install directly
The next phase should prioritize foundational capabilities that can be reused across both sides of the project, instead of only adding more isolated utilities.
P0: Strengthen the CLI foundation
1. Configuration system
Goal: provide a unified configuration layer that merges command-line flags, environment variables, and config files.
Suggested capabilities:
- a standard
--config <path>convention - environment variable prefix mapping
- clear precedence across defaults, config file values, environment variables, and CLI flags
TOMLsupport first, with room to addJSONandYAMLlater
Why it matters:
- almost every medium-sized or large CLI eventually needs this
- it would directly benefit tools like
zigfetch,tcp-proxy, and future network- or service-oriented programs - it would pair naturally with
structargsand make the overall CLI experience much more complete
2. structargs enhancements
Goal: evolve structargs from a capable argument parser into a more complete CLI framework foundation.
Suggested capabilities:
- stronger subcommand tree support
- mutual exclusion, dependency, and required-group validation
- visibility into where defaults come from (
default,env,config) - shell completion generation
- richer help output layouts
Why it matters:
- this is one of the highest-leverage reusable modules in the repository
- improving it once benefits every CLI in the project
- it would make
zigclimore attractive as a dependency for external users
3. Terminal interaction primitives
Goal: add the common interactive building blocks used by modern CLIs.
Suggested capabilities:
confirmpromptselect✅ implemented inspinnerprogresspackage✅ implemented inprogressprogresspackage
Why it matters:
- the repository already has table rendering, terminal styling, and progress-related tools, so this is a natural extension
- it would allow
zigclito support richer terminal product experiences instead of only text output
P1: Extract reusable output and filesystem capabilities
4. Unified output interface
Goal: make commands work well for both humans and automation.
Suggested capabilities:
- a common output model for
table / json / csv / tsv / plain - shared output switching interfaces
- consistent conventions for normal output and error output
Why it matters:
pretty-tablealready serves human-readable output well, but scripting support can be stronger- this would make many commands naturally easier to integrate into automation workflows
5. Shared file traversal and filtering module
Goal: turn logic currently spread across tree, loc, and .gitignore handling into a reusable foundation.
Suggested capabilities:
- recursive traversal
- include / exclude rules
.gitignoreintegration- depth limits
- file type filtering
- reusable callback-based statistics or processing hooks
Why it matters:
treeandlocalready show that these patterns repeat- extracting them would make future tools like
find,du, and batch-processing utilities much easier to build
6. Terminal compatibility and rendering improvements
Goal: make terminal output more robust across environments.
Suggested capabilities:
- unified TTY detection
- automatic color fallback
- Unicode / ASCII fallback
- shared terminal width and truncation strategies
Why it matters:
- existing tools like
pretty-table,tree, and any styled output would all benefit - it would reduce display issues across shells, CI, and remote environments
P2: Expand the networking and system-tool direction
7. Lightweight HTTP client capability
Goal: extract reusable networking functionality from zigfetch.
Suggested capabilities:
- basic GET / POST support
- timeouts
- retries
- headers
- simple download support
Why it matters:
- this would turn
zigfetchfrom a single tool into a platform capability - future API debugging, downloader, and webhook-related tools would become much easier to implement
8. Stronger system information and process tooling
Goal: deepen the direction already represented by zfetch, hexdump, progress, and pidof.
Suggested directions:
- richer process inspection
- system resource statistics
- a more stable cross-platform abstraction layer
- better behavior alignment across Linux, macOS, and FreeBSD
Why it matters:
- these tools fit the identity of
zigclivery naturally - they also help validate whether the lower-level modules are designed broadly enough
P3: Improve packaging and developer experience
9. Documentation and examples
Goal: make it easier for external developers to adopt zigcli as a dependency.
Suggested work:
- add a minimal runnable example for each core module
- expand the README with scenario-based entry points
- make the mapping between
examples/anddocs/more explicit
10. Installation and distribution experience
Goal: make the project feel more polished and ready to use immediately.
Suggested directions:
- shell completion installation guidance
- man page generation
- clearer release artifact naming and distribution guidance
Recommended implementation order
- Configuration system
structargsenhancements- Terminal interaction primitives
- Unified output interface
- Shared file traversal and filtering module
- Terminal compatibility and rendering improvements
- Lightweight HTTP client capability
- Stronger system information and process tooling
- Documentation and examples
- Installation and distribution experience
A focused near-term strategy
If only one theme should be prioritized next, the best choice is:
build a strong combination of structargs + config + completion.
Why:
- it is the most platform-like investment
- it would benefit almost every existing command directly
- it strengthens both sides of the repository: the reusable library side and the standalone tools side
- it would make external developers more likely to adopt
zigclias their CLI foundation