v1.3.0
nSelf CLI v1.3.0
Channel: stable
Changelog
[1.3.0] — 2026-08-25
A thin core: 92 commands to 52, with 30 command families moved into plugins that
install in one step and behave exactly as they did before.
This is a minor release rather than a patch because 43 commands are no longer
in the binary. Every one still works — the CLI proxies the original spelling
to the plugin and names what to install when the plugin is absent — but a
machine without the plugin no longer has the command. Read the compatibility
notes before upgrading a scripted environment.
Fixed
- Installing a plugin left the command dead (CRITICAL) — four separate
defects stacked, and none was visible to any test, because no test performed a
real install. The registry cache silently droppedpluginType,binaryName,
languageandruntime, so the first request parsed them, the cache write
discarded them, and the next read returned a plugin claiming to provide no
command — the bug only appeared on the second run. Registry parsing never
read those fields anyway. Installing a command-line tool required Docker and
Postgres, because the schema step ran even for plugins with no tables. And the
release pipeline never compiled anything: it tarred source, so Go plugins
shipped with no binary. Tolerating a missing binary is what made all of this
silent; it is now a failed install that names the cause. Plugins are
cross-compiled for all five supported platforms and the CLI fetches the one
matching the machine. - Almost every plugin was invisible — 181 of 184 shipped
plugin.jsonfiles
could not be parsed, so nearly the whole catalogue was missing from
nself plugin listand everything else that enumerates installed plugins.
Five fields were typed for one of the shapes in use rather than all of them:
envVars,permissions,dependencies,systemDependencies,
apiEndpoints. All 184 now parse, guarded by a test that reads the real
published manifests rather than fixtures written from the struct. - The CLI talked over failing plugins —
Plugin error: plugin exited with code 1printed on top of the plugin's own message on every extracted command.
The plugin's exit code is now mirrored in silence; only a proxy failure the
user has seen nothing for still speaks. --no-deprecation-warningsbroke every extracted command — nself's own
persistent flags were passed through to plugins that do not implement them,
so a script using that flag died with "unknown flag". They are stripped before
the plugin runs, as cobra did before the command moved.nself logincould spawn a browser undergo test— it called an
unguarded copy ofopenBrowserinstead of the guarded one two files away.nself <cmd> nosucherrored where it used to print help — cobra treats a
root command's unknown first argument differently from a child's.docker-compose.override.ymlwas inert on every project. It is applied.- nginx refused to start on a fresh project when no trusted certificate
chain existed. - Help text taught a deprecated spelling — all 17
flagsexamples showed
nself flag, renamed in this release line. - The plugin proxy wrote a raw timestamped log line above its own error.
Added
nself install <name>as a first-class command, with the plugin name
suggested on any unknown command.- Command groups in
nself --help, so the golden path reads first. - Plugins may provide several commands via
cliCommands, and a service
plugin may also ship one.sentryprovidesnself sentryand
nself sentry-server;tenantprovidesnself tenantandnself billing;
webhooksis the delivery service and thenself webhookscommand. - Project configuration reaches command plugins. nself resolves the
.env
cascade and passes each plugin only the variables its manifest declares, so a
plugin never re-implements the cascade. scripts/plugin-counts.shgenerates the free/pro/total plugin counts that
documentation had been hand-typing, and had drifted on.
Changed
- The env cascade now follows its documented order, with
NSELF_LEGACY_ENV_ORDERas a one-minor-version escape hatch. - 43 commands moved out of the binary. Each is proxied to its plugin once
installed:aiai-studioalertsapiauditbillingclawcosts
dlqdogfooddrencryptionfederationgatewaygauthgdpr
infrak8smailmodelmonitorollamapentest-kitqueueregion
sentrysentry-serversoaktenantwafwatchdogwebhooks. - Renamed or absorbed, still working through argv rewriting:
dns-setupand
sslintotrust,pitrintodb,flagtoflags,uninstallto
remove,upgradeand therelease-*trio intoupdate.featureand
migrate-from-v099retired. - 121 files over 300 lines down to 7, each documented, with a ratchet that
only moves one way.
Known
admincall sites have not been audited against the 43 removed commands.
An admin call that shells out to one of those on a machine without the plugin
now fails where it used to succeed.- Two permission vocabularies are in use. 121 shipped manifests declare
permissions in a form the CLI's allowlist does not cover. Both are kept, and
nself plugin infostates which were not checked, rather than a mapping being
invented between them. health,self-healandtemplatestay in the core despite being listed
for extraction:healthbacksdoctorandstatus, andtemplatecatalogs
whatnself init --templatecan clone.
Commits since previous release
- docs(changelog): 1.3.0 (#248) (6b612a2)
- CLI review remediation: all 19 tickets, and v1.3.0 (#242) (cff23f6)
- fix(install): stop SDK releases hijacking the installer's latest-version lookup (#241) (d62f36f)
Install
brew install nself-org/nself/nself
# or download a tarball below for your platformVerify (Sigstore keyless)
cosign verify-blob \
--bundle <tarball>.tar.gz.sig \
--certificate-identity-regexp '^https://github.com/nself-org/cli/\.github/workflows/release\.yml@refs/tags/v1.3.0$' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
<tarball>.tar.gzFull signing + verification details: release-signing.md
Artifacts
- Platform tarballs (linux/darwin × amd64/arm64) + Windows zips (amd64/arm64)
checksums.txt— SHA-256 of all tarballssbom.spdx.json+ per-tarball SBOMs — SPDX software bill of materialsprovenance.intoto.jsonl— SLSA v1.0 provenance attestation*.sig— Sigstore cosign signature bundles for every artifact above