Skip to content

Enable upstream creation outside of a registry

📖 Context

The current Maven virtual registry API requires a virtual registry to exist before an upstream can be created. This design introduces some friction in the user flow and doesn't align well with the mental model of upstreams as reusable, independent entities.

🔥 Problem

  • Upstreams are intended to be reusable (e.g., Maven Central used across multiple registries).
  • With the current API, users must:
    1. Create a virtual registry.
    2. Add the upstream inside that registry.
    3. Then reuse it in other registries.

This order of operations can feel unintuitive. Conceptually, upstreams are more like a global resource that can then be linked to registries as needed.

Challenges this creates:

  • Users need to choose a registry to anchor the upstream first, which may feel arbitrary.
  • The Upstreams list page (#556837 (closed)) shows existing upstreams but does not allow creating one directly.
  • The flow makes reuse possible, but not as straightforward.

💡 Proposal

Consider elevating upstreams to an independent resource:

  • Allow creating upstreams independently (without a registry_id).
  • Let users link/unlink upstreams to registries after creation.
  • Allow the Upstreams list page to support creating upstreams directly.

Benefits:

  • Better matches user expectations that upstreams are "global" definitions reused across registries.
  • Makes the Upstreams list page consistent and actionable.
  • Simplifies workflows by removing the need to create a registry first.
Current experience (registry-first) Proposed experience (upstream-first)

Where upstream is created

Must first create an upstream inside a registry (anchoring).

Can either:

  • Create an upstream inside a registry; or
  • Create "globally" as an independent object.

Mental model

Cognitive mismatch: a reusable resource is created inside a consumer. Cleaner mental model: upstreams exist independently links where needed.

Upstreams list page

View, edit, delete Create, view, edit, delete