Caputchin
Marketplace game development

Publish errors reference

Every error code the marketplace publish path can return, with the trigger and the link to the fix. For step-by-step fixes, see Fix a publish failure.

Error codes

CodeTriggerFix
invalid-repoThe repository field you entered in the publish modal does not parse as owner/name. Manual publish onlyUse owner/name or the full https://github.com/owner/name URL
repo-not-foundOur manifest fetch returned a 404. Your repository is private, missing, lacks the caputchin-game topic, or has no caputchin.json at the expected pathMake the repository public + add the topic + push a manifest
manifest-errorYour caputchin.json failed validation. The detail string names the specific field. See manifest-error sub-codesFix the field the detail names
bundle-fetch-failedThe bundle URL pinned by entry and/or npm could not be fetched, returned a non-2xx, or exceeds 12MBVerify the bundle URL and size
run-not-conformingThe optional run artifact's smoke check (run once with a deterministic seed) did not return a conforming verdict. Your game is still listed, just shows Not replayable and cannot gateMake your simulation deterministic
rate-limitedToo many publish requests from your IP in the last 60 secondsWait 60 seconds and retry

manifest-error sub-codes

When you receive a manifest-error, the detail string starts with the failing field. Use this table to find the right fix.

Field in detailMeaningFix
terms_acceptedThe field is missing or not the literal JSON boolean trueSet it to true after reading the Submission Terms
licenseMissing, malformed, or names an SPDX identifier outside the approved listPick an identifier from the approved list
(root)The JSON file does not parse as an object (you have a top-level array, string, or null)Wrap it in { ... }
marketplaceThe marketplace block is present but not an objectEither make it an object or remove it (self-hosted-only games omit the block)
marketplace.name / description / previewThe field is not a stringStringify or remove
marketplace.authorThe block is present but not an objectUse the { name?, url?, email? } shape
marketplace.author.name / urlThe subfield is not a stringStringify or remove
marketplace.author.emailNot a string OR fails the email-shape checkFix the address or remove the field
entrySingle game has no entry and no npm, or the value contains traversal (../), absolute slashes, Windows separators, query strings, or whitespaceProvide a clean relative path
npmNot a string, or fails the npm-name regexUse a valid npm package name
entry/npm+gamesBoth entry/npm and games declared at the same levelPick one: single games use entry/npm; collection wrappers use games
entry/npmSingle game has neitherAdd one
gamesNot an array, contains non-string entries, contains traversal/absolute paths, or contains . / ./ (which would self-reference the repo root)Fix the array
games[i]A specific child path is invalidFix that entry
run / run.entry / run.modules[i].*The optional split-run declaration is malformedFix per the schema

Approved licenses

Only caputchin.json manifests whose license field evaluates to an SPDX identifier on this list pass the licensing gate. See Marketplace Submission Terms section 4 for the binding version.

Permissive code licenses

SPDX IDName
MITMIT License
MIT-0MIT No Attribution
Apache-2.0Apache License 2.0
BSD-2-ClauseBSD 2-Clause "Simplified"
BSD-3-ClauseBSD 3-Clause "New" / "Revised"
0BSDBSD Zero Clause
ISCISC License
Zlibzlib License
UnlicenseThe Unlicense (public-domain dedication)
BSL-1.0Boost Software License 1.0
NCSAUniversity of Illinois / NCSA Open Source License
PostgreSQLPostgreSQL License
Python-2.0Python License 2.0
PHP-3.01PHP License 3.01
RubyRuby License
TCLTcl/Tk License
MS-PLMicrosoft Public License
AFL-3.0Academic Free License 3.0
MulanPSL-2.0Mulan Permissive Software License v2
WTFPLDo What The Fuck You Want To Public License

File-scope weak copyleft

SPDX IDName
MPL-2.0Mozilla Public License 2.0
MS-RLMicrosoft Reciprocal License

Asset licenses (art, audio, fonts bundled in the game)

SPDX IDName
CC0-1.0Creative Commons Zero v1.0
CC-BY-3.0Creative Commons Attribution 3.0
CC-BY-4.0Creative Commons Attribution 4.0
OFL-1.1SIL Open Font License 1.1

SPDX expression rules

  • MIT: bare identifier; must appear above.
  • MIT OR Apache-2.0: any branch of an OR must appear above.
  • MIT AND CC-BY-4.0: every branch of an AND must appear above.
  • Apache-2.0 WITH LLVM-exception: WITH clauses are not accepted.
  • LGPL-2.1+: the + (or-later) suffix is not accepted.

Why some licenses are excluded

CategoryExamplesWhy
Strong copyleftGPL-*, AGPL-*Viral; AGPL §13 network trigger is acute since we are the network host. (GPL-2.0-only is accepted only for first-party games published by Caputchin, not for third-party submissions.)
Library copyleft with bundling ambiguityLGPL-*"Convey the library" reads ambiguously for JavaScript and WebAssembly bundles
Share-alike on assetsCC-BY-SA-*, CC-BY-NC-*, CC-BY-ND-*Share-alike contaminates the embedding site's integration; NC rules out commercial deployment
Source-available (not OSI)BUSL-1.1, SSPL-1.0, Elastic-2.0Field-of-use restrictions, redistribution restrictions, or both

Note BSL-1.0 (Boost Software License) is permissive and accepted; BUSL-1.1 (Business Source License) is not. The parser compares against the SPDX canonical string verbatim, so the two never collide.

See also

On this page