Really bad attempt at making a heroku-like tool for quick deployment of experimental/hobby apps.
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.

Build Status

This is a really bad attempt at making a Heroku-style framework for my personal experiments.

My experiments follow some of twelve-factor, but they're not designed to scale out via the process model; instead, they sometimes use sticky sessions to store data in-memory. Part of the reason I wrote tinyserv is so I can more easily write twelve-factor apps, by making them less of a hassle to configure and deploy on my infrastructure.


  • Python 2.7 or later
  • Node
  • OSX/Linux


You really don't want to use this tool. If you do, though, here are some notes.

Environment Variables

Any environment variables you change on your server may need to be in ~/.bashrc rather than ~/.profile, as the former is consulted during non-interactive SSH sessions (which are created by git) while the latter is not.

Development Machine

The tinyserv script needs to be on your development machine's PATH.

On your development machine, you'll want to define TINYSERV_REMOTE to point to your server, e.g. The server will generally be accessed via SSH using the ssh command-line tool; the exception is when TINYSERV_REMOTE is localhost, in which case bash is used to perform shell commands directly.


The tinyserv-remote script needs to be on your server's PATH.

On your server, you'll want to define TINYSERV_ROOT to point to the directory that will contain all your tinyserv-related files. You'll also want to define TINYSERV_START_PORT to be the minimum port number that tinyserv auto-assigns to your first app.

You'll also want to run tinyserv-remote startup on server startup, and tinyserv-remote shutdown on server shutdown.


tinyserv has a ridiculous number of limitations compared to Heroku.

Right now tinyserv only supports nodejs apps, and Procfiles can only contain one process type; a single instance of that process is spawned when the app is started up, and no more can be created.

Each app is run under the same account as all the others, so they can potentially mess with each other.

The server infrastructure also only provides the mechanism to host each app on a different port; it doesn't currently provide virtual hosting or reverse-proxying functionality. However, such functionality can be auto-generated by iterating through the JSON files in ${TINYSERV_ROOT}/releases and examining each app's value for port.


I tried basing tinyserv's CLI on the Heroku node tutorial. To get some idea of how it's used, see the latest Travis CI output.