Skip to content

Conversation

@domdomegg
Copy link
Member

@domdomegg domdomegg commented Nov 17, 2025

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

Introduces a standardized way for registries to provide experimental or
community-driven features without committing them to the core API. Extensions
live under /v0/x/<namespace>/<extension> and follow simple conventions around
REST, JSON responses, pagination, and auth.

This enables experimentation with features like search and MCP server
integration while keeping the core API minimal and stable.

Fixes #776
@domdomegg domdomegg mentioned this pull request Nov 17, 2025
@domdomegg
Copy link
Member Author

Areas that I think people might have the most issue with:

  1. 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?

  2. 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).

  3. 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.

Where possible:
- Follow standard REST conventions, return simple JSON responses, and avoid special headers
- For list endpoints, use cursor-based pagination matching the core API
- Extensions requiring authentication **SHOULD** follow the [Registry Authorization Specification](./registry-authorization.md)
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See #756

Copy link
Member

@rdimitrov rdimitrov left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great! I've added one suggestion but we can do a follow up with it if you agree it makes sense 👍


## Future Considerations

- **Extension discovery**: A potential `/v0/x` endpoint to list available extensions
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you think we should make this mandatory?

Copy link
Member Author

@domdomegg domdomegg Nov 19, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah - I think either:

  • an array of strings that are extension paths
  • an array of objects with path entries. same as above, but gives us room for extension in future

Thoughts?

@blkt
Copy link

blkt commented Nov 19, 2025

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?

@domdomegg
Copy link
Member Author

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)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Extensions spec

4 participants