The Boltzmann command-line interface (CLI) creates and updates a node project for you, with a boltzmann.js file created from a template to your specification, a package.json naming the required dependencies and some useful run scripts, and a linter configuration.
Running npx boltzmann-cli --help
gives an overview of the command-line
options. This document goes into more detail about them.
§ Example usages
npx boltzmann-cli web-server --redis --website
Scaffolds a project in the directory ./web-server
, with the redis, csrf, and
templating features enabled.
npx boltzmann-cli api-server --githubci=off --honeycomb --jwt --postgres
Scaffolds a project in ./api-server
with Honeycomb tracing integration, jwt
parsing, and postgres client middleware. Turns off the default GitHubCI
workflow feature.
§ Feature-flipping
Passing --feature=[on,off]
turns the named feature on or off. You can also
enable a feature by mentioning it: --feature
is equivalent to --feature=on
.
You can rerun the boltzmann CLI in an existing project to update your copy of
boltzmann or change which features you have enabled. The cli will respect the
options you set earlier, and layer changes on top of this. To enable a feature,
pass --feature=on
. For example, suppose you decide you need a redis
client provided in middleware:
code|⇒ npx boltzmann-cli hello --redis=on
npx: installed 1 in 2.659s
Scaffolding a Boltzmann service in /Users/cj/code/hello
initializing a new NPM package...
writing boltzmann files...
updating dependencies...
adding are-we-dev @ ^1.0.0
adding culture-ships @ ^1.0.0
adding find-my-way @ ^2.2.1
adding bole @ ^4.0.0
adding ajv @ ^6.12.2
adding dotenv @ ^8.2.0
adding accepts @ ^1.3.7
adding handy-redis @ ^1.8.1 (redis activated)
adding redis @ ^3.0.2 (redis activated)
adding cookie @ ^0.4.1
adding tap @ ^14.10.7 (dev)
adding @hapi/shot @ ^4.1.2 (dev)
adding bistre @ ^1.0.1 (dev)
adding eslint @ ^7.1.0 (dev)
adding @typescript-eslint/parser @ ^3.1.0 (dev)
adding @typescript-eslint/eslint-plugin @ ^3.1.0 (dev)
adding eslint-config-prettier @ ^6.11.0 (dev)
adding eslint-plugin-prettier @ ^3.1.3 (dev)
adding prettier @ ^2.0.5 (dev)
writing updated package.json...
running package install...
Boltzmann at 0.1.2 with redis, githubci, status, ping
Pass --feature=off
to remove a feature you have previously enabled. For example, if you decide you don't need redis after all:
code|⇒ npx boltzmann-cli hello --redis=off
npx: installed 1 in 0.809s
Scaffolding a Boltzmann service in /Users/cj/code/hello
loaded settings from existing package.json
writing boltzmann files...
updating dependencies...
removing handy-redis (redis deactivated)
removing redis (redis deactivated)
writing updated package.json...
running package install...
Boltzmann at 0.1.2 with githubci, status, ping
Boltzmann will manage its dependencies when a feature is flipped on or off, but will not make other changes to an existing package.json. You are free to update its dependencies as you see best.
The GitHub CI workflow, ping, and status features are enabled by default. All other features are disabled by default.
§ Command-line flags
§ Boolean options
§ --all
Added in version 0.1.3
.
Enables all features, except for esm
.
Example use:
$ npx boltzmann-cli --all path/to/my/project
§ --website
Added in version 0.1.3
.
Enable website feature set (templates, csrf.)
Example use:
$ npx boltzmann-cli --website path/to/my/project
§ --selftest
Added in version 0.0.0
.
Scaffold Boltzmann in "self test" mode, to test the framework itself while developing it.
Example use:
$ npx boltzmann-cli --selftest path/to/my/project
$ tap path/to/my/project/test.js
§ --docs
Added in version 0.1.3.
Open the documentation for the current version of Boltzmann in a web browser. Requires an internet connection.
Example use:
$ npx boltzmann-cli --docs
§ --force
Added in version 0.0.0
.
Update a git-repo destination even if there are changes.
Example use:
$ git init
$ touch foo.js
$ git commit -am 'add foo.js'
$ echo "example" > foo.js
$ npx boltzmann-cli --force . # if run without --force, boltzmann would
# refuse to update the directory since it
# contains uncommitted changes.
§ --silent
Added in version 0.0.0
.
Suppress all output except errors.
Example use:
$ npx boltzmann-cli --silent .
§ --verbose
, -v
, -vv
Added in version 0.0.0
.
Log even more. Pass -v or -vv to increase verbosity.
Example use:
$ npx boltzmann-cli --verbose .
$ npx boltzmann-cli -vv .
§ --version
Added in version 0.0.0
.
Print version information.
Example use:
$ npx boltzmann-cli --version
4.2.0
§ Feature-flipping options
§ --csrf
Added in version 0.1.1.
Enable Cross Site Request Forgery (CSRF) protection middleware. Requires manual
installation in application-attached middleware (APP_MIDDLEWARE
in middleware.js
.)
See the reference documentation on applyCSRF
for middleware configuration.
Automatically enabled by the --website
flag.
Example use:
$ npx boltzmann-cli . --csrf=on
Basic middleware installation:
// middleware.js
const { middleware } = require('./boltzmann')
exports.APP_MIDDLEWARE = [
middleware.applyCSRF
]
§ --esm
Added in version 0.1.3. Requires Node 14.
Scaffold in ECMAScript Module (ESM) mode, enabling use of import
/export
syntax. Turning this flag on will set the package.json
"type"
field to
"module"
mode. This flag is experimental, but we intend to eventually make
it the default.
Example use:
$ npx boltzmann-cli . --esm=on
§ --githubci
Enable GitHub actions for Continuous Integration (CI); defaults to on. The
action will run when pushing to any branch. If the --postgres
or --redis
flags are enabled for your application, the generated workflow file will include
those services.
Example use:
$ npx boltzmann-cli . # on by default
$ npx boltzmann-cli . --githubci=off # turn it off
§ --honeycomb
Enable Honeycomb tracing integration for observability (o11y). The middleware enabling this feature is automatically attached to your app when present. To learn how to configure it, consult the tracing middleware documentation.
Example use:
$ npx boltzmann-cli . --honeycomb=on
§ --jwt
Added in version 0.1.1.
Enable JSON web token (JWT) middleware; defaults to on. Requires manual
installation in application-attached middleware (APP_MIDDLEWARE
in
middleware.js
.)
See the reference documentation on authenticateJWT
for middleware
configuration. Notably: acceptable algorithms may be configured. If not
specified, a safe default algorithm will be chosen. JWTs encoded with an
unacceptable algorithm will be rejected. Why is this important?
Example use:
$ npx boltzmann-cli . --jwt=on
Basic middleware installation:
// middleware.js
const { middleware } = require('./boltzmann')
exports.APP_MIDDLEWARE = [
middleware.authenticateJWT
]
§ --ping
Added in version 0.0.0.
Enable /monitor/ping
liveness endpoint; defaults to on. This is implemented
as automatically-installed middleware that is executed before any application
middleware. The endpoint returns a 200 OK
and the plain-text name of a
spaceship from Iain M Banks' Culture series; e.g. "GSV Bora Horza Gobuchul"
.
Example use:
$ npx boltzmann-cli . # defaults to on
$ npx boltzmann-cli . --ping=off # turn it off
$ curl localhost:5000/monitor/ping
FP/(D)ROU Refreshingly Unconcerned With The Vulgar Exigencies Of Veracity
§ --postgres
Added in version 0.0.0.
Enable postgres middleware, which will be automatically installed as
application-attached middleware. This flag adds an automatic reachability check
to the endpoint added by the --status
flag, and augments the test
decorator. It also makes context.postgresClient
available to application
request handlers and middleware. For more on how the postgres functionality
works, see "persisting data".
Example use:
$ npx boltzmann-cli . --postgres
§ --redis
Added in version 0.0.0.
Enable redis middleware, which will be automatically installed as
application-attached middleware. This flag adds an automatic reachability check
to the endpoint added by the --status
flag, and augments the test
decorator. It also makes context.redisClient
available to application
request handlers and middleware. For more on how the redis functionality
works, see "persisting data".
Example use:
$ npx boltzmann-cli . --redis
§ --status
Enable a /monitor/status
healthcheck endpoint; defaults to on. This functionality
is intended for deeper service health checks. Where ping
answers "is this
process running?", status
answers "what is the state of this process's backing
resources?"
The status
functionality is implemented as an automatically-installed middleware.
It will load additional reachability checks from reachability.js
(or reachability/index.js
).
For more on monitoring, see "monitoring your application".
Example use:
$ npx boltzmann-cli . # on by default
$ npx boltzmann-cli . --status=off # turn status off
§ --templates
Added in version 0.1.2.
Makes Nunjucks template middleware available. This is enabled as part of the
--website
flag. This middleware must be manually installed. For more on the
template functionality, see "websites". To learn more about configuring the
middleware, see the reference documentation on template
.
Example use:
$ npx boltzmann-cli . --templates
$ npx boltzmann-cli . --website # implies --templates, --csrf
Basic middleware installation:
// middleware.js
const { middleware } = require('./boltzmann')
exports.APP_MIDDLEWARE = [
middleware.template
]
§ Full usage
The current output of npx boltzmann-cli help
:
boltzmann 0.1.2
Generate or update scaffolding for a Boltzmann service.
To enable a feature, mention it or set the option to `on`.
To remove a feature from an existing project, set it to `off`.
Examples:
boltzmann my-project --redis --website
boltzmann my-project --githubci=off --honeycomb --jwt
USAGE:
boltzmann [FLAGS] [OPTIONS] [destination]
FLAGS:
--all Enable everything!
--docs Open the Boltzmann documentation in a web browser.
--force Update a git-repo destination even if there are changes
-h, --help Prints help information
--selftest Build for a self-test.
-s, --silent Suppress all output except errors.
-V, --version Prints version information
-v, --verbose Pass -v or -vv to increase verbosity
--website Enable website feature set (templates, csrf)
OPTIONS:
--csrf <csrf> Enable csrf protection middleware
--githubci <githubci> Enable GitHub actions CI
--honeycomb <honeycomb> Enable honeycomb
--jwt <jwt> Enable jwt middleware
--ping <ping> Enable /monitor/ping liveness endpoint; on by default
--postgres <postgres> Enable postgres
--redis <redis> Enable redis
--status <status> Enable /monitor/status healthcheck endpoint; on by default
--templates <templates> Enable Nunjucks templates
ARGS:
<destination> The path to the Boltzmann service [default: ]