You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
bonzai/README.md

46 lines
2.2 KiB
Markdown

# Bonzai, Well-Tended CLI Command Trees for Gophers
2 years ago
Bonzai commands are unlike anything you've probably encountered so far,
no getopt dashes, no ugly commander interface to learn, no 12637 lines
of shell tab completion bloat to source before it will work, just well
manicured commands organized into rooted node trees for your
command-line, nested-tab-completing enjoyment with built-in (optional)
help documentation that can easily be marshalled into JSON and presented
either as text or well-styled HTML. Think "readthedocs" but served
locally from your Bonzai command-line apps themselves.
## "It's spelled bonsai/banzai."
2 years ago
We know. The domains were taken. Plus, this makes it more unique and
easier to find once you know the strange spelling we chose to use. Sorry
if that triggers your OCD.
On a lighter note, it just so happens that "banzai" means 'a traditional
Japanese idiom meaning "ten thousand years" of long life,' a cheer used
in celebrations. So combining the notion of a happy, little,
well-manicured, beautiful tree and "ten thousand years of long life"
works out just fine for us.
Then, of course, there's the image of Buckaroo invoked every time we say
the name. In fact, I think we have our new theme song.
## Example GitHub Template
<https://github.com/rwxrob/template-bonzai>
## Design Considerations
* **Promote high-level package library API calls over Cmd bloat.** Code
belongs in package libraries, not Cmds. While Bonzai allows for rapid
applications development by putting everything initially in Cmd
Methods, Cmds are most designed for documentation and completion, not
heavy Method implementations. Eventually, most Method implementations
should be moved into their own package libraries, perhaps even in the
same Go module. Cmds should *never* be communicating with each other
directly. While the idea of adding a Channel attribute was intriguing,
it quickly became clear that doing so would promote too much code and
tight coupling --- even with channels --- between specific commands.
Cmds should be *very* light. In fact, most Cmds should assign their
Method directly from one matching the Method function signature in a
callable, high-level library.