Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Ship all kinds of services


latest commit 67e35f8cc8
@mafintosh authored
Failed to load latest commit information.
LICENSE Updated documentation and usage


Ship all kinds of services.

npm install -g hms

Afterwards you should have an command line tool called hms.

Getting started

First ssh to a remote server and install hms. Then start up a terminal.

hms run-terminal

In a new folder start the dock (or multiple docks as seperate processes). The dock will run your apps

hms run-dock localhost:10002 --tag my-dock --port 10003 # add a some tags

localhost:10002 is the address to the terminal running on the machine, the newly created dock will run on localhost:10003.

Then on your local machine add the remote

hms remotes add my-remote

hms uses ssh to contact the server so should be similar to the arguments you passed to ssh. Then add a simple node app

hms add my-remote my-app --start 'node .' --build 'npm install' --tag my-dock
hms info my-remote my-app

The --start argument is your start script, --build is your build script and --docks tells hms to deploy it to 1 dock.

You are now ready to deploy your service. Goto your local app folder and do

hms deploy my-remote my-app
hms info my-remote my-app

The info output should verify that the app is running.


All commands have the following syntax

hms [command] [remote] [service|dock?] [options]

hms remotes

Manage and verify remotes.

  • hms remotes add [remote-name] [remote-url] to add a new remote
  • hms remotes remove [remote-name] to remove a remote
  • hms remotes to list all remotes

  • --key,-k to specify an explicit ssh key. Per default ~/.ssh/id_rsa and the ssh agent is used.

hms docks [remote] [dock-name?]

List the docks on a given remote. Detailed information about the services on the given dock is printed if a dock name is specified.

hms services [remote] [service-name?]

List the services on a given remote. Detailed information about the service, and the docks it is running on, is printed if a service name is specified.

hms info [remote] [service-name]

Print detailed information about a service, and the docks it is running on, on a remote.

hms add [remote] [service-name]

Add a new service.

  • --start,-s to specify a start script. Ie. node . to start a node service
  • --build,-b to specify a build script. Ie. npm install . to install node modules
  • --tag,-t to specify the docks tags to match when choosing where to deploy to.
  • --limit,-l to set a max limit on the number of docks to deploy to.
  • --env,-e to set env varibles. Format is ENV_VAR=value if more than one env variable is needed multiple --env can be used.

hms update [remote] [service-name]

Update an existing service. Accepts the same options as hms add. Note that update will not restart the service. To do this just issue a hms restart

To delete an env variable just set it to an empty string, i.e. ENV_VAR=

hms deploy [remote] [service-name]

Upload cwd as a tarball to service-name and deploy and restart it.

  • --revision to set a deploy revision tag. Defaults to git describe if you are in a git repo.

After deploying hms will tail service output and print it to stdout until you hit ctrl+c.

hms remove [remote] [service-name]

Stop and remove a service.

hms start|stop|restart [remote] [service-name]

Send a start/stop/restart signal the service. All restarts can be done gracefully by listening for SIGTERM and exiting nicely.

hms ps [remote] [service-name?]

(deprecated, please use info instead)

List processes running on all docks. Omit the service name to list all processes.

  • --env to also list the environment that the processes use.

hms log [remote] [service-name?]

Tail the log of a service. Omit the service name to tail all services. hms does not save any logs so this is just the live tail of stdout/stderr and various events.

Remote services

Run the following commands on your remote server that you want to deploy to

hms run-terminal

Starts a "build-and-distribute" hub that you can deploy to. After you deploy to a terminal it will run the build script and distribute the build to the docks.

  • --port,-p to change the port the terminal binds to. Defaults to 10002
  • --db to set the db file

hms run-dock [remote]

Starts a dock that can run and manage services.

  • --id,-i to give the dock an optional id. Defaults to hostname
  • --port,-p to change the port the dock binds to. Defaults to 10002
  • --tag,-t to give this dock some tags that you can match when deploying
  • --db to set the db file



Something went wrong with that request. Please try again.