A curated list of awesome developer tools for writing cross-platform Node.js code.

## Contents

- Resources
- Applications
  - Development environment
  - Continuous integration
  - Virtualization
  - Compatibility
  - Databases
- Libraries
  - OS identification
  - Shell
  - Environment
  - Filesystem
  - Signals
  - Processes
  - Streams
  - Desktop UI
  - Windows registry
- Known issues
- Support

## Resources

- Core Node.js documentation - Especially the `os`, `path`, `fs`, `process` and `child_process` modules.
- Cross-platform Node.js guide - How to write cross-platform Node.js code.
- Microsoft Node.js Guidelines - Tips, tricks, and resources for working with Node.js on Microsoft platforms.
- Writing Cross-Platform Node.js - Great tutorial covering many common issues that arise when writing cross-platform code: path creation, script execution, newline characters.
- Cross-platform terminal characters - All the characters that work on most terminals and most operating systems.

## Applications

### Development environment

- Node.js - Node.js installer for various platforms.
- nvm-windows - Manage multiple installations of Node.js on a Windows computer.
- nvm / n - Node version manager for macOS/Linux.
- npm-windows-upgrade - Upgrade npm on Windows.
- windows-build-tools - Install C++ Build Tools for Windows using npm.

### Continuous integration

- AppVeyor - Focused on Windows. Free tiers are available for OSS projects.
- Travis - Windows/macOS/Linux. Free for OSS projects.
- Azure Pipelines - Windows/macOS/Linux. Free for OSS projects with 10 parallel jobs.
- Github Action - Windows/macOS/Linux. GitHub Actions makes it easy to automate all your software workflows.
- Gitlab CI - Windows/macOS/Linux. GitLab CI/CD is a tool built into GitLab for software development.

### Virtualization

- ievms - Automated installer for the free virtual machine images that Microsoft provides for testing on multiple versions of IE. These images can be useful for cross-platform testing various technologies, however make sure you read and understand Microsofts’ licensing.
- VirtualBox - General purpose software for running x86 virtual machines.
- Docker - Software platform to create, deploy and manage virtualized application containers on a common operating system, with an ecosystem of allied tools.

### Compatibility

- Wine - Run Windows API calls on Linux, Mac, BSD and Solaris.
- Cygwin - Run POSIX on Windows.
- WSL - Run the Linux command line on Windows (ELF binary execution, system calls, filesystem, Bash, core utilities, common applications).
- MinGW - `gcc` on Windows.
- msys / Git Bash - Bash on Windows.

### Databases

- Redis - Native port of Redis for Windows.

## Libraries

### OS identification

- is-windows - Detect whether the current platform is Windows.
- is-wsl - Detect whether current platform is WSL (Windows Subsystem for Linux).
- getos - Retrieve the current OS, including Linux distribution.
- os-name - Get the name of the current operating system.
- systeminformation - Hardware/software system information.

### Shell

- execa - Cross-platform implementation of `child_process.{execFile,exec}`.
- gulp-execa - Cross-platform command execution in Gulp.js.
- cross-spawn - Cross-platform implementation of `child_process.spawn()`.
- shelljs - Cross-platform Unix shell commands.
- node-windows - Windows support for Node.js scripts (daemons, eventlog, UAC, etc).
- log-symbols - Colored symbols for various log levels with Windows fallbacks.
- figures - Unicode symbols with Windows fallbacks.
- clipboardy / clipboard-cli - Cross-platform copy/paste.

### Environment

- cross-env - Set environment variables cross-platform.
- user-home - Get the path to the user home directory. Cross-platform.
- username - Get the current username.
- osenv - Cross-platform environment variables.
- is-elevated - Check if the process is running with elevated privileges.
- which - Cross-platform implementation of Unix’s `which`.

### Filesystem

- rimraf / del - Delete files and folders. Cross-platform.
- make-dir - Cross-platform `mkdir -p`.
- readdirp - Recursive version of `fs.readdir()`.
- cpy - Copy files. Cross-platform.
- chokidar - Improved cross-platform file watching.
- graceful-fs - Improves the `fs` module, especially on Windows.
- fs-extra - Combines `graceful-fs` with better JSON file reading and promises.
- any-path - Use Windows and POSIX paths interchangeably when fetching values from an object.
- dev-null-cli - Cross-platform `/dev/null`.
- global-cache-dir - Get the global OS-specific cache directory.

### Signals

- fkill - Kill processes. Cross-platform.
- signal-exit - Cross-platform `exit` handler.
- human-signals - Human-friendly process signals.

### Processes

- ps-list - Get running processes.
- process-exists - Check if a process exists.

### Streams

- noop-stream - Cross-platform `fs.createReadStream('/dev/null')`.
- random-bytes-readable-stream - Cross-platform `fs.createReadStream('/dev/urandom')`.

### Desktop UI

- open - Opens stuff like websites, files, executables. Cross-platform.
- node-notifier - Cross-platform desktop notifications.

### Windows registry

- node-winreg - Access the Windows registry.
- rage-edit - Access/modify the Windows registry.
- windows-registry-node - Access/modify the Windows registry and set file associations.

## Known issues

- cmd.exe unicode woes - By default, `cmd.exe` does not display Unicode characters on Windows.
- spawn issues - `child_process.spawn()` behavior is not consistent between Windows and Linux.
- exec() behavior between shells - Depending on the shell being used, e.g., bash vs. dash, `child_process.exec()` has inconsistent exit behavior.

## See also

- awesome-desktop-js - List of tools to build JavaScript applications on the desktop.

## Support

If you found an error or would like to add more information, don’t hesitate to submit an issue on GitHub.

Everyone is welcome regardless of personal background. We enforce a Code of conduct in order to promote a positive and inclusive environment.

## Contributing

This project was made with ❤️. The simplest way to give back is by starring and sharing it online.

If the documentation is unclear or has a typo, please click on the page’s `Edit` button (pencil icon) and suggest a correction.

If you would like to help us fix an error or add more information, please check our guidelines. Pull requests are welcome!

Thanks go to these wonderful people:

Benjamin E. Coe 💻 🤔 📖 | ehmicky 💻 🤔 📖 | Sindre Sorhus 💻 🤔 📖 | Hongarc 🎨 📖 💻 | Kent C. Dodds 🤔 | Jason Cooke 📖 | Aron Hafner 📖
ShPelles 📖 | Xiaodan Mao 📖 | James Talmage 📖 | Sylvain PONTOREAU 📖 | Steven 🤔

This project follows the all-contributors specification.

## License

crossplatformnodejs.md Github