Add registry extensions specification
Introduces a standardized way for registries to provide experimental or community-driven features without committing them to the core API specification.
Summary
- Extensions live under
/v0/x/<namespace>/<extension>URL structure - Simple conventions: REST, JSON responses, cursor pagination, optional auth
- Composable design building on core APIs where possible
This enables experimentation with features like search (#389) and MCP server integration (#24) while keeping the core API minimal and stable.
Fixes #776
Areas that I think people might have the most issue with:
-
Namespacing. Maybe this should be a MUST to prevent conflicts? Maybe namespacing is too heavy for simple extensions. It does make the URLs ugly but my guess is humans generally won't see them so maybe it's fine?
-
URL structure. Why
/x/? Why not/extensions/or/ext/. Or maybe even/experimental/? This is mainly to have shorter URLs (but appreciate this is at odds a bit with the comment above about humans not really reading this). -
No extension discovery mechanism. It's in "future considerations", but haven't actually specced out what this looks like. I think it's okay to go ahead as-is and if people need this discovery mechanism we can add it later. Perhaps an array of strings at
/v0/x? Or maybe array of objects with name key, and then people can put other things in later if we need to extend.
I'm a bit concerned by the fact that version number for the extension would be the same as the official one. This means it cannot be bumped when the extension changes.
I'm not really keen on having two version numbers in one path, isn't it better to suggest /x/<namespace>/<extension>/<version> instead?
I'm a bit concerned by the fact that version number for the extension would be the same as the official one. This means it cannot be bumped when the extension changes.
I'm not really keen on having two version numbers in one path, isn't it better to suggest
/x/<namespace>/<extension>/<version>instead?
Maybe this is a bit silly, but I was imagining that if extensions want versioning they should append it on.
So I see v0 as the version for the overall registry spec, and how you do a v0 extension is put it under /v0/x/...
But if you want your extension to be versioned, you have /v0/x/<namespace>/<extension>/<version> (appreciate it's getting a bit clunky though)