{"id":39832418,"url":"https://github.com/lcrespom/nash","last_synced_at":"2026-01-18T13:15:41.929Z","repository":{"id":44027264,"uuid":"227547262","full_name":"lcrespom/nash","owner":"lcrespom","description":"A command-line editor for bash and compatible shells, aiming to provide great UX and productivity","archived":false,"fork":false,"pushed_at":"2022-10-31T16:57:14.000Z","size":2953,"stargazers_count":6,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-22T14:59:44.498Z","etag":null,"topics":["bash","javascript","node","productivity","shell","terminal"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lcrespom.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-12-12T07:34:10.000Z","updated_at":"2024-09-29T06:16:01.000Z","dependencies_parsed_at":"2023-01-20T08:15:19.913Z","dependency_job_id":null,"html_url":"https://github.com/lcrespom/nash","commit_stats":null,"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/lcrespom/nash","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lcrespom%2Fnash","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lcrespom%2Fnash/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lcrespom%2Fnash/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lcrespom%2Fnash/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lcrespom","download_url":"https://codeload.github.com/lcrespom/nash/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lcrespom%2Fnash/sbom","scorecard":{"id":581210,"data":{"date":"2025-08-11","repo":{"name":"github.com/lcrespom/nash","commit":"77dd6b4555afe9880e9ec12ef381f445c84a40c9"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.5,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/22 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":8,"reason":"binaries present in source code","details":["Warn: binary detected: build/linux/pty.node:1","Warn: binary detected: build/mac/pty.node:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact 1.10.1 not signed: https://api.github.com/repos/lcrespom/nash/releases/24032353","Warn: release artifact 1.10.0 not signed: https://api.github.com/repos/lcrespom/nash/releases/23920130","Warn: release artifact 1.9.0 not signed: https://api.github.com/repos/lcrespom/nash/releases/23870833","Warn: release artifact 1.8.0 not signed: https://api.github.com/repos/lcrespom/nash/releases/23717248","Warn: release artifact 1.7.0 not signed: https://api.github.com/repos/lcrespom/nash/releases/23670265","Warn: release artifact 1.10.1 does not have provenance: https://api.github.com/repos/lcrespom/nash/releases/24032353","Warn: release artifact 1.10.0 does not have provenance: https://api.github.com/repos/lcrespom/nash/releases/23920130","Warn: release artifact 1.9.0 does not have provenance: https://api.github.com/repos/lcrespom/nash/releases/23870833","Warn: release artifact 1.8.0 does not have provenance: https://api.github.com/repos/lcrespom/nash/releases/23717248","Warn: release artifact 1.7.0 does not have provenance: https://api.github.com/repos/lcrespom/nash/releases/23670265"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 8 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-20T19:13:23.131Z","repository_id":44027264,"created_at":"2025-08-20T19:13:23.131Z","updated_at":"2025-08-20T19:13:23.131Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28536750,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T13:04:05.990Z","status":"ssl_error","status_checked_at":"2026-01-18T13:01:44.092Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":["bash","javascript","node","productivity","shell","terminal"],"created_at":"2026-01-18T13:15:39.666Z","updated_at":"2026-01-18T13:15:41.917Z","avatar_url":"https://github.com/lcrespom.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Nash\nNash is a command-line editor for `bash` and compatible shells. It handles user input to provide a better user experience, and when the user hits the `Enter` key, it simply passes the command to `bash` for processing.\n\nNash is implemented in JavaScript and focuses on:\n- Providing great UX and productivity to the command-line.\n- Being highly extensible and customizable.\n- Bringing shell power to JavaScript developers. Shells such as `zsh` or `fish` are greatly configurable,\n\tbut customizing them requires writing shell script code, which (for JS developers) is not as user-friendly\n\tas JavaScript. Extensions are written much faster in JS, and are easier to understand by the\n\tcommon developer.\n\n## Quick links\n- If you want to see how `nash` looks like, check some [screenshots](docs/screenshots.md).\n- Check the [user manual](docs/manual.md) for a detailed description of `nash` functions.\n\n\n## Main features\n- Flexible [prompt](docs/manual.md#prompt), configurable by settings and by JavaScript code.\n- Powerful [command history](docs/manual.md#history-menu) navigation:\n\t- The `up` and `down` keys navigate the history, showing only the entries\n\tthat start with the current line.\n\t- The `page up` key displays a menu with all history lines that start with the current line.\n- [Directory history](docs/manual.md#history-menu) navigation: the `page down` key displays\n\ta menu with the most recently visited directories, showing only the entries that contain the\n\ttext in the current line.\n- Interactive [tab-completion](docs/manual.md#tab-completion): pressing tab completes a file name,\n\tbut if multiple matching files are available, a menu is displayed, letting the user navigate\n\tand select the file name. Completion supports other elements such as directories, command\n\toptions and environment variables, and displays file information or option documentation\n\tdepending on the case.\n- All menus (command history, directory history and tab-completion) allow typing more characters\n\tto narrow the search.\n- [Syntax highlight](docs/manual.md#syntax-highlight), clearly coloring the different parts of a command,\n\tand warning of potential errors.\n- [History suggestions](docs/manual.md#suggestions): when typing a command, if the text matches\n\ta previous command, the remaining text is displayed in grey, letting the user immediately complete\n\tthe command.\n- All these features are also available when establishing a connection with a\n\t[remote system](docs/manual.md#support-for-remote-connections), even if `nash` is not installed\n\tin the remote system: only `bash` is required. This is especially useful when:\n\t- Accessing restricted systems where installing `nash` is not easy or even not possible.\n\t- Accessing small or short-lived environments, such as a docker container.\n- Configurable [color palette](docs/manual.md#configuring-colors). Colors can be configured by\n\tname (e.g. \"red\", \"gren\", etc.) or by RGB hex as in CSS (e.g. #a6e22e).\n- [Configuration](docs/manual.md#configuration) and extensions are implemented as plain JavaScript code,\n\tcentered around the `~/.nash/nashrc.js` file, which is loaded during startup. Example\n\tconfiguration and extensions are provided in the `~/.nash` directory, which is populated when\n\t`nash` is started for the first time. For instance:\n\t- Color settings are configured via JSON - you can make your terminal use the same color palette\n\t\tas your code editor. Most terminals support 16 million colors, and although this feature is\n\t\tinitially disabled in `~/.nash/nashrc.js` to ensure compatibility, it is really worth trying\n\t\tenabling it by uncommenting the line containing `trueColor: true` near the end of the file.\n\t- Keyboard shortcuts are reassigned using the `bindKey` API - the example in `~/.nash/custom-keys.js`\n\t\tillustrates how to do it. The `F1` key displays the list of keyboard shortcuts, and `ctrl-k`\n\t\tdisplays the name of any key combination.\n\t- Completion helpers for known commands (git, docker, npm, etc.) are configured via JSON settings.\n- An extensible plugin system which facilitates the addition of features.\n\nCheck the [ToDo](docs/TODO.md) for a list of features under development and planned for the future. Suggestions are welcome.\n\n\n## Installation\n\n\u003e If after a successful installation you get strange behavior, see\n\u003e [Starting nash](docs/manual.md#starting-nash) for troubleshooting. Also, check the\n\u003e [Recommended prerequisites](#recommended-prerequisites) section below.\n\n### If you have `node` and `npm` installed\nAs usual:\n```bash\n$ npm install -g bnash  # the \"nash\" name was taken in npm ¯\\_(ツ)_/¯\n```\n\nThen just type `bnash` to launch it.\n\n\u003e If you get installation errors containing `node-gyp` in the error messages, this is because you need\n\u003e to install the native build tools first. That installation depends on the OS - for example, for Ubuntu\n\u003e the following command installs those prerequisites:\n\u003e ```bash\n\u003e $ sudo apt-get install build-essential\n\u003e ```\n\u003e You can get more details in the [node-gyp installation document](https://github.com/nodejs/node-gyp#installation).\n\u003e\n\u003e ...Or you can just download the binary installation: see the next section.\n\n### Binary installation\nThe [releases](https://github.com/lcrespom/nash/releases) page contains binary packages for Linux and MacOS.\nYou can download the appropriate `nash-[version]-[platform].tar.gz` file, then unpack it into a directory of your\nchoice. For example:\n```bash\n$ mkdir ~/nash-inst\n$ cd ~/nash-inst\n$ # Use the appropirate link for nash-[version]-[platform].tar.gz\n$ curl -OL https://github.com/lcrespom/nash/releases/download/1.10.1/nash-1.10.1-linux.tar.gz\n$ tar -xzf nash-1.10.1-linux.tar.gz\n```\nFinally, to run nash:\n```bash\n$ ./nash\n```\nTo easily launch `nash` in the future, you can copy the extracted files somewhere in your `$PATH`.\nAn appropriate place is `/usr/local/bin`:\n```bash\n$ sudo cp nash pty.node /usr/local/bin\n```\nFrom then on, you can simply launch it by typing `nash`.\n\n\u003e The binary distribution packages nash code along with the node.js runtime in a single executable,\n\u003e except for the `pty.node` file, which must be placed alongside. The packaging is done using the great\n\u003e [pkg tool](https://github.com/zeit/pkg).\n\n### From source code\nIf you want to run `nash` from the source code (and maybe help with development), just clone the repo and type `npm install`. Then, to open a shell, type `node src/nash`.\n```\n$ git clone https://github.com/lcrespom/nash.git\n$ npm install\n$ node src/nash\n```\n\n### Windows\nThere is no direct Windows support, but an Ubuntu terminal can be installed in windows very easily through the Microsoft Store. See instructions [here](https://tutorials.ubuntu.com/tutorial/tutorial-ubuntu-on-windows).\n\n## Recommended prerequisites\nIn order to get the best experience from `nash`, the following prerequisites are recommended:\n\n### Powerline fonts\nA collection of fonts that are optimized for the terminal and contain useful symbol characters,\ne.g. for displaying a fancy prompt, git repository symbol, etc.\nThey can be downloaded form [here](https://github.com/powerline/fonts).\n\nOnce the terminal is configured to use a powerline font, add the following entry in the exported\n`options` of `.nash/nashrc.js`:\n```javascript\n   prompt: { powerFont: true }\n```\nThis will tell the prompt plugin that it can use fancy symbol characters, e.g. for the git status.\n\n### A good terminal app\nThe default terminal application that comes preinstalled with the OS is usually quite limited, and may\neven cause defective output or glitches when `nash` tries to generate colorful output. The recommended\nalternatives are the following:\n- **Mac**: [iTerm2](https://iterm2.com/). Although the default terminal is quite powerful, it does not\n\tsupport 16 million colorws (see below).\n- **Windows**:\n\t- [Windows Terminal](https://github.com/Microsoft/Terminal). The GitHub page contains\n\tinstructions for different installation methods, and at the very beginning of the `README.md` there\n\tis a link to the app in the Microsoft Store, which is the easiest installation method.\n\t- The terminal provided by the Ubuntu WSL app is also quite decent.\n- **Linux**: most Linux distributions come with a powerful terminal by default.\n\nOnce you are using a good terminal app, make sure you enable 16 million color support by uncommenting the\nline `trueColor: true` in the `options` of `.nash/nashrc.js`. Some pugins make use of this feature, but it is\ndisabled by default because there is no safe way to detect 16 million color support, and attempting\nto use this feature on a terminal that does not support it results in unreadable output.\n\n## Related projects\nIf you are thinking about using JavaScript to implement your shell scripts, check out [ShellJS](https://github.com/shelljs/shelljs).\n\nIf you are looking for a full shell interpreter with good UX, check out [Oh My Zsh](https://github.com/ohmyzsh/ohmyzsh) and [Fish Shell](https://fishshell.com/).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flcrespom%2Fnash","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flcrespom%2Fnash","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flcrespom%2Fnash/lists"}