Share your code. npm Orgs help your team discover, share, and reuse code. Create a free org »



    a taco themed PaaS for node.js servers. warning: still alpha-quality




    the main goal of taco is to fully automate and configure everything so that from the time when you create your server you never have to manually ssh in and configure things from the server shell.

    • git based deploy (git push taco master to deploy)
    • easy use with compute providers. installs onto a fresh ubuntu server
    • keep apps running. process monitoring + logging with mon and mongroup
    • nginx powered virtual hosts (subdomain routing to multiple apps)
    • runs npm install and npm start on your app to build + deploy it


    feel free to open an issue for these and declare that you want to work on them, then send a PR :)

    • docker support
    • web admin ui
    • automated domain registration + dns configuration
    • support other compute providers via integration. taco + santa = win
    • cli client for things like taco logs, taco restart appname etc
    • automatic server provisioning using e.g. the digital ocean API


    it takes around 10 minutes to get up and running with taco

    create a digital ocean droplet, set up DNS

    note: you can use any server running a brand new ubuntu 13.04 install, digital ocean just happens to be the cheapest way to get one if you don't already have one

    • get a digital ocean account, add your ssh key
    • create a new ubuntu 13.04 droplet, make sure it includes your ssh key
    • buy some domain name and set up two A records pointing at the droplets IP:
    * -> IP -> IP

    once you have your DNS set up properly you can run the magic one liner: ./ admin

    or follow these step by step instructions (recommended for first-timers):

    install node and nginx

    I wrote a couple of npm modules to automate this, here's how to run them:

    npm install install-node-on-ubuntu install-nginx-on-ubuntu -g

    do some basic setup on the new ubuntu install

    this step is optional, but recommended so that you don't get pwn3z0red

    run which:

    • updates ubuntu
    • creates a sudo-able non-root user called admin (for logging into the server later and doing stuff)
    • sets up ssh keys for that user by copying the over from /root/.ssh
    • disables ssh root login (that's what admin is for)
    • creates a system user "taco" for the taco process to run as
    • sets up basic iptables firewall


    wget -qO- | ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no

    (replace with your server)

    or if you want the user to be something other than admin you can log in to your server and run it this way:

    wget -qO- | sudo NEW_USER=admin bash

    install taco

    note: use root if you didn't do the recommended security steps above, otherwise use admin as the user

    run these from your local machine:

    npm install taco -g
    install-taco-on-ubuntu admin

    deploy your first app

    • apps must have npm install and npm start as the only two setup steps
    • they must also listen on process.env.PORT

    here is an example app:

    to deploy the example:

    git clone
    cd hello-world-server
    git remote add taco

    the end of the remote url should be app-subdomain.git, so in this case the app will deploy to

    now you just need to push:

    git push taco master
    Counting objects: 38, done.
    Delta compression using up to 4 threads.
    Compressing objects: 100% (26/26), done.
    Writing objects: 100% (38/38), 3.45 KiB | 0 bytes/s, done.
    Total 38 (delta 4), reused 0 (delta 0)
    remote: Received hello.git
    remote: Running npm install...
    remote: npm http GET
    remote: npm http 304
    remote: hat@0.0.3 node_modules/hat
    remote: Deployed app at
     * [new branch]      master -> master


    var host = require('taco')(opts, ready)

    Create a new taco instance.

    taco expects these minimum values in the opts object:

    • opts.dir: base path to host
    • vhost (http host) to route incoming requests with
    • opts.nginx: nginx options object, gets passed to the nginx-vhosts module
    • opts.nginx.conf: path to nginx configuration file
    • opts.nginx.confDir: path to a folder where new nginx config files can be created
    • opts.nginx.pidLocation: path to the nginx pid file

    ready will be called when taco is ready to handle requests

    host.handle(req, res)

    Handle an incoming HTTP request/response.

    run the server

    sudo DEBUG=* USER=admin PASS=pass taco /usr/local/etc/nginx/conf.d/ /usr/local/etc/nginx/nginx.conf /var/run/

    run the tests

    npm install
    sudo npm test

    why not heroku/dokku/flynn/deis/etc?

    taco doesn't implement all the bells and whistles needed to deploy 'application stacks' like LAMP or Rails. all you get is support for node programs that can be configured + started using npm install and npm start.

    anything that can't be installed from npm (e.g. non in-process databases) needs more complexity, and the existing PaaS platforms are probably what you want. taco has no complex backing services




    npm i taco

    Downloadsweekly downloads








    last publish


    • avatar
    • avatar