Skip to main content
Version: 1.30.0

Installation

Installing Nucleus means installing one binary: the nucleus CLI. This page covers the requirements, the install command, and how an application picks its database driver — each driver is a module the application imports.

Requirements​

  • Go 1.26 or newer (matches the go directive in go.mod)
  • One database: SQLite, PostgreSQL, MySQL, SQL Server or Oracle — the driver is a module your application imports (see below)
  • Optional: Redis, for the Redis session store and the background-task runtime

Budget a few minutes for the first build. A freshly scaffolded application with the SQLite driver resolves 138 modules and links to a 60 MB binary (45 MB stripped); the framework without any driver is 87 modules and 31 MB. A cold go build downloads that graph once; warm builds are seconds.

Install the CLI​

go install github.com/jcsvwinston/nucleus/cmd/nucleus@latest

This places the nucleus binary in $GOBIN (or $GOPATH/bin). Make sure that directory is on your PATH.

Verify the install:

nucleus --version
nucleus doctor

nucleus doctor reads the project's nucleus.yml and checks the framework subsystems it configures — the jobs provider, outbox, storage, observability exporters, tenancy, RBAC, security posture and the authentication chain. Optional subsystems you have not enabled are reported as not configured (-) and do not count against the verdict, so a freshly scaffolded project reports Overall Status: HEALTHY. Warnings are reserved for half-configured subsystems, errors for broken ones.

Run from a directory without a nucleus.yml, it checks the built-in defaults — useful to confirm the binary works, but the interesting run is inside a project.

Run the CLI from a container image​

Releases also publish the CLI as a container image on GitHub Container Registry, built for linux/amd64 and linux/arm64:

docker run --rm ghcr.io/jcsvwinston/nucleus:<version> --version

The image entrypoint is the CLI, so everything after the image name is arguments to nucleus. To run it against a project, mount the project and work from there:

docker run --rm -v "$PWD:/work" -w /work \
ghcr.io/jcsvwinston/nucleus:<version> doctor

Tags follow the releases, without the leading v the git tag carries: release v1.2.3 publishes ghcr.io/jcsvwinston/nucleus:1.2.3. latest moves only for releases that are not prereleases, so a release candidate never becomes what a bare docker pull hands out. Pin the version tag, or the digest, anywhere the answer matters.

The image runs as uid 65532 on a distroless base — no shell and no package manager — so docker run … sh has nothing to start, and mounted files have to be readable by that uid. Releases cut before the image pipeline existed have no image; the repository's Packages page lists the tags that do.

Each image is signed and carries a build provenance attestation, the same way the release archives do. Verifying a release has the commands.

What gets installed​

The nucleus binary is the only artifact of a go install. There is no daemon, no agent, no global configuration file. Each project ships its own nucleus.yml and reads it from the project root by default.

Database drivers are modules​

The framework links no database driver. Each engine ships as its own Go module — drivers/sqlite, drivers/postgres, drivers/mysql, drivers/mssql, drivers/oracle — and an application imports the one it uses for its side effect, the way database/sql drivers have always been wired. nucleus new already writes the SQLite import into main.go; switching engines is one command, which runs go get and adds the blank import:

nucleus add postgres # or mysql, sqlite, sqlserver, oracle

Set a database_url for an engine whose module is not imported and the application refuses to start, printing the go get and import _ lines to add. Every driver is pure Go, so no C toolchain is needed for any of them.

The nucleus CLI itself links all five engines: it is a tool you install once and point at whatever database is in front of it, and nucleus migrate has to work there without a rebuild.

The same pattern covers the other optional pieces: the telemetry exporters (nucleus add otlp, nucleus add prometheus), the cloud storage backends (nucleus add s3|gcs|azure) and the LDAP authentication backend (nucleus add ldap). nucleus add --help lists them all.

Updating​

Re-running go install …@latest overwrites the binary in place.

The CLI follows semantic versioning. On the stable v1.x line, minor and patch upgrades never remove a frozen surface — removals need a new major version and a deprecation record first. The CHANGELOG lists what each release adds.