Editions: the two artefacts, and which one you have

August 7, 2026 · View on GitHub

Every release publishes two artefacts from one tag. They are built from different trees, they are named differently, and one of them can be unlocked by a licence. This page is what each of them is.

Built fromContainsLicence
swarmcli_* archives, eldaratech/swarmcli:<tag>, :latest, the swarmcli Homebrew cask and Scoop manifesta private build wrapper around this repositorythis repository, plus licensed code that is inert without a licencethis repository's code is Apache-2.0; the licensed code is proprietary
swarmcli-oss_* archives, eldaratech/swarmcli:<tag>-oss, the swarmcli-oss cask and manifestthis repository, and nothing elsethis repository, and nothing elsewholly Apache-2.0

The command inside both archives is swarmcli. Every invocation in these docs, every script, alias and CI job is identical for the two, deliberately: the difference between them is what the build contains, not how it is driven.

Why there are two

The default artefact carries the licensed code because a single binary is the only arrangement in which "install a licence" is not "download a different product". Nothing is hidden by that — the code is compiled in and does nothing until a licence verifies.

But a released binary that contains proprietary code cannot honestly be called open source, and a project whose only download is that binary has no answer when somebody says so. swarmcli-oss is the answer, and it only works if it ships from the first merged release rather than after somebody complains. It is also the artefact a distribution packager, an air-gapped compliance review and a contributor verifying what they built actually need.

The OSS build is not a subset with features removed. It is this repository, which is the whole Community Edition: the TUI, the chart package manager, the declarative charts apply workflow, the CLI. Nothing that has ever shipped Apache-2.0 is reclaimable; the free line is drawn there or wider, never narrower.

Which one am I running

Three signals, in descending order of how much you should trust them.

swarmcli version. The strongest, because it is a property of the build and nothing at runtime can change it:

$ swarmcli version
1.14.0 (oss build, chart engine 1.14.0)

(business build) is the merged artefact — whether or not a licence verified. That is exactly what distinguishes "this binary has no licensed code" from "this binary has no licence", and neither the edition label nor the absence of features answers that alone.

The chart engine is reported beside it because the two can legitimately differ: the engine is this module's code, so a build that embeds swarmcli as a dependency carries whichever engine it pinned rather than its own tag. chart engine unstamped means the build's ldflag did not take, and every chart's declared swarmcliVersion floor is being admitted unchecked.

The startup log line, for a binary you cannot re-run:

swarmcli version=1.14.0 edition=ce commit=… date=…      ← the OSS build
swarmcli-be version=1.14.0 commit=… date=…              ← the merged build

The prefix is the signal, and it is written on every start, including non-interactive swarmcli charts … runs.

The edition label in the TUI header is the weakest of the three, and is not a build signal at all: it follows live licence state, so the merged build with no valid licence reads Community Edition — correctly, because that is what it is behaving as. Do not use it to answer this question.

What a licence changes, and when

A licence is installed into the swarm and read at startup. It turns features on in the merged build only — there is nothing in the OSS build for it to unlock, and installing one there changes nothing and reports nothing.

The Business Edition documentation covers acquiring, installing and managing a key, and what each feature does.

Getting the OSS build

# The archive, from any release:
curl -sSLO https://github.com/Eldara-Tech/swarmcli/releases/download/v1.14.0/swarmcli-oss_Linux_x86_64.tar.gz

# The image:
docker pull eldaratech/swarmcli:v1.14.0-oss

# Homebrew or Scoop:
brew install Eldara-Tech/tap/swarmcli-oss
scoop install swarmcli-oss

There is deliberately no moving :oss image tag and no :latest on this half. A deployment that wants the verifiably-Apache-2.0 artefact pins a version, which is what an air-gapped or compliance-reviewed deployment does anyway — and a moving tag on the artefact whose whole point is being checkable is a way to be surprised by what is running.

checksums-oss.txt in each release covers these artefacts; checksums-merged.txt covers the merged ones. Neither is named plain checksums.txt: a release carries two sets of artefacts, and an unqualified name would not say which set it verified.

Building it yourself is the same thing:

go build -o swarmcli .

How the claim is checked rather than remembered

swarmcli-oss is only worth publishing while "this one is the Apache-2.0 build" is something you can verify rather than something we assert. So it is checked on the artefact, not on the source: scripts/check-oss-artefact.sh reads the module graph Go stamped into each published binary and fails if the main module is not this repository or if anything private is linked. It runs from .goreleaser.yml's per-build hook on every binary the release publishes, and from ci.yml on every change — so it is not a gate that only ever fires on a tag.

It also fails when it cannot read a module stamp at all, rather than passing. A binary whose graph is unreadable looks exactly like a binary with no private dependencies, and that is the shape of every guard that quietly stops guarding.