blob limits shows the limits in force for a blob: its platform.revisions_per_blob, and every limit of the
blob’s own type — for a workflow blob, among them the workflow.code_imports allowlist that decides which
third-party modules a revision’s code may import. Any key that can read the blob can read its limits. See
Limits for what each limit means and how its value is chosen.
Synopsis
What it does
One call, to the blob’s limits route. Unlike its two siblings it never fetches the blob record first — the limits route is the only request it makes.ID column is as wide as the longest
id served. The output is the platform’s catalog, printed as served:
- One block per group, in the platform’s order, headed by the group’s label and key:
Global (platform)first, then the blob’s own type. - One row per limit: its id;
HELDwhere the platform reports a holding; theSOURCEof its value —default,user,orgorblobfor an override set at that level,platformfor a fixed limit; and theVALUE. VALUEis printed as JSON, so a number, a flag, a module list andnullall print as the platform sent them. It is the last column because a module list has no width bound.- A limit the CLI has never seen prints like any other. Nothing about the catalog is built into this command.
--json the payload carries blob, groups — the platform’s response, verbatim — refreshed, and
cache_path (null without --refresh).
Access
Limits are readable with any key that can read the blob, whatever its role. A403 means what it means for
blob show: the blob is absent, or this key cannot read it, and the platform answers the same
for both. The command raises BLOB_NOT_ACCESSIBLE.
--refresh and the compiler’s allowlist cache
--refresh writes the modules in workflow.code_imports into the cache that build and diff read, under
~/.blobhub/cache/allowlist/, at mode 0600, alongside the fetch timestamp and the org and blob it came from. The
entry "*" is left out: it tells the platform to import every listed module before the code runs, and is not a
module itself. One more line follows the limits, naming the file it wrote:
--json payload’s cache_path.
workflow deploy reads the allowlist live and writes the same cache on every run
but a --dry-run, which reads the cache instead. This flag is for a machine that builds without deploying: run it
once there, and later builds read what it wrote. The cache is per-machine.
Before relying on it, know how the cache is keyed and when it goes stale.
The cache key is your reference as you typed it, lower-cased — org-qualified exactly when your reference is.
build keys on the manifest’s blob: field the same way, as written. So a manifest saying blob: dragon-ops
reads a different cache entry from the one blobhub blob limits acme/dragon-ops --refresh writes, and the
refresh you just ran would change nothing:
ALLOWLIST_STALE and
blobhub doctor’s allowlist row warns, naming the entry and its age. This
command is how you clear that.
Errors
See also
blobhub blob show— the record, readable with the same key.blobhub blob revisions— every revision, as many asplatform.revisions_per_bloballows.- Concepts — the allowlist cache and the other platform behaviours that shape the binary.
- Error codes —
LIMIT_EXCEEDED, the allowlist advisories, and the rest of the catalog. - Get Blob Limits — the route behind this command.
- Limits — the model, the error and the full catalog.

