Registries
The platform runs four artifact registries, one per package ecosystem. Your tools publish to and pull from them with short-lived credentials scoped to you and one registry.
| Registry | Host | Holds |
|---|---|---|
put |
put.putnami.dev |
Putnami-native packages (config, migrations, archives, site content) |
npm |
npm.putnami.dev |
npm packages |
go |
go.putnami.dev |
Go modules |
oci |
oci.putnami.dev |
OCI images |
putnami cloud login links the workspace, records the
registry endpoints, and writes each registry's token recipe
(putnami cloud token --for <kind>). It mints no long-lived registry key.
Channels
A channel — canary, stable, pr-<n> — names one publication, and every
registry answers it in its own protocol's native vocabulary:
| Registry | Ask for a channel with | Answers with |
|---|---|---|
npm |
the dist-tag in the packument, GET /<pkg> |
the version tagged canary |
go |
GET /<module>/@v/<channel>.info |
{"Version": "…", "Time": "…"} |
put |
download?channel=<channel> |
the archive on that channel |
oci |
the image tag | the manifest on that tag |
The four answers name one publication. A publish stores an immutable
release set, moves the channel to it, and the registries project that head onto
their native tags, so @putnami/cli@canary and go.putnami.dev/http@canary
resolve to the same release.
For Go this is the ordinary proxy protocol: the go command sends any query
that is not a version as @v/<query>.info and then downloads the version that
answered, so go get go.putnami.dev/http@canary works with no extra flags.
GET /<module>/@latest?channel=<channel> returns the same answer.
A channel a package is not part of is absent, not stale: the dist-tag is missing from the packument and the Go proxy answers 404. A tool that reads a channel therefore never installs a version from an older publication by accident.
Reading a channel needs exactly the grant reading the version it names needs. A private package answers a channel the same way it answers a direct version request.
Consumer workspaces
A workspace that consumes another workspace's channel — putnami-cloud and
foundry track the framework's canary — names that owner in its manifest so
putnami upgrade --channel canary resolves the owner's release set, not its
own:
{
"options": {
"@putnami/cloud": {
"distribution": { "ownerWorkspace": "<owner workspace id>" }
}
}
}Without the setting the linked workspace is the owner, which is right for the
publishing workspace and wrong for every consumer. The consumer's users still
need a read grant on the owner's release-set package and on each member
they install; a lease the owner never granted is denied, not widened.
Private access
From a checkout linked to the owner workspace, activate each protocol namespace and grant another workspace read access to release history:
putnami cloud distribution bindings activate \
--protocol npm --namespace @owner \
--idempotency-key activate-owner-npm
putnami cloud distribution grants create \
--grantee-workspace-id <workspace-uuid> --channel latest \
--idempotency-key latest-readerThe grant covers artifacts named through the selected release channel while
the grant is active. Omit --channel to cover all release channels. Native
registries resolve the exact artifact and the reader's workspace membership
locally; a grant provides read access only. Internal artifacts remain confined
to their owner workspace. Revocation also removes access to historical pins
that depended on that grant, once the bounded authority refresh completes.
Use distribution bindings list, distribution grants list, and
distribution grants revoke <grant-id> for readback and revocation. The linked
checkout fixes the owner; creator and namespace authority are server-derived.
The command calls Put directly with your native registry credential. Only an
authorized human workspace administrator can create or revoke a grant.
Package/action, principal-kind and migration-purpose flags belong to the
retired grant contract and are refused.
Credentials
| Want to… | Do this |
|---|---|
| Set up / show registry endpoints | putnami cloud registries |
| Manage owner bindings and grants | putnami cloud distribution |
| Get a registry bearer | putnami cloud token --for npm|go|oci|put |
| Get one by host instead | putnami cloud registry-token --host <host> |
| Materialize for one native invocation | Add --materialize (the bearer is not printed) |
| Revoke and remove tokens | putnami cloud logout |
A registry token is issued for you and one registry. That is the whole input: there is no owner workspace, package, or action to pass, and passing one is an error rather than a silent no-op.
What the token can reach is decided by the registry, not by the token. For each namespace you touch, the registry finds the workspace that owns it and asks IAM whether you are a member with read or publish there. So access follows workspace membership and team grants — where it is administered — and it changes the moment membership changes, without reissuing anything. A publish that also writes a channel tag needs no second credential: whoever may publish into a namespace may tag within it.
Tokens are short-lived and cached locally until shortly before they expire, so a publish that resolves the recipe once per package does not mint once per package.
npm, netrc, and Docker credential files are host-keyed, which now matches the
credential: one bearer per host, good for everything you may reach there.
--materialize writes it for one immediate invocation.
--materialize writes to the credential files native tools actually read —
$HOME/.npmrc for --for npm and $HOME/.netrc for --for go — never under
PUTNAMI_HOME, even when a wrapper (such as the framework CLI launching an
extension) sets PUTNAMI_HOME to a different directory.
Publishing
Most publishing happens as part of putnami publish and putnami deploy. The
Putnami-native (put) registry also has direct publishers:
| Publish… | Command |
|---|---|
| Config schema + values | putnami cloud publish-config |
| Migration bundle | putnami cloud publish-migration |
| Pre-built archives | putnami cloud publish-archives |
| Docs (site-content bundle) | putnami cloud publish-doc |
OCI images
The OCI registry can copy and retag images server-side, without pulling and re-pushing layers:
| Want to… | Do this |
|---|---|
| Copy an image between repos | putnami cloud oci copy <src-ref> <dst-ref> |
| Add tags to an existing digest | putnami cloud oci retag <ref> <tag…> |
| Roll a tag back to its previous image | putnami cloud oci revert <repo>:<tag> |
Refs are registry-relative (ns/name, ns/name:tag, or ns/name@sha256:…).
Both verbs are pure metadata within the shared content-addressed store — zero
blob bytes move — and a multi-arch image index is copied whole (every platform
manifest comes along). Credentials come from the registry token seam (the same
one cloud login provisions), never from provider credentials.
Availability
| Page | Status |
|---|---|
Putnami packages (put) |
Planned |
| npm registry | Planned |
| Go module proxy | Planned |
| OCI images | Available: copy and retag are documented above |