strongloop/node-foreman is tracked by TopGit as an open-source project, with 1.3k stars on GitHub, written primarily in JavaScript. A Node.js Version of Foreman
Snapshot summary built from the project's own GitHub metadata — there's no written TopGit review yet. The page will update automatically when a full review is published.
WHY NO REVIEW YET
TopGit writes full reviews for the most-starred, most-requested repositories. This page is a snapshot until then — see the READ ME tab for the original README in full.
Node Foreman is a Node.js version of the popular
Foreman tool,
with a few Node specific changes.
Foreman is a manager for Procfile-based applications.
Its aim is to abstract away the details of the Procfile
format, and allow you to either run your application
directly or export it to some other process management format.
Install
Install the command line tool
npm install -g foreman
Get usage
nf --help
Deviations from the original Foreman
Each worker has an additional automatic environment variable,
FOREMAN_WORKER_NAME, that contains the process name and worker number.
example: web.1, worker.1
How to Contribute
I encourage anyone and everyone to help.
If you have a specific change in mind, open an issue; we can talk about it there.
If you would like to make a code change, go ahead.
Fork the repository, open a pull request.
Do this early, and talk about the change you want to make.
Maybe we can work together on it.
Refactor Refactor Refactor!
You are free to add features, or just help clean things up.
Usage
Node Foreman can be run with as little as nf start, as long as npm start has been defined.
For more complicated applications you will want to define a Procfile for your various server
processes and an .env file to pre-load environmental variables.
Your module directory should end up looking like the following:
Once your Procfile is defined, run your application with nf start:
Node Foreman always starts in the foreground and expects your applications
to do the same. If your processes exit, Node Foreman will assume an error
has occurred and shut your application down.
Instead of daemonizing, you should use nf export to ready your application
for production.
The above JSON document will be flattened into env variables by
concatenating the nested values with an underscore.
Environmental variables are passed in fully capitalized.
There is no need to specify which type of file you wish to use.
The PATH environment variable
The PATH variable is given special treatment and is always read
from the environment that the nf command has been executed from,
rather than your .env file. To set a different PATH execute
nf with the PATH variable set appropriately.
PATH=/opt/foo:/opt/bar:$PATH nf export
Best Practices
Generally you should not check your .env file into version control.
The .env file contain only parameters that depend on where the application
gets deployed. It should not contain anything related to how the application
is deployed.
For example, good candidates for the .env file are MySQL connection information,
port bindings, and other passwords.
The Run Command
Tasks or commands that require the environment variables from the .env file
can be initiated by using nf run <command>.
Advanced Usage
Node Foreman lets you start multiple jobs of the same type:
$ nf start web=5
18:51:12: web.1 | Web Server started listening on 0.0.0.0:5000
18:51:12: web.2 | Web Server started listening on 0.0.0.0:5001
18:51:12: web.3 | Web Server started listening on 0.0.0.0:5002
18:51:12: web.4 | Web Server started listening on 0.0.0.0:5003
18:51:12: web.5 | Web Server started listening on 0.0.0.0:5004
Each job will be started as its own process, receiving a different PORT
environmental variable.
The port number for processes of the same type will be offset by 1.
The port number for processes of different types will be offset by 100.
$ nf start web=2,api=2
18:51:12: web.1 | Web Server started listening on 0.0.0.0:5000
18:51:12: web.2 | Web Server started listening on 0.0.0.0:5001
18:51:12: api.1 | Api Server started listening on 0.0.0.0:5100
18:51:12: api.2 | Api Server started listening on 0.0.0.0:5101
Export to Production
Node Foreman is designed to be in a development environment,
however it can export an Upstart job for use in production.
The Upstart file has no dependency on Node Foreman.
$ nf export
Loaded ENV .env File as JSON Format
Wrote : ./foreman-web-1.conf
Wrote : ./foreman-web.conf
Wrote : ./foreman-api-1.conf
Wrote : ./foreman-api.conf
Wrote : ./foreman-log-1.conf
Wrote : ./foreman-log.conf
Wrote : ./foreman.conf
You can inspect your upstart files before placing them in the right
directory, or have foreman do it for you:
$ sudo nf export -o /etc/init
Loaded ENV .env File as JSON Format
Wrote : /etc/init/foreman-api-1.conf
Wrote : /etc/init/foreman-web.conf
Wrote : /etc/init/foreman-api.conf
Wrote : /etc/init/foreman-log.conf
Wrote : /etc/init/foreman-log-1.conf
Wrote : /etc/init/foreman-web-1.conf
Wrote : /etc/init/foreman.conf
The export will occur with whatever environmental variables are
listed in the .env file.
systemd Support
This section is beta
Optionally specify a type -t systemd during export for systemd support.
Supervisord Support
You can also use a type -t supervisord during export for supervisord support.
This will generate a APP.conf file grouping the application processes and a APP-PROCESS-N.conf file for each process.
$ nf export --type supervisord
Loaded ENV .env File as JSON Format
Wrote : ./foreman-web-1.conf
Wrote : ./foreman-api-1.conf
Wrote : ./foreman-log-1.conf
Wrote : ./foreman.conf
You can start / stop / restart individual processes.
You can specify the type and number of processes exported using
the type=num syntax:
$ nf export web=2,api=2
Use -u <USER> to have the exported job run as USER.
Note that if you need to bind to privileged ports, you must
start as root. In such a case, we advise you to drop user
permissions after binding.
If you want to call your upstart job something other than foreman,
use -a <JOBNAME> and manage your jobs with sudo start <JOBNAME>.
Reverse Proxy
Node.js processes are supposed to be stateless.
Applications scale by starting multiple processes that either share a socket,
or sit behind a load balancer.
Node Foreman can help you test the parallel capabilities of your application
by spawning multiple processes behind a round-robin proxy.
Access your application from port 8888 and the connections will be balanced
across the servers started from ports 5000 - 5004.
If your application gets its port number from process.env.PORT the proxy
setup will happen automatically.
Multiple Reverse Proxies
If you have multiple processes in your Procfile you can start multiple proxies.
$ nf start -x 8888,8080,9090
This will start 3 separate proxies and bind each to a separate process group.
Proxies are bound based on their order specified, their order in the Procfile,
or by their order on the command line.
$ nf start -x 8888,9999 web,api
Privileged Ports
Node Foreman disallows applications from starting on privileged ports.
It does however allow proxies to be bound to lower ports, such as port 80.
If you require access to a privileged port, start Node Foreman with sudo:
Your application will then be accessible via port 80, but it will be running as root.
Forward Proxy
Local development and testing has huge advantages,
but sometimes one needs to test web applications against their real-world domain name.
Editing /etc/hosts is a pain however, and error prone.
Node Foreman can start up an HTTP forward proxy which your browser can route requests through.
The forward proxy will intercept requests based on domain name, and route them to the local application.
$ nf start -f 9999 -i nodefly.com
[OKAY] Forward Proxy Started in Port 9999
[OKAY] Intercepting requests to nodefly.com through forward proxy
A forward proxy is useful when testing OAuth, or other external services with application callbacks.
For users with Google Chrome, this can be paired with FelisCatus SwitchyOmega for great results.
TopGit's last sync did not record any GitHub topics for strongloop/node-foreman. GitHub topics appear in the right sidebar of a repository page; that's the authoritative place to check.
How active is development on strongloop/node-foreman?
The most recent commit recorded on strongloop/node-foreman was 2.0 years ago, based on the GitHub push timestamp. The repository has 116 forks — one of the better signals of community interest.
How many stars does strongloop/node-foreman have?
strongloop/node-foreman has 1.3k GitHub stars — refresh the page for the live number, or check github.com/strongloop/node-foreman. TopGit mirrors GitHub's count but does not claim minute-by-minute accuracy.
What language is strongloop/node-foreman written in?
strongloop/node-foreman is written primarily in JavaScript. GitHub's language field is based on the largest share of bytes in the default branch.
Where can I see strongloop/node-foreman in action?
The project maintains a homepage at http://strongloop.github.io/node-foreman/. The README tab on this page also usually contains screenshots and a quickstart.
Where do I read more about strongloop/node-foreman?
This TopGit page is a snapshot — the READ ME tab shows the project's own README content (links stripped, images preserved). The GitHub repository at github.com/strongloop/node-foreman is the definitive source.
Read full README in the tab above.
Is node-foreman worth your time?
ChatGPT, Claude and Perplexity can all read this page. Ask one of them what it makes of node-foreman.