Skip to content


Subversion checkout URL

You can clone with
Download ZIP
tree: fa6cf86dcd
Fetching contributors…

Cannot retrieve contributors at this time

69 lines (49 sloc) 2.053 kB


Zero-downtime Node.js deployments

WARNING: Crossover is an experiment in progress and is not recommended for production use.


  • Push new versions of an app into production with zero errors and zero dropped requests
  • Push new versions using HTTP
  • Incrementally roll requests onto the new version, falling back if errors or crashes are encountered


$ npm install -g crossover


The example app tarball URLs in these examples actually exist. Feel free to use them for testing.

$ crossover
[master] preparing worker:
[master] resolving dependencies
[master] forked worker 51500
[master] forked worker 51501
[worker:51500] starting app
[worker:51501] starting app
[worker:51500] listening on port: 3000
[worker:51501] listening on port: 3000


Create a tarball that contains your app.

$ cd ~/Code/myapp
$ tar czvf ~/Slugs/myapp.tgz .

Deploying New Code

$ curl -X POST https://localhost:3000/crossover/release \
    -d ""

# meanwhile on the server
[master] releasing:
[master] preparing worker:
[master] resolving dependencies
[worker:51500] turning off new connections to app
[worker:51501] turning off new connections to app
[worker:51500] requests completed, exiting
[worker:51501] requests completed, exiting
[master] worker 51500 died
[master] forked worker 52000
[master] worker 51501 died
[master] forked worker 52001

Advanced Usage

Usage: crossover [options] <slug url>


    -h, --help               output usage information
    -V, --version            output the version number
    -a, --auth <password>    admin password
    -c, --concurrency <num>  number of workers
    -e, --env <url>          environment file
    -p, --port <port>        port on which to listen
Jump to Line
Something went wrong with that request. Please try again.