oz0 hub submit

Usage and flags for oz0 hub submit.

For: Operators and developers looking up a command.

Inspect a plugin at a pinned source as plugin inspect does (a Git URL at --ref, pinned to its commit, the packed content's SHA-256 and the forge's repository ID; a bundle file at --url; an oci:// reference by digest) and write its listing for a hub: the plugin's name is <publisher>/<manifest name>, where the publisher is a reverse-DNS namespace you can prove, such as io.github.<account> or com.example.

With --hub, the listing goes into that checkout of the hub repository, as a new listings/<publisher>/<plugin>.yaml or as a new version of the one there, and the pull request's text is printed (or written to --pr-text). With --hub and --sign-key, a signed copy of the submission goes next to it, as submissions/<publisher>/<plugin>/<version>.json: the hub's proof that the namespace's key, not just whoever opened the pull request, lists the version. Without --hub, the listing file is printed.

With --bundle and --sign-key, it writes a submission bundle instead, signed with your key (an engine key file from index keygen, or an unencrypted OpenSSH ed25519 key, the one you sign release tags with), for hubs that take submissions without GitHub: send the file to the hub's maintainers, who import it with the hub's own script. The hub's CI inspects the source again with its own pinned engine, so nothing here is taken on trust.

With --hub and --check, the checkout's own checks run on the listing just written, as the hub's pull request CI runs them (hubtool check against the commit the pull request goes into, --base or the merge base of HEAD with origin's default branch, with the engine its engine.lock pins), and show the same findings; it fails when they block the listing. It refuses a plugin past the README's limits or without a licence file (the docs page Plugin limits).

Usage

oz0 hub submit <git-url | bundle.tar.gz | oci://registry/repository@sha256:digest> --publisher <namespace> [flags]

Flags

FlagTypeDefaultDescription
--allow-localboollet a remote source reach every address, this machine's included, and plain http:// and file://, for a repository or registry you serve yourself; without it a remote source reaches public addresses over https:// only, and the networks --allow-net lists
--allow-netstringsa private network, such as 10.20.0.0/16, a remote source may reach over https://; this machine's own addresses (inside a listed network too), its link and metadata services need --allow-local; repeatable
--basestringthe merge base of HEAD with the checkout's origin/HEAD or origin/main, else HEADwith --check: the commit the pull request goes into, which the checks diff against
--bundlestringwrite a signed submission bundle to this file, for a hub that takes submissions without GitHub
--checkboolwith --hub: run the checkout's own checks (its hubtool, built if needed) on the listing, as the hub's pull request CI does
--engine-sourcestringwith --check: an engine checkout to build the engine the hub's engine.lock pins from, when the hub's cache has none
--forgestringfrom the hostthe forge that hosts the repository: github, gitlab, gitea or none
--homepagestringthe plugin's homepage, an https:// address
--hubstringa checkout of the hub repository: write listings/<publisher>/<plugin>.yaml there
--issuesstringwhere to report bugs, an https:// address
--maintainerstringArraya maintainer, as "Name <email>" or a name; repeatable
--new-versionboolfor a --bundle: the plugin is listed already, so this is a new version, not a first listing
--pathstringthe plugin's folder in the repository
--pr-authorstring$HUB_PR_AUTHORwith --check: the forge account that will open the pull request, for the check of who changed the listing
--pr-textstringwrite the pull request's text to this file (title on the first line) instead of printing it
--publisherstringyour reverse-DNS namespace, such as io.github.<account> or com.example: the plugin is listed as <publisher>/<manifest name>
--refstringbranch, tag or full commit SHA (default: the latest release tag, else the default branch); the listing pins the commit
--repository-idstringthe forge's ID of the repository, instead of asking the forge
--securitystringwhere to report a security problem, besides the hub's own report link: an https:// or mailto: address
--sign-keystringthe key to sign the submission with: an engine key file (index keygen) or an unencrypted OpenSSH ed25519 key; with --hub, a signed copy goes into the checkout's submissions/
--summarystringthe manifest's description, which must then fitone or two sentences about the plugin, at most 500 characters
--tagstringArraya tag for the hub's search, such as support or github: 1 to 32 lowercase letters, digits and dashes; repeatable, up to the hub's tags.yaml max_per_listing with --hub
--trackstringtags: the hub's bot lists every release tag your signing identity signs (none by default)
--urlstringfor a bundle file: the https:// URL it is published at

Inherited flags

FlagTypeDefaultDescription
--contextstring$OZ0_CONTEXT or <config dir>/orchestrator-zero/context.jsonCLI context file written by server init
--log-levelstringinfolog level: debug, info, warn or error

See all oz0 commands and the global flags.

On this page
Copyright © 2026