# opn

> A better [node-open](https://github.com/pwnall/node-open). Opens stuff like websites, files, executables. Cross-platform.


#### Why?

- Actively maintained
- Supports app arguments
- Safer as it uses `spawn` instead of `exec`
- Fixes most of the open `node-open` issues
- Includes the latest [`xdg-open` script](http://cgit.freedesktop.org/xdg/xdg-utils/commit/?id=c55122295c2a480fa721a9614f0e2d42b2949c18) for Linux


## Install

```
$ npm install --save opn
```


## Usage

```js
const opn = require('opn');

// opens the image in the default image viewer
opn('unicorn.png').then(() => {
	// image viewer closed
});

// opens the url in the default browser
opn('http://sindresorhus.com');

// specify the app to open in
opn('http://sindresorhus.com', {app: 'firefox'});

// specify app arguments
opn('http://sindresorhus.com', {app: ['google chrome', '--incognito']});
```


## API

Uses the command `open` on OS X, `start` on Windows and `xdg-open` on other platforms.

### opn(target, [options])

Returns a promise for the [spawned child process](https://nodejs.org/api/child_process.html#child_process_class_childprocess). You'd normally not need to use this for anything, but it can be useful if you'd like to attach custom event listeners or perform other operations directly on the spawned process.

#### target

*Required*  
Type: `string`

The thing you want to open. Can be a URL, file, or executable.

Opens in the default app for the file type. Eg. URLs opens in your default browser.

#### options

Type: `object`

##### wait

Type: `boolean`  
Default: `true`

Wait for the opened app to exit before calling the `callback`. If `false` it's called immediately when opening the app.

On Windows you have to explicitly specify an app for it to be able to wait.

##### app

Type: `string`, `array`

Specify the app to open the `target` with, or an array with the app and app arguments.

The app name is platform dependent. Don't hard code it in reusable modules. Eg. Chrome is `google chrome` on OS X, `google-chrome` on Linux and `chrome` on Windows.


## Related

- [opn-cli](https://github.com/sindresorhus/opn-cli) - CLI for this module


## License

MIT © [Sindre Sorhus](http://sindresorhus.com)
