The MSR JSON 2.0 schema describes entity as the "identity, categorization, and localized
descriptions of the software entity", yet it defines no category property. Because entity carries
additionalProperties: false, a publisher cannot state what kind of software it publishes without
making the manifest invalid.
Registries classify software anyway, by hand and off-manifest. Each registry guesses, the guesses drift apart,
and none of them can be checked against the domain-bound source of truth at
/.well-known/msr.json. Identity, trust and releases already live in the manifest; category is the
one piece of catalog metadata that does not.
entity.category, entity.subcategories)RFC 0009 adds two OPTIONAL properties to entity:
"entity": {
"category": "funeral-management",
"subcategories": ["erp", "point-of-sale"]
}
| Field | Type | Description |
|---|---|---|
category |
string (slug) | Primary category. Lowercase kebab-case (^[a-z0-9]+(-[a-z0-9]+)*$), at most 64
characters. |
subcategories |
array of slugs | 1 to 5 unique secondary categories, same slug format. Present only together with
category. |
subcategories MUST NOT repeat the value of category. The schema cannot express
this rule; validators MUST check it.funeral-management is software
for funeral homes), not the business of its vendor or its users.
Slugs come from one published taxonomy, versioned with the specification at
taxonomy/categories.json. Each entry has a
slug and an English name:
{
"version": "1.0.0",
"categories": [
{ "slug": "funeral-management", "name": "Funeral Management" }
]
}
subcategories →
category dependency. A violation is an error.
When a manifest declares a category found in the taxonomy, a registry SHOULD prefer it over its own
classification, because it is domain-bound (and signed when trust.signatures is present). A
registry keeps its own classification as a fallback for manifests without a category and for unknown slugs.
The change is additive and optional: every valid MSR JSON 2.0 manifest stays valid under 2.1, which makes it a
MINOR protocol change. The properties ship in MSR JSON 2.1 (schemas/msr-2.1.json); the 2.0 schema keeps rejecting them
under additionalProperties: false.
categories.json.mobile-apps,
internet-apps, desktop-utilities, ai-apps). The Working Group decides whether to deprecate them in favour of purpose categories.