Skip to content

Contributing to Janus

Janus is developed in the open on GitHub: issues and pull requests are welcome. This section is for anyone changing Janus itself - the node’s daemons, the image build, the Controller, the site - and for maintainers running its CI and releases.

  • The build system is not the target. Dockerfiles, Go modules and the CI runners are an ordinary Linux toolchain; the node they build has no shell, no package manager and no build tools - it only ever moves pre-built bytes into place.
  • A feature is done when it’s proven on a real boot: an image booted in QEMU under UEFI, SELinux enforcing with no denial, real HTTP and gRPC over mutual TLS - not mocks. Pure logic stays dependency-free so it gets plain unit tests too.
  • Every upstream is pinned - versions and checksums in versions.mk, base images by digest, GitHub Actions by commit - and followed (see Following upstreams).
  • Commits say what changed, by theme: <theme>: message, for example controller: the extensions panel opens again.
Terminal window
make build # janusd and janusctl, in ./bin
make test
make lint

The image build and its boot tests need QEMU, OVMF and Docker - see the Makefile and hack/. To try a change to janusd or the Controller without building an image, use the local dev container.

Found a security issue? Report it privately - see the security policy.