{"id":19044391,"url":"https://github.com/tilt-dev/mish","last_synced_at":"2026-02-18T10:33:25.158Z","repository":{"id":64297659,"uuid":"134478065","full_name":"tilt-dev/mish","owner":"tilt-dev","description":null,"archived":false,"fork":false,"pushed_at":"2018-06-22T16:30:13.000Z","size":48834,"stargazers_count":56,"open_issues_count":4,"forks_count":1,"subscribers_count":5,"default_branch":"master","last_synced_at":"2026-01-15T04:52:41.684Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tilt-dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-05-22T21:29:54.000Z","updated_at":"2024-08-03T23:45:23.000Z","dependencies_parsed_at":"2023-01-15T09:01:39.700Z","dependency_job_id":null,"html_url":"https://github.com/tilt-dev/mish","commit_stats":null,"previous_names":["windmilleng/mish"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/tilt-dev/mish","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tilt-dev%2Fmish","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tilt-dev%2Fmish/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tilt-dev%2Fmish/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tilt-dev%2Fmish/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tilt-dev","download_url":"https://codeload.github.com/tilt-dev/mish/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tilt-dev%2Fmish/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29576584,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-18T08:38:15.585Z","status":"ssl_error","status_checked_at":"2026-02-18T08:38:14.917Z","response_time":162,"last_error":"SSL_read: 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":[],"created_at":"2024-11-08T22:46:11.785Z","updated_at":"2026-02-18T10:33:20.150Z","avatar_url":"https://github.com/tilt-dev.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"\u003cimg src=\"./mish.png\" width=\"571\" height=\"180\" title=\"Michel is a hermit crab\"\u003e\n\nBonjour! Je m'appelle Michel—pronounced mee-shell (/mi.ʃɛl/). Coincidentally, that's also how you pronounce `mish`, which stands for **Mi**ll **Sh**ell. Feel free to imagine the rest of this document in an outrageous French accent as I help you get `mish` up and running.\n\nI'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](https://medium.com/windmill-engineering/mish-flexible-shell-notebooks-3d8a0e008716).\n\n![mish demo gif](https://user-images.githubusercontent.com/4122993/41674916-3176ebc4-748f-11e8-8bf7-1ab7da6c25d7.gif)\n\n## Getting the binary\nIf you're running macOS or Linux, you can download a pre-compiled binary from [**our releases page**](https://github.com/windmilleng/mish/releases). Otherwise, you can install via the Go toolchain. First [install Go](https://golang.org/doc/install#install) and make sure that you've added `/usr/local/go/bin` to the `PATH` environment variable. Then install `mish` with:\n```bash\ngo get -u github.com/windmilleng/mish/cmd/mish\n```\n\n## Using `mish`\n\nConfiguration happens in your `notes.mill`. Make one to get started:\n```bash\necho \"sh(\\\"echo hello world\\\")\" \u003e notes.mill\n```\n\n### Hotkeys\n* `↓`/`↑`: scroll down/up\n* `PgDn`/`PgUp`: page down/up\n* `j`/`k`: jump down/up one command\n* `o`: expand/collapse current command output\n* `r`: run your `notes.mill`\n* `f`: select a workflow to run from your `notes.mill`\n* `q`: quit\n\n### Available Mill Functions\n* `sh`: execute arbitrary shell commands\n  * `sh(\"my shell command\")`\n  * 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, specify `sh(\"faily command\", tolerate_failure=True)`\n\n### Example notes.mill\n```python\n### Commands to execute\nsh(\"make proto\")\nsh(\"go build ./server\")\nsh(\"go test server\", tolerate_failure=True) # if this exits w/ non-zero code, keep going\nsh(\"go test common\")\n```\n\n## Fun with Mish\nThere are a few other unique things you can do with mish.\n\n### Use functions to run different shell commands\nMish 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.\n\n![mish flows demo gif](https://user-images.githubusercontent.com/4122993/41476760-7c4f0a6c-7090-11e8-94c4-32607137ef34.gif)\n\n### Run two mishes at once\nYou 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.\n\n![double mish demo gif](https://user-images.githubusercontent.com/4122993/41477185-8d64737c-7091-11e8-9881-acfa668874aa.gif)\n\n\nThe `notes.mill` from the above gif is included in part here as an example of workflows:\n\n```python\ndef wf_curlserver():\n  sh(\"curl localhost:8080\")\n\ndef wf_jsserver():\n  sh(\"node ./server.js\")\n\ndef wf_goserver():\n  sh(\"go run ./main.go\")\n```\n\n## Tell Us What You Think!\nTried `mish`? Loved it? Hated it? Couldn't get past the install? [**Take our survey**](https://docs.google.com/forms/d/e/1FAIpQLSf8UXLG0FOeMswoW7LuUP02CeUwKBccJishJKDE_VyOqe7g_g/viewform?usp=sf_link) and tell us about your experience. Your feedback will help us make dev tools better for everyone!\n\n### Guiding Questions for Alpha Users\nIf 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:\n1. When do you find yourself editing `notes.mill`? If it occurs to you to edit `notes.mill` and you don’t, why?\n2. When are you still using your shell instead of mish? Why?\n3. Did you get annoyed/distracted by `mish`, or turn it off?\n4. How does writing in Mill (our configuration language) feel? Intuitive? Annoying?\n5. How has `mish` changed your workflow? (Alternately: how does it fit into your existing workflow?)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftilt-dev%2Fmish","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftilt-dev%2Fmish","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftilt-dev%2Fmish/lists"}