I've been working on Shelgon, a framework that lets you build your own custom REPL shells and interactive CLI applications in Rust.
You can use Shelgon to:
- Create a custom shell with only a few lines of code
- Build interactive debugging tools with persistent state between commands
- Develop domain-specific language interpreters with shell-like interfaces
- Add REPL capabilities to existing applications
Getting started is straightforward - implement a single trait that handles your command execution logic, and Shelgon takes care of the terminal UI, input handling, and async runtime integration.
For example, a simple echo shell takes less than 50 lines of code, including a full implementation of command history, cursor movement, and tab completion.
Repository: https://github.com/nishantjoshi00/shelgon
1. Why async?
2. Why couple to anyhow instead of using an associated error type?