Bonjour! Je m'appelle Michel—pronounced mee-shell (/mi.ʃɛl/). Coincidentally, that's also how you pronounce mish
, which stands for Mill Shell. Feel free to imagine the rest of this document in an outrageous French accent as I help you get mish
up and running.
I'm an early experiment, not a finished product, but I bet I can still make your workflow a little bit better. Read more on the Windmill Blog.
If you're running macOS or Linux, you can download a pre-compiled binary from our releases page. Otherwise, you can install via the Go toolchain. First install Go and make sure that you've added /usr/local/go/bin
to the PATH
environment variable. Then install mish
with:
go get -u github.com/windmilleng/mish/cmd/mish
Configuration happens in your notes.mill
. Make one to get started:
echo "sh(\"echo hello world\")" > notes.mill
↓
/↑
: scroll down/upPgDn
/PgUp
: page down/upj
/k
: jump down/up one commando
: expand/collapse current command outputr
: run yournotes.mill
f
: select a workflow to run from yournotes.mill
q
: quit
sh
: execute arbitrary shell commandssh("my shell command")
- Normally, when a your shell commands exits with a non-zero status code,
mish
will abort the whole execution. To continue execution if a given command fails, specifysh("faily command", tolerate_failure=True)
### Commands to execute
sh("make proto")
sh("go build ./server")
sh("go test server", tolerate_failure=True) # if this exits w/ non-zero code, keep going
sh("go test common")
There are a few other unique things you can do with mish.
Mish functions are called workflows and are prefixed by wf_
. Once you've defined workflows in your notes.mill
, you can bring up the list of your workflows by pressing f
within mish, cycle through with your arrow keys, and press r
to run. If your command is defined outside of a function, it will run automatically.
You can use mish to run a server in one mish window and simultanously run commands on that server in another mish window. Also, by implementing workflows in your notes.mill
, you can edit the server and commands you're running and rerun them easily in each window.
The notes.mill
from the above gif is included in part here as an example of workflows:
def wf_curlserver():
sh("curl localhost:8080")
def wf_jsserver():
sh("node ./server.js")
def wf_goserver():
sh("go run ./main.go")
Tried mish
? Loved it? Hated it? Couldn't get past the install? Take our survey and tell us about your experience. Your feedback will help us make dev tools better for everyone!
If you're one of our amazing alpha users, thank you! We appreciate you taking the time to test our product and give us feedback. Here are some things that we'd love for you to keep in mind as you test out mish
so we can pick your brain about them later:
- When do you find yourself editing
notes.mill
? If it occurs to you to editnotes.mill
and you don’t, why? - When are you still using your shell instead of mish? Why?
- Did you get annoyed/distracted by
mish
, or turn it off? - How does writing in Mill (our configuration language) feel? Intuitive? Annoying?
- How has
mish
changed your workflow? (Alternately: how does it fit into your existing workflow?)