quarkusio/quarkus · error · RuntimeException

Stream ${id} does not include any release

Error message

Stream ${id} does not include any release

What it means

PlatformStream.getRecommendedRelease() returns the first release of the stream. When the stream contains no releases it throws RuntimeException naming the stream id, since there is no release to recommend. This signals incomplete platform stream data in the registry catalog.

Source

Thrown at independent-projects/tools/registry-client/src/main/java/io/quarkus/registry/catalog/PlatformStream.java:26

import io.quarkus.registry.json.JsonBuilder;

public interface PlatformStream {

    String getId();

    String getName();

    Collection<PlatformRelease> getReleases();

    Map<String, Object> getMetadata();

    PlatformRelease getRelease(PlatformReleaseVersion version);

    @JsonIgnore
    default PlatformRelease getRecommendedRelease() {
        final Collection<PlatformRelease> releases = getReleases();
        if (releases.isEmpty()) {
            throw new RuntimeException("Stream " + getId() + " does not include any release");
        }
        return releases.iterator().next();
    }

    default Mutable mutable() {
        return new PlatformStreamImpl.Builder(this);
    }

    interface Mutable extends PlatformStream, JsonBuilder<PlatformStream> {
        Mutable setId(String id);

        Mutable setName(String name);

        Mutable setReleases(Collection<PlatformRelease> releases);

        Mutable addRelease(PlatformRelease platformRelease);

        Mutable setMetadata(Map<String, Object> metadata);

View on GitHub (pinned to e1c734241f)

Solutions

  1. Check getReleases().isEmpty() before calling getRecommendedRelease().
  2. Target a stream that has published releases (usually a released stream, not a placeholder).
  3. Republish/fix the stream's releases in the registry catalog.
  4. Catch the RuntimeException and fall back to another stream or platform.

Example fix

// before
PlatformRelease r = stream.getRecommendedRelease(); // throws if empty
// after
if (!stream.getReleases().isEmpty()) {
    PlatformRelease r = stream.getRecommendedRelease();
}
Defensive patterns

Strategy: type-guard

Validate before calling

// Java
if (stream == null || stream.getReleases() == null || stream.getReleases().isEmpty()) {
    // choose a stream that actually has releases
}

Type guard

// Java
static Optional<PlatformRelease> recommendedReleaseOrNull(PlatformStream s) {
    return (s == null || s.getReleases().isEmpty())
            ? Optional.empty()
            : Optional.of(s.getReleases().iterator().next());
}

Try / catch

// Java
try {
    PlatformRelease r = stream.getRecommendedRelease();
} catch (RuntimeException e) {
    if (e.getMessage().endsWith("does not include any release")) {
        // fall back to a released stream
    }
    throw e;
}

Prevention

When it happens

Trigger: Calling getRecommendedRelease() on a PlatformStream whose releases array is empty — a stream entry published without any PlatformRelease, or all releases removed/filtered from the stream in the platform catalog JSON.

Common situations: A stream placeholder (e.g. 3.99.x) created before any release was published; a mirrored registry out of sync; releases pruned from a stream by registry maintenance.

Related errors


AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05). Data as JSON: /api/errors/cee209a53d457540. Report an issue: GitHub.