- Features
- Requirements
- Setup
- Usage
- Development
- Testing
- Troubleshooting
- Security
- Configuration
- Operations
- Support
- License
- Links
This template owns a reusable application baseline; each derived application owns its behavior, runtime contract, and production operations.
Package description: A reusable Node.js application baseline for Eliware projects. Author: Eliware eliware@eliware.org. License: MIT.
Purpose: provide a reusable Node.js application starting point with environment loading, logging, error handling, signal handling, Jest tests, and container packaging.
The starter has no network listener or external service behavior. Replace its lifecycle module and metadata with the derived application's behavior.
Use Node.js 26 and npm. Docker is required only to build and run the container image.
Create a repository from this template, then run npm ci. Replace the package name, description, repository URLs, keywords, and application behavior for the derived project. Copy .env.example to an untracked .env only when local environment settings are needed.
Run node bin/application-template.mjs to load .env, configure the logger, register process error and signal handlers, and log that the starter has started. The starter does not listen on a port or remain active by itself.
The executable entrypoint is bin/application-template.mjs, which runs with node bin/application-template.mjs.
Image: ghcr.io/eliware/application-template Pull command: docker pull ghcr.io/eliware/application-template:v11.0.0 Supported tags: vMAJOR.MINOR.PATCH Deployment boundary: publication does not deploy; deploy by immutable version tag and recorded sha256 digest.
Read AGENTS.md, this README, specs/README.md, and RELEASE_NOTES.md before changing the template. bin/application-template.mjs wires runtime dependencies; src/main.mjs owns startup and repeatable shutdown behavior, with its mirrored test in tests/main.test.mjs.
Documentation: docs · specifications
Run npm test for Jest with 100% statement, branch, function, and line coverage, lint, format-check, audit, package validation, and applicable profile checks through eliware-test. Run npm run format:check for read-only formatting validation. CI runs npm ci followed by npm test.
If startup fails, check that Node.js 26 is installed and that .env contains only supported settings. If logs do not use the selected level, confirm LOG_LEVEL is a supported value. Run npm test to validate the checkout.
Keep .env, credentials, tokens, private keys, and machine-specific values out of version control and container images. Do not log secrets or sensitive payloads. Run derived applications under accounts with only the permissions they need.
There are no required runtime settings. LOG_LEVEL is optional, defaults to info, and accepts error, warn, info, http, verbose, debug, or silly. The process loads .env before creating the logger. package.json and .knit/deploy.yaml are package and deployment metadata, not runtime configuration.
Run node bin/application-template.mjs to start; it loads configuration, registers process error and signal handlers, and logs startup. Shutdown runs the repeatable lifecycle hook. Its externally observable workflow is local startup and shutdown; it opens no listener or external connection. Build the container from the repository root with docker build -t application-template .. After a GHCR release, pull an exact version using docker pull ghcr.io/eliware/application-template:<release-tag>, where <release-tag> is vMAJOR.MINOR.PATCH. The image is intended to be public after publication. Image publication does not deploy or start an application; any derived service requires its own authorized deployment configuration and handoff. These are the operational boundaries of the starter.
For help or discussion, join the Eliware community:

