Versions and compatibility
Where StackNGO stands
StackNGO is in preview. Everything documented here works, but the interfaces may still change. Each page carries a badge that says whether the feature is available, in beta or in preparation; this changelog announces the changes.
What v1alpha1 means
All manifests are at version v1alpha1. In practice:
- Non-breaking additions: new optional fields, new enumeration values, new conditions may appear at any time. A manifest that is valid today stays valid.
- Incompatible changes possible, but announced: a field may be renamed, moved or made required. These changes are listed here with the steps to follow, and the old field remains accepted for at least one intermediate version when possible.
- The move to
v1beta1will mark stabilization: from then on, no breaking change without a new API version and automatic conversion.
The status of resources follows the same rule: documented reason values are stable,
new ones may be added.
CLI
The CLI follows semantic versioning. As long as no version is published, it is installed
from source and displays dev. Commands marked beta may change flags;
available commands only change with a major version.
HTTP API
- The
/v1prefix is stable. Routes marked beta in the OpenAPI specification (x-stackngo-status: beta) may change shape. - Response fields are never removed without notice; new fields may appear. A client must ignore fields it does not know.
- Unknown request fields are rejected (
400): a client that sends a field not yet deployed receives a clear error rather than silence.
Changelog
0.0.1 Beta — Authentication for your users
- Per-tenant directory: your applications' users have a directory of their own in your tenant, available as soon as it is created (no more
sng iam init). Invitation or open sign-up, passwordless sign-in (link sent by email, Google, GitHub, GitLab, Microsoft, LinkedIn, OpenID Connect, passkeys), account blocking, roles and permissions. See Users of your applications. - OIDC: an
IAMApplicationwithdirectory: tenantsigns in at your tenant's issuer; tokens carrytenant,rolesandpermissions. See Authentication for your applications. - Customizable sign-in page (logo, colors, theme, texts) with a preview in the console, and a new
IAMProviderKind for sign-in providers. - CLI:
sng iamis reworked (user,invitation,role,app,provider,login-page). Removed:sng iam init,config,group,user create|update,role assign|unassign|resources|sub|group,app link|unlink; roles are created withsng iam role create --permission. Seesng iam. - Manifests:
IAMApplicationgains thedirectoryfield (platformby default,tenant);IAMRoleandIAMGroupno longer declare your users' roles. - Console: new Authentication section (users, roles, applications, providers, sign-in page).
0.0.1 Beta — Console resource editor
- Console: a single editor with two synchronized tabs, Form and YAML, creates and
edits your resources (Registry, Monitoring, Applications, Create a resource). Creation
from a template or a minimal skeleton, several objects separated by
---, refusals shown on the field concerned, usable on a phone. See the resource editor.
0.0.1 Beta — Fixes
- Registry: the
ZotRepositoryKind is renamedRegistryRepository(andZotRobotbecameRegistryAccessKey); reapply your manifests with the new Kind. - Registry: the old secret of a
RegistryAccessKeystays accepted 24 h after a renewal (instead of one hour), adjustable from 0 to 720 h withspec.graceHours. - Identity:
assignableRoles(IAMApplication) andassignableByApplications(IAMRole), which were accepted without effect, are now refused with the reasonUnsupportedConfiguration.childRolesnow refers to anotherIAMRoleby its name; an unknown name givesInvalidReference. Managed policies show a description. - Monitoring: a notification channel whose secret is missing no longer prevents the other
channels from alerting; it shows the reason
SecretNotFound. - DNS: a
DNSRecordapplied withsng applyrequires a declaredDNSZone, likesng dns record set; deleting aDNSZonethat still has records is refused (409) whatever the command.sng dns zone createprints theTXTto add right away. - CI access (OIDC): a platform issuer is refused as soon as the trust is created; without
audiences, the API URL is used;sng tenant oidc getshows the result of the issuer check. - API:
415and429errors are JSON like the others; the rate limit becomes 300 requests per minute per IP address; theX-Tenant-Tokenheader is refused on every route. - CLI:
sng tenant useandsng tenant assumesay what to do when access is missing;sng iam app linkworks;sng sso login --client-credentialsaccepts--client-id(orSTNG_OAUTH_CLIENT_ID);sng monitor createuses5mby default, accepted by every tier;sng apply,plan,list,editanddeleteshowKind/name;sng registryhonours--tenanton all its commands, prints the digest only once, andbuildscans the image withtrivyon your machine (--registry-scanfor the registry scan). - Secrets: a deleted secret can be restored with all its versions
(
sng secret restore,POST /v1/secrets/{name}/restore, actionssm:write). The scheduled rotation can be canceled without touching the value (POST /v1/secrets/{name}/rotate/cancel, actionssm:rotate); anSSMSecretthat carriesrotateDaysrearms it. Withspec.materialize: true, anSSMSecretis usable by your static sites and notification channels, even if no App reads it. - Applications: an App pulls images from the platform registry without
imagePullSecrets(read-onlydefault-pullrobot in each tenant). An exposed service is onlyReadyonce its HTTPS certificate is issued. New reasons:RegistryAccessPending,CertificatePending,DNSConflict(domain name already taken in DNS, silent until now). - Resource state:
sng kind get KIND NAMEshows the observed state as comments below the manifest, and--json(likeGET /v1/resources/{kind}/{name}) includesstatus, forApp,SSMSecret,CDNSite,RegistryRepository,RegistryAccessKey,IAMApplication,IAMRoleandIAMGroup. - Registry:
sng registry robot credentials NAME [--show-password](andGET /v1/registry/robots/{name}/credentials, actionregistry:admin) hands a robot's credentials to a tool without a session. - Identity:
sng iam role assignandsng iam group add-useraccept the manifest name of anIAMRoleorIAMGroup(409while it is not ready).deletionPolicy: Blockwaits until the resource is no longer in use, with a message that says by what, then deletes it: recreating it under the same name works. - Static sites: each folder serves its
index.html(/docs/intro/and/docs/intro); a page not found is now only kept 30 seconds in cache; automatic HTTPS for each site. - Tiers: grid
3XS,2XS,XS,S,M,L,XL,2XL,3XL, tenant created in3XS; the former namesXXS,XXLandXXXLare still accepted. An existing tenant keeps its resources under the matching name of the new grid. - Sign-out:
sng sso logoutandPOST /v1/iam/logoutreally end sessions, within a few seconds: the session presented, or every session of the account with the identity token. An ended session receives401.
2026-10 — Documentation overhaul
- New documentation: manifests, CLI and API documented from the code, in French and English.
- The OpenAPI specification is served by the API at
GET /v1/openapi.yaml. - Features in beta: DNS (
DNSZone,DNSRecord,sng dns), image registry (sng registry), monitoring (Monitor,NotificationChannel,StatusPage), CI access via OIDC (IAMOIDCTrust,sng tenant oidc), tenant tiers (sng tenant tier). - In preparation: OpenTofu (
Workspace,Provider), generated APIs (GeneratedAPI).
2026-09 — Declarative secrets and rotation
SSMSecret: secret declared by manifest, value generated by the platform, periodic rotation (spec.rotateDays).sng secret setwithout a value generates a random value; flags--length,--contains,--rotation.- Breaking:
sng secret rotateno longer takes a value as an argument; the new value is generated or provided via--key/ generation flags.
2026-09 — Identity v5
- A single token per request; the
X-Tenant-Tokenheader is rejected. - Permissions via policies (
sng tenant policy), managed policiesadmin,readonly,readwrite,assume-role, plus two policies reserved for the operation of secrets. sng tenant useandsng tenant assumereplace the old session commands.