# Confluent Documentation Archive

<style>
    /\* Intro text lives in raw HTML (not bare RST prose) so its color is
       explicit and self-contained here, matching index.rst's convention
       for this kind of landing page instead of depending on whatever
       ambient body/.rst-content cascade this orphan, sidebar-less page
       picks up. \*/
    /\* This page is an isoverviewpage with hassidebar: false, so
       layout.html renders it inside <main class="document"> without the
       .rst-content wrapper regular pages get. theme.css only assigns
       FontAwesome to the h1 permalink icon when scoped to
       ".rst-content h1 .headerlink", so here the icon's pilcrow
       character falls back to the body font (no matching glyph, hence
       the square) instead of rendering as the link icon. Mirror that
       rule scoped to .document instead. \*/
    .document h1 .headerlink {
        opacity: 0;
        font-size: 14px;
        font-family: FontAwesome;
        margin-left: 0.5em;
    }

    .document h1 .headerlink:focus,
    .document h1:hover .headerlink {
        opacity: 1;
    }

    /\* Scoped via :has(.archive-intro) rather than a bare "article"
       selector -- this page's <article> comes from layout.html's shared
       overview-page branch (no .rst-content wrapper, see the headerlink
       fix above), so a plain "article" selector would also center
       content on other overview pages (e.g. the homepage) that reuse
       the same structure. \*/
    article:has(.archive-intro) {
        max-width: 960px;
        margin: 0 auto;
    }

    .archive-intro {
        color: var(--cf-text-primary);
        font-size: 16px;
        line-height: 1.6;
        max-width: 900px;
        margin: 0 0 16px;
    }

    [data-theme='dark'] .archive-intro {
        color: var(--cf-text-primary);
    }

    .archive-intro a {
        color: var(--cf-link-primary);
    }

    .archive-intro a:hover {
        color: var(--cf-link-primary-hover);
    }

    [data-theme='dark'] .archive-intro a {
        color: var(--cf-link-primary);
    }

    [data-theme='dark'] .archive-intro a:hover {
        color: var(--cf-link-primary-hover);
    }

    .archive-download-form {
        max-width: 600px;
        margin: 30px 0;
        padding: 25px;
        border: 2px solid var(--cf-border-subtle);
        border-radius: 8px;
        background-color: var(--cf-surface-02);
    }

    /\* Same defensive pattern as .hp-card / .hp-getstarted-card on the
       homepage: don't rely solely on --cf-surface-02's own dark value,
       pin it explicitly for this page too. \*/
    [data-theme='dark'] .archive-download-form {
        background-color: var(--cf-surface-02);
        border-color: var(--cf-border-subtle);
    }

    .form-group {
        margin-bottom: 20px;
    }

    .form-group label {
        display: block;
        font-weight: 600;
        margin-bottom: 8px;
        color: var(--cf-text-primary);
    }

    /\* ── Searchable dropdown ─────────────────────────────────────────
       A text input filters a plain <ul> of options. The list is shown
       purely via :focus-within on the wrapper -- no JS open/close state.
       Options are non-focusable <li>s; each one preventDefault()s its
       own mousedown so the browser's default focus-resolution step
       never blurs the input (which would flip :focus-within false and
       hide the list before the subsequent click can land). \*/
    .cf-searchable-dropdown {
        position: relative;
        width: 100%;
    }

    .cf-searchable-dropdown_\_input {
        width: 100%;
        padding: 10px var(--cf-space-16);
        padding-right: 36px;
        border: 1.5px solid var(--cf-border-subtle);
        border-radius: var(--cf-radius-sm);
        font-size: 14px;
        font-family: var(--cf-font-family);
        background-color: var(--cf-surface-01);
        color: var(--cf-text-primary);
        cursor: text;
        transition: border-color 0.15s;
    }

    /\* Purely visual "this is a dropdown" affordance -- a sibling of the
       input (inputs can't have child elements), positioned over it and
       click-through so it never steals focus from the input beneath. \*/
    .cf-searchable-dropdown_\_chevron {
        position: absolute;
        top: 50%;
        right: var(--cf-space-16);
        transform: translateY(-50%);
        flex-shrink: 0;
        color: var(--cf-text-secondary);
        transition: transform 0.2s;
        pointer-events: none;
    }

    [data-theme='dark'] .cf-searchable-dropdown_\_chevron {
        color: var(--cf-text-secondary);
    }

    .cf-searchable-dropdown:focus-within .cf-searchable-dropdown_\_chevron {
        transform: translateY(-50%) rotate(180deg);
    }

    [data-theme='dark'] .cf-searchable-dropdown_\_input {
        background-color: var(--cf-surface-01);
        border-color: var(--cf-border-subtle);
        color: var(--cf-text-primary);
    }

    /\* Hover and open both read as "interactive" -- same purple border as
       .cf-version-dropdown_\_trigger. \*/
    .cf-searchable-dropdown_\_input:not(:disabled):hover,
    .cf-searchable-dropdown:focus-within .cf-searchable-dropdown_\_input {
        border-color: var(--cf-border-interactive);
    }

    .cf-searchable-dropdown_\_input:focus {
        outline: none;
    }

    /\* Open state: flatten the bottom corners and drop the bottom border
       back to subtle so the input reads as fused with the list attached
       directly beneath it, matching .cf-version-dropdown--open. \*/
    .cf-searchable-dropdown:focus-within .cf-searchable-dropdown_\_input {
        border-bottom-left-radius: 0;
        border-bottom-right-radius: 0;
        border-bottom-color: var(--cf-border-subtle);
    }

    .cf-searchable-dropdown_\_input:disabled {
        background-color: var(--cf-background);
        color: var(--cf-text-disabled);
        cursor: not-allowed;
    }

    [data-theme='dark'] .cf-searchable-dropdown_\_input:disabled {
        background-color: var(--cf-background);
        color: var(--cf-text-disabled);
    }

    .cf-searchable-dropdown_\_list {
        display: none;
        position: absolute;
        top: 100%;
        left: 0;
        right: 0;
        z-index: 200;
        max-height: 280px;
        margin: 0;
        padding: 0;
        overflow-y: auto;
        list-style: none;
        background-color: var(--cf-surface-01);
        border: 1.5px solid var(--cf-border-interactive);
        border-top: none;
        border-bottom-left-radius: var(--cf-radius-sm);
        border-bottom-right-radius: var(--cf-radius-sm);
    }

    [data-theme='dark'] .cf-searchable-dropdown_\_list {
        background-color: var(--cf-surface-01);
    }

    .cf-searchable-dropdown:focus-within .cf-searchable-dropdown_\_list {
        display: block;
    }

    .cf-searchable-dropdown_\_item {
        list-style: none;
        padding: 10px var(--cf-space-16);
        font-size: 14px;
        color: var(--cf-text-primary);
        cursor: pointer;
        transition: background 0.1s;
        border-bottom: 1px solid var(--cf-border-subtle);
        margin-left: unset !important;
    }

    .cf-searchable-dropdown_\_item:last-child {
        border-bottom: none;
    }

    .cf-searchable-dropdown_\_item:hover {
        background-color: var(--cf-surface-01-hover);
    }

    [data-theme='dark'] .cf-searchable-dropdown_\_item:hover {
        background-color: var(--cf-surface-01-hover);
    }

    .cf-searchable-dropdown_\_item[hidden] {
        display: none;
    }

    /\* Marks whichever item matches the input's current selection, so
       reopening the list shows what's already chosen -- matches
       .cf-version-dropdown_\_item--selected. \*/
    .cf-searchable-dropdown_\_item--selected {
        font-weight: 600;
        color: var(--cf-text-primary);
        background-color: var(--cf-surface-01-hover);
        border-left: 3px solid var(--color-purple-60);
        padding-left: calc(var(--cf-space-16) - 3px);
    }

    .cf-searchable-dropdown_\_item--selected:hover {
        background-color: var(--cf-surface-01-hover);
        color: var(--cf-text-primary);
    }

    [data-theme='dark'] .cf-searchable-dropdown_\_item--selected {
        background-color: var(--cf-surface-01-hover);
    }

    .cf-searchable-dropdown_\_group-label {
        list-style: none;
        padding: 6px var(--cf-space-16);
        font-size: 12px;
        font-weight: 600;
        color: var(--cf-text-secondary);
        pointer-events: none;
    }

    [data-theme='dark'] .cf-searchable-dropdown_\_group-label {
        color: var(--cf-text-secondary);
    }

    /\* Same visual as .cf-split-btn_\_main in dropdown-button.html (the
       header "Ask" button): outlined purple, transparent fill, light
       purple tint on hover -- not a filled primary CTA. \*/
    .download-btn {
        width: 50%;
        padding: 8px var(--cf-space-16);
        background: transparent;
        color: var(--color-purple-50);
        border: 1.5px solid var(--color-purple-50);
        border-radius: var(--cf-radius-sm);
        font-size: 14px;
        font-weight: 500;
        font-family: inherit;
        cursor: pointer;
        transition: background 0.15s ease;
    }

    [data-theme='dark'] .download-btn {
        color: var(--color-purple-30);
        border-color: var(--color-purple-40);
    }

    .download-btn:hover:not(:disabled) {
        background: var(--color-purple-10);
    }

    [data-theme='dark'] .download-btn:hover:not(:disabled) {
        background: var(--color-purple-90);
    }

    /\* dropdown-button.html has no disabled state of its own -- this page
       still needs one (button starts disabled until product + version
       are both chosen), so it's derived from the same muted tokens used
       elsewhere on this page rather than lifted from that file. \*/
    .download-btn:disabled {
        border-color: var(--cf-border-subtle);
        color: var(--cf-text-disabled);
        cursor: not-allowed;
    }

    [data-theme='dark'] .download-btn:disabled {
        border-color: var(--cf-border-subtle);
        color: var(--cf-text-disabled);
    }
</style>

<p class="archive-intro">
    This page contains documentation for all product versions, including those that are no longer
    officially supported. Confluent encourages you to upgrade to the latest version to ensure
    the best product and documentation experience. Confluent does not maintain or update
    documentation for unsupported versions.
</p>
<p class="archive-intro">
    For information on supported versions, see <a href="https://docs.confluent.io/">the Confluent documentation</a>.
</p>

<div class="archive-download-form">
    <form id="downloadForm">
        <div class="form-group">
            <label for="product-input">Select Product</label>
            <div class="cf-searchable-dropdown" id="product-dropdown">
                <input
                    type="text"
                    id="product-input"
                    class="cf-searchable-dropdown_\_input"
                    placeholder="Search for Product"
                    autocomplete="off"
                />
                <svg class="cf-searchable-dropdown_\_chevron" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
                    <polyline points="6 9 12 15 18 9"></polyline>
                </svg>
                <ul class="cf-searchable-dropdown_\_list" id="product-list"></ul>
            </div>
        </div>

        <div class="form-group">
            <label for="version-input">Select Version</label>
            <div class="cf-searchable-dropdown" id="version-dropdown">
                <input
                    type="text"
                    id="version-input"
                    class="cf-searchable-dropdown_\_input"
                    placeholder="Choose Version"
                    autocomplete="off"
                    disabled
                />
                <svg class="cf-searchable-dropdown_\_chevron" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
                    <polyline points="6 9 12 15 18 9"></polyline>
                </svg>
                <ul class="cf-searchable-dropdown_\_list" id="version-list"></ul>
            </div>
        </div>

        <button type="submit" class="download-btn" id="downloadBtn" disabled>
            Download Documentation
        </button>
    </form>
</div>

<div style="margin-bottom: 160px;"></div>

<script>
    const componentsData = {"ansible": {"displayName": "Ansible Playbooks for Confluent Platform", "versions": [{"version": "7.5", "label": "live"}, {"version": "7.6", "label": "live"}, {"version": "7.7", "label": "live"}, {"version": "7.8", "label": "live"}, {"version": "7.9", "label": "live"}, {"version": "8.0", "label": "live"}, {"version": "8.1", "label": "live"}, {"version": "8.2", "label": "live"}, {"version": "8.3", "label": "live"}]}, "clients-confluent-kafka-dotnet": {"displayName": "Kafka .NET Client", "versions": [{"version": "1.5", "label": "live"}, {"version": "1.6", "label": "live"}, {"version": "1.7", "label": "live"}, {"version": "1.8", "label": "live"}, {"version": "1.9", "label": "live"}, {"version": "2.0", "label": "live"}, {"version": "2.1", "label": "live"}, {"version": "2.10", "label": "live"}, {"version": "2.11", "label": "live"}, {"version": "2.12", "label": "live"}, {"version": "2.13", "label": "live"}, {"version": "2.14", "label": "live"}, {"version": "2.15", "label": "live"}, {"version": "2.2", "label": "live"}, {"version": "2.3", "label": "live"}, {"version": "2.4", "label": "live"}, {"version": "2.5", "label": "live"}, {"version": "2.6", "label": "live"}, {"version": "2.8", "label": "live"}, {"version": "2.9", "label": "live"}]}, "clients-confluent-kafka-go": {"displayName": "Kafka Go Client", "versions": [{"version": "1.5", "label": "live"}, {"version": "1.6", "label": "live"}, {"version": "1.7", "label": "live"}, {"version": "1.8", "label": "live"}, {"version": "1.9", "label": "live"}, {"version": "2.0", "label": "live"}, {"version": "2.1", "label": "live"}, {"version": "2.10", "label": "live"}, {"version": "2.11", "label": "live"}, {"version": "2.12", "label": "live"}, {"version": "2.13", "label": "live"}, {"version": "2.14", "label": "live"}, {"version": "2.15", "label": "live"}, {"version": "2.2", "label": "live"}, {"version": "2.3", "label": "live"}, {"version": "2.4", "label": "live"}, {"version": "2.5", "label": "live"}, {"version": "2.6", "label": "live"}, {"version": "2.8", "label": "live"}]}, "clients-confluent-kafka-javascript": {"displayName": "Kafka JavaScript Client", "versions": [{"version": "1.0", "label": "live"}, {"version": "1.2", "label": "live"}, {"version": "1.3", "label": "live"}, {"version": "1.4", "label": "live"}, {"version": "1.5", "label": "live"}, {"version": "1.6", "label": "live"}, {"version": "1.8", "label": "live"}, {"version": "1.9", "label": "live"}]}, "clients-confluent-kafka-python": {"displayName": "Kafka Python Client", "versions": [{"version": "1.5", "label": "live"}, {"version": "1.6", "label": "live"}, {"version": "1.7", "label": "live"}, {"version": "1.8", "label": "live"}, {"version": "1.9", "label": "live"}, {"version": "2.0", "label": "live"}, {"version": "2.1", "label": "live"}, {"version": "2.10", "label": "live"}, {"version": "2.11", "label": "live"}, {"version": "2.12", "label": "live"}, {"version": "2.13", "label": "live"}, {"version": "2.14", "label": "live"}, {"version": "2.15", "label": "live"}, {"version": "2.2", "label": "live"}, {"version": "2.3", "label": "live"}, {"version": "2.4", "label": "live"}, {"version": "2.5", "label": "live"}, {"version": "2.6", "label": "live"}, {"version": "2.7", "label": "live"}, {"version": "2.8", "label": "live"}, {"version": "2.9", "label": "live"}]}, "clients-kafka-java": {"displayName": "Kafka Java Client", "versions": [{"version": "2.6", "label": "live"}, {"version": "2.7", "label": "live"}, {"version": "2.8", "label": "live"}, {"version": "3.0", "label": "live"}, {"version": "3.1", "label": "live"}, {"version": "3.2", "label": "live"}, {"version": "3.3", "label": "live"}, {"version": "3.4", "label": "live"}, {"version": "3.5", "label": "live"}, {"version": "3.6", "label": "live"}, {"version": "3.7", "label": "live"}, {"version": "3.8", "label": "live"}, {"version": "3.9", "label": "live"}, {"version": "4.0", "label": "live"}, {"version": "4.1", "label": "live"}]}, "clients-librdkafka": {"displayName": "Kafka C/C++ Client", "versions": [{"version": "1.5", "label": "live"}, {"version": "1.6", "label": "live"}, {"version": "1.7", "label": "live"}, {"version": "1.8", "label": "live"}, {"version": "1.9", "label": "live"}, {"version": "2.0", "label": "live"}, {"version": "2.1", "label": "live"}, {"version": "2.10", "label": "live"}, {"version": "2.11", "label": "live"}, {"version": "2.12", "label": "live"}, {"version": "2.13", "label": "live"}, {"version": "2.14", "label": "live"}, {"version": "2.15", "label": "live"}, {"version": "2.2", "label": "live"}, {"version": "2.3", "label": "live"}, {"version": "2.4", "label": "live"}, {"version": "2.5", "label": "live"}, {"version": "2.6", "label": "live"}, {"version": "2.8", "label": "live"}]}, "cloud": {"displayName": "Confluent Cloud", "versions": [{"version": "current", "label": "live"}]}, "confluent-cli": {"displayName": "Confluent CLI", "versions": [{"version": "4.0", "label": "live"}, {"version": "4.1", "label": "live"}, {"version": "4.10", "label": "live"}, {"version": "4.11", "label": "live"}, {"version": "4.12", "label": "live"}, {"version": "4.13", "label": "live"}, {"version": "4.14", "label": "live"}, {"version": "4.15", "label": "live"}, {"version": "4.16", "label": "live"}, {"version": "4.17", "label": "live"}, {"version": "4.18", "label": "live"}, {"version": "4.19", "label": "live"}, {"version": "4.2", "label": "live"}, {"version": "4.20", "label": "live"}, {"version": "4.21", "label": "live"}, {"version": "4.22", "label": "live"}, {"version": "4.23", "label": "live"}, {"version": "4.24", "label": "live"}, {"version": "4.25", "label": "live"}, {"version": "4.26", "label": "live"}, {"version": "4.27", "label": "live"}, {"version": "4.28", "label": "live"}, {"version": "4.29", "label": "live"}, {"version": "4.3", "label": "live"}, {"version": "4.30", "label": "live"}, {"version": "4.31", "label": "live"}, {"version": "4.32", "label": "live"}, {"version": "4.33", "label": "live"}, {"version": "4.34", "label": "live"}, {"version": "4.35", "label": "live"}, {"version": "4.36", "label": "live"}, {"version": "4.37", "label": "live"}, {"version": "4.38", "label": "live"}, {"version": "4.39", "label": "live"}, {"version": "4.4", "label": "live"}, {"version": "4.40", "label": "live"}, {"version": "4.41", "label": "live"}, {"version": "4.42", "label": "live"}, {"version": "4.43", "label": "live"}, {"version": "4.44", "label": "live"}, {"version": "4.45", "label": "live"}, {"version": "4.46", "label": "live"}, {"version": "4.47", "label": "live"}, {"version": "4.48", "label": "live"}, {"version": "4.49", "label": "live"}, {"version": "4.5", "label": "live"}, {"version": "4.50", "label": "live"}, {"version": "4.51", "label": "live"}, {"version": "4.52", "label": "live"}, {"version": "4.53", "label": "live"}, {"version": "4.54", "label": "live"}, {"version": "4.55", "label": "live"}, {"version": "4.56", "label": "live"}, {"version": "4.57", "label": "live"}, {"version": "4.58", "label": "live"}, {"version": "4.59", "label": "live"}, {"version": "4.6", "label": "live"}, {"version": "4.60", "label": "live"}, {"version": "4.61", "label": "live"}, {"version": "4.62", "label": "live"}, {"version": "4.63", "label": "live"}, {"version": "4.64", "label": "live"}, {"version": "4.65", "label": "live"}, {"version": "4.66", "label": "live"}, {"version": "4.67", "label": "live"}, {"version": "4.68", "label": "live"}, {"version": "4.69", "label": "live"}, {"version": "4.7", "label": "live"}, {"version": "4.70", "label": "live"}, {"version": "4.71", "label": "live"}, {"version": "4.72", "label": "live"}, {"version": "4.73", "label": "live"}, {"version": "4.74", "label": "live"}, {"version": "4.8", "label": "live"}, {"version": "4.9", "label": "live"}]}, "cp-control-center": {"displayName": "Control Center for Confluent Platform", "versions": [{"version": "2.0", "label": "live"}, {"version": "2.1", "label": "live"}, {"version": "2.2", "label": "live"}, {"version": "2.3", "label": "live"}, {"version": "2.4", "label": "live"}, {"version": "2.5", "label": "live"}]}, "cp-flink": {"displayName": "Confluent Platform for Apache Flink", "versions": [{"version": "2.2", "label": "live"}, {"version": "2.3", "label": "live"}, {"version": "2.4", "label": "live"}]}, "debezium-connect-mongodb-source": {"displayName": "Debezium MongoDB Source Connector", "versions": [{"version": "1.2", "label": "live"}, {"version": "1.3", "label": "live"}, {"version": "1.4", "label": "live"}, {"version": "1.5", "label": "live"}, {"version": "1.6", "label": "live"}, {"version": "1.8", "label": "live"}, {"version": "1.9", "label": "live"}, {"version": "2.0", "label": "live"}, {"version": "2.1", "label": "live"}, {"version": "2.2", "label": "live"}, {"version": "2.3", "label": "live"}, {"version": "2.4", "label": "live"}]}, "debezium-connect-mysql-source": {"displayName": "Debezium MySQL Source Connector", "versions": [{"version": "1.2", "label": "live"}, {"version": "1.9", "label": "live"}, {"version": "2.0", "label": "live"}, {"version": "2.1", "label": "live"}, {"version": "2.2", "label": "live"}, {"version": "2.3", "label": "live"}]}, "debezium-connect-postgres-source": {"displayName": "Debezium PostgreSQL Source Connector", "versions": [{"version": "1.2", "label": "live"}, {"version": "1.3", "label": "live"}, {"version": "1.4", "label": "live"}, {"version": "1.5", "label": "live"}, {"version": "1.6", "label": "live"}, {"version": "1.7", "label": "live"}, {"version": "1.8", "label": "live"}, {"version": "1.9", "label": "live"}, {"version": "2.0", "label": "live"}, {"version": "2.1", "label": "live"}, {"version": "2.2", "label": "live"}, {"version": "2.3", "label": "live"}, {"version": "2.4", "label": "live"}]}, "debezium-connect-sqlserver-source": {"displayName": "Debezium SQL Server Source Connector", "versions": [{"version": "1.2", "label": "live"}, {"version": "1.3", "label": "live"}, {"version": "1.4", "label": "live"}, {"version": "1.5", "label": "live"}, {"version": "1.6", "label": "live"}, {"version": "1.7", "label": "live"}, {"version": "1.8", "label": "live"}, {"version": "1.9", "label": "live"}, {"version": "2.0", "label": "live"}, {"version": "2.1", "label": "live"}, {"version": "2.2", "label": "live"}, {"version": "2.3", "label": "live"}, {"version": "2.4", "label": "live"}]}, "kafka-connect-activemq-sink": {"displayName": "ActiveMQ Sink Connector", "versions": [{"version": "1.1", "label": "live"}, {"version": "1.2", "label": "live"}, {"version": "1.3", "label": "live"}, {"version": "1.4", "label": "live"}, {"version": "2.0", "label": "live"}, {"version": "2.1", "label": "live"}, {"version": "2.2", "label": "live"}]}, "kafka-connect-activemq-source": {"displayName": "ActiveMQ Source Connector", "versions": [{"version": "10.0", "label": "live"}, {"version": "10.1", "label": "live"}, {"version": "10.2", "label": "live"}, {"version": "11.0", "label": "live"}, {"version": "12.0", "label": "live"}, {"version": "12.1", "label": "live"}, {"version": "12.2", "label": "live"}, {"version": "13.0", "label": "live"}, {"version": "13.1", "label": "live"}, {"version": "5.5", "label": "live"}]}, "kafka-connect-amps": {"displayName": "AMPS Source Connector", "versions": [{"version": "1.0", "label": "live"}]}, "kafka-connect-appdynamics-metrics": {"displayName": "AppDynamics Metrics Sink Connector", "versions": [{"version": "1.1", "label": "live"}, {"version": "1.2", "label": "live"}, {"version": "1.3", "label": "live"}, {"version": "2.0", "label": "live"}]}, "kafka-connect-aws-cloudwatch-logs": {"displayName": "Amazon CloudWatch Logs Source Connector", "versions": [{"version": "1.0", "label": "live"}, {"version": "1.1", "label": "live"}, {"version": "1.2", "label": "live"}, {"version": "1.3", "label": "live"}, {"version": "1.4", "label": "live"}, {"version": "2.0", "label": "live"}]}, "kafka-connect-aws-cloudwatch-metrics": {"displayName": "Amazon CloudWatch Metrics Sink", "versions": [{"version": "1.1", "label": "live"}, {"version": "1.2", "label": "live"}, {"version": "1.3", "label": "live"}, {"version": "2.0", "label": "live"}]}, "kafka-connect-aws-dynamodb": {"displayName": "Amazon DynamoDB Sink Connector", "versions": [{"version": "1.1", "label": "live"}, {"version": "1.2", "label": "live"}, {"version": "1.3", "label": "live"}, {"version": "1.4", "label": "live"}, {"version": "1.5", "label": "live"}]}, "kafka-connect-aws-lambda": {"displayName": "AWS Lambda Sink Connector", "versions": [{"version": "1.0", "label": "live"}, {"version": "1.1", "label": "live"}, {"version": "2.0", "label": "live"}, {"version": "3.0", "label": "live"}]}, "kafka-connect-aws-redshift": {"displayName": "Amazon Redshift Sink Connector", "versions": [{"version": "1.0", "label": "live"}, {"version": "1.1", "label": "live"}, {"version": "1.2", "label": "live"}]}, "kafka-connect-azure-blob-storage-sink": {"displayName": "Azure Blob Storage Sink Connector", "versions": [{"version": "1.4", "label": "live"}, {"version": "1.5", "label": "live"}, {"version": "1.6", "label": "live"}, {"version": "1.7", "label": "live"}, {"version": "2.0", "label": "live"}, {"version": "2.1", "label": "live"}, {"version": "2.2", "label": "live"}]}, "kafka-connect-azure-blob-storage-source": {"displayName": "Azure Blob Storage Source Connector", "versions": [{"version": "1.1", "label": "live"}, {"version": "1.2", "label": "live"}, {"version": "1.3", "label": "live"}, {"version": "1.4", "label": "live"}, {"version": "2.0", "label": "live"}, {"version": "2.1", "label": "live"}, {"version": "2.2", "label": "live"}, {"version": "2.3", "label": "live"}, {"version": "2.4", "label": "live"}, {"version": "2.5", "label": "live"}, {"version": "2.6", "label": "live"}, {"version": "3.0", "label": "live"}, {"version": "3.1", "label": "live"}]}, "kafka-connect-azure-data-lake-gen1-sink": {"displayName": "Azure Data Lake Storage Gen1 Sink Connector", "versions": [{"version": "1.4", "label": "live"}, {"version": "1.5", "label": "live"}, {"version": "1.6", "label": "live"}]}, "kafka-connect-azure-data-lake-gen2-sink": {"displayName": "Azure Data Lake Storage Gen2 Sink Connector", "versions": [{"version": "1.4", "label": "live"}, {"version": "1.5", "label": "live"}, {"version": "1.6", "label": "live"}, {"version": "1.7", "label": "live"}, {"version": "2.0", "label": "live"}, {"version": "2.1", "label": "live"}, {"version": "2.2", "label": "live"}]}, "kafka-connect-azure-event-hubs": {"displayName": "Azure Event Hubs Source Connector", "versions": [{"version": "1.0", "label": "live"}, {"version": "1.1", "label": "live"}, {"version": "1.2", "label": "live"}, {"version": "2.0", "label": "live"}, {"version": "2.1", "label": "live"}]}, "kafka-connect-azure-functions": {"displayName": "Azure Functions Sink Connector", "versions": [{"version": "1.0", "label": "live"}, {"version": "2.0", "label": "live"}]}, "kafka-connect-azure-search": {"displayName": "Azure Cognitive Search Sink Connector", "versions": [{"version": "1.0", "label": "live"}, {"version": "1.1", "label": "live"}]}, "kafka-connect-azure-servicebus": {"displayName": "Azure Service Bus Source Connector", "versions": [{"version": "1.1", "label": "live"}, {"version": "1.2", "label": "live"}, {"version": "1.3", "label": "live"}]}, "kafka-connect-azure-sql-dw": {"displayName": "Azure Synapse Analytics Sink Connector", "versions": [{"version": "1.0", "label": "live"}]}, "kafka-connect-bigquery": {"displayName": "Google BigQuery Sink Connector", "versions": [{"version": "1.6", "label": "live"}, {"version": "2.0", "label": "live"}, {"version": "2.1", "label": "live"}, {"version": "2.2", "label": "live"}, {"version": "2.3", "label": "live"}, {"version": "2.4", "label": "live"}, {"version": "2.5", "label": "live"}, {"version": "2.6", "label": "live"}]}, "kafka-connect-cassandra": {"displayName": "Apache Cassandra Sink Connector", "versions": [{"version": "1.2", "label": "live"}, {"version": "2.0", "label": "live"}]}, "kafka-connect-cdc-mssql": {"displayName": "Microsoft SQL Server Source Connector", "versions": [{"version": "1.2", "label": "live"}]}, "kafka-connect-data-diode": {"displayName": "Data Diode Connector (Source and Sink)", "versions": [{"version": "1.1", "label": "live"}, {"version": "1.2", "label": "live"}]}, "kafka-connect-databricks-delta-lake-sink": {"displayName": "Databricks Delta Lake Sink Connector", "versions": [{"version": "1.0", "label": "live"}]}, "kafka-connect-datadog-metrics": {"displayName": "Datadog Metrics Sink Connector", "versions": [{"version": "1.1", "label": "live"}, {"version": "1.2", "label": "live"}, {"version": "1.3", "label": "live"}, {"version": "2.0", "label": "live"}]}, "kafka-connect-datagen": {"displayName": "Datagen Source Connector", "versions": [{"version": "0.4", "label": "live"}, {"version": "0.5", "label": "live"}, {"version": "0.6", "label": "live"}, {"version": "0.7", "label": "live"}]}, "kafka-connect-elasticsearch": {"displayName": "Elasticsearch Service Sink Connector", "versions": [{"version": "10.0", "label": "live"}, {"version": "11.0", "label": "live"}, {"version": "11.1", "label": "live"}, {"version": "11.2", "label": "live"}, {"version": "13.0", "label": "live"}, {"version": "13.1", "label": "live"}, {"version": "14.0", "label": "live"}, {"version": "14.1", "label": "live"}, {"version": "15.0", "label": "live"}, {"version": "15.1", "label": "live"}]}, "kafka-connect-firebase": {"displayName": "Google Firebase Connector (Source and Sink)", "versions": [{"version": "1.1", "label": "live"}, {"version": "1.2", "label": "live"}]}, "kafka-connect-ftps": {"displayName": "FTPS Connector (Source and Sink)", "versions": [{"version": "1.0", "label": "live"}]}, "kafka-connect-gcp-bigtable": {"displayName": "Google Cloud BigTable Sink Connector", "versions": [{"version": "1.0", "label": "live"}, {"version": "2.0", "label": "live"}]}, "kafka-connect-gcp-dataproc": {"displayName": "Google Cloud Dataproc Sink Connector", "versions": [{"version": "1.0", "label": "live"}, {"version": "1.1", "label": "live"}, {"version": "1.2", "label": "live"}, {"version": "1.3", "label": "live"}]}, "kafka-connect-gcp-functions": {"displayName": "Google Cloud Functions Sink Connector", "versions": [{"version": "1.1", "label": "live"}, {"version": "1.2", "label": "live"}]}, "kafka-connect-gcp-pubsub": {"displayName": "Google Cloud Pub/Sub Source Connector", "versions": [{"version": "1.0", "label": "live"}, {"version": "1.1", "label": "live"}, {"version": "1.2", "label": "live"}]}, "kafka-connect-gcp-spanner": {"displayName": "Google Cloud Spanner Sink Connector", "versions": [{"version": "1.0", "label": "live"}, {"version": "1.1", "label": "live"}, {"version": "1.2", "label": "live"}]}, "kafka-connect-gcs-sink": {"displayName": "Google Cloud Storage Sink Connector", "versions": [{"version": "10.0", "label": "live"}, {"version": "10.1", "label": "live"}, {"version": "10.2", "label": "live"}, {"version": "10.3", "label": "live"}, {"version": "11.0", "label": "live"}, {"version": "5.5", "label": "live"}]}, "kafka-connect-gcs-source": {"displayName": "Google Cloud Storage Source Connector", "versions": [{"version": "1.1", "label": "live"}, {"version": "1.2", "label": "live"}, {"version": "1.3", "label": "live"}, {"version": "1.4", "label": "live"}, {"version": "2.0", "label": "live"}, {"version": "2.1", "label": "live"}, {"version": "2.2", "label": "live"}, {"version": "2.3", "label": "live"}, {"version": "2.4", "label": "live"}, {"version": "2.5", "label": "live"}, {"version": "2.6", "label": "live"}, {"version": "3.0", "label": "live"}, {"version": "3.1", "label": "live"}]}, "kafka-connect-gemfire": {"displayName": "VMware Tanzu GemFire Sink Connector", "versions": [{"version": "1.0", "label": "live"}]}, "kafka-connect-github": {"displayName": "GitHub Source Connector", "versions": [{"version": "1.0", "label": "live"}, {"version": "2.0", "label": "live"}, {"version": "2.1", "label": "live"}]}, "kafka-connect-hbase": {"displayName": "Apache HBase Sink Connector", "versions": [{"version": "1.0", "label": "live"}, {"version": "2.0", "label": "live"}]}, "kafka-connect-hdfs": {"displayName": "HDFS 2 Sink Connector", "versions": [{"version": "10.0", "label": "live"}, {"version": "10.1", "label": "live"}, {"version": "10.2", "label": "live"}]}, "kafka-connect-hdfs2-source": {"displayName": "HDFS 2 Source Connector", "versions": [{"version": "1.2", "label": "live"}, {"version": "1.3", "label": "live"}, {"version": "1.4", "label": "live"}, {"version": "2.0", "label": "live"}, {"version": "2.1", "label": "live"}, {"version": "2.2", "label": "live"}, {"version": "2.3", "label": "live"}, {"version": "2.4", "label": "live"}, {"version": "2.5", "label": "live"}, {"version": "2.6", "label": "live"}, {"version": "3.0", "label": "live"}, {"version": "3.1", "label": "live"}]}, "kafka-connect-hdfs3-sink": {"displayName": "HDFS 3 Sink Connector", "versions": [{"version": "1.0", "label": "live"}, {"version": "1.1", "label": "live"}, {"version": "1.2", "label": "live"}, {"version": "2.0", "label": "live"}, {"version": "3.0", "label": "live"}]}, "kafka-connect-hdfs3-source": {"displayName": "HDFS 3 Source Connector", "versions": [{"version": "1.1", "label": "live"}, {"version": "1.2", "label": "live"}, {"version": "1.3", "label": "live"}, {"version": "1.4", "label": "live"}, {"version": "2.0", "label": "live"}, {"version": "2.1", "label": "live"}, {"version": "2.2", "label": "live"}, {"version": "2.3", "label": "live"}, {"version": "2.4", "label": "live"}, {"version": "2.5", "label": "live"}, {"version": "2.6", "label": "live"}, {"version": "3.0", "label": "live"}, {"version": "3.1", "label": "live"}]}, "kafka-connect-http": {"displayName": "HTTP Sink Connector", "versions": [{"version": "1.0", "label": "live"}, {"version": "1.1", "label": "live"}, {"version": "1.2", "label": "live"}, {"version": "1.3", "label": "live"}, {"version": "1.4", "label": "live"}, {"version": "1.5", "label": "live"}, {"version": "1.6", "label": "live"}, {"version": "1.7", "label": "live"}]}, "kafka-connect-ibmmq-sink": {"displayName": "IBM MQ Sink Connector", "versions": [{"version": "1.3", "label": "live"}, {"version": "1.4", "label": "live"}, {"version": "2.0", "label": "live"}, {"version": "2.1", "label": "live"}, {"version": "2.2", "label": "live"}]}, "kafka-connect-ibmmq-source": {"displayName": "IBM MQ Source Connector", "versions": [{"version": "10.0", "label": "live"}, {"version": "10.1", "label": "live"}, {"version": "10.2", "label": "live"}, {"version": "11.0", "label": "live"}, {"version": "12.0", "label": "live"}, {"version": "12.1", "label": "live"}, {"version": "12.2", "label": "live"}, {"version": "13.0", "label": "live"}, {"version": "13.1", "label": "live"}, {"version": "5.5", "label": "live"}]}, "kafka-connect-influxdb": {"displayName": "InfluxDB Connector (Source and Sink)", "versions": [{"version": "1.2", "label": "live"}]}, "kafka-connect-jdbc": {"displayName": "JDBC Connector (Source and Sink)", "versions": [{"version": "10.0", "label": "live"}, {"version": "10.1", "label": "live"}, {"version": "10.2", "label": "live"}, {"version": "10.3", "label": "live"}, {"version": "10.4", "label": "live"}, {"version": "10.5", "label": "live"}, {"version": "10.6", "label": "live"}, {"version": "10.7", "label": "live"}, {"version": "10.8", "label": "live"}, {"version": "10.9", "label": "live"}]}, "kafka-connect-jira": {"displayName": "Jira Source Connector", "versions": [{"version": "1.0", "label": "live"}, {"version": "1.1", "label": "live"}, {"version": "1.2", "label": "live"}, {"version": "1.3", "label": "live"}, {"version": "1.4", "label": "live"}]}, "kafka-connect-jms-sink": {"displayName": "JMS Sink Connector", "versions": [{"version": "1.3", "label": "live"}, {"version": "1.4", "label": "live"}, {"version": "2.0", "label": "live"}, {"version": "2.1", "label": "live"}, {"version": "2.2", "label": "live"}]}, "kafka-connect-jms-source": {"displayName": "JMS Source Connector", "versions": [{"version": "10.0", "label": "live"}, {"version": "10.1", "label": "live"}, {"version": "10.2", "label": "live"}, {"version": "11.0", "label": "live"}, {"version": "12.0", "label": "live"}, {"version": "12.1", "label": "live"}, {"version": "12.2", "label": "live"}, {"version": "13.0", "label": "live"}, {"version": "13.1", "label": "live"}, {"version": "5.5", "label": "live"}]}, "kafka-connect-kinesis": {"displayName": "Amazon Kinesis Source Connector", "versions": [{"version": "1.3", "label": "live"}, {"version": "1.4", "label": "live"}, {"version": "2.0", "label": "live"}]}, "kafka-connect-kudu": {"displayName": "Apache Kudu Connector (Source and Sink)", "versions": [{"version": "1.0", "label": "live"}]}, "kafka-connect-maprdb": {"displayName": "MapR-DB Sink Connector", "versions": [{"version": "1.1", "label": "live"}]}, "kafka-connect-marketo": {"displayName": "Marketo Source Connector", "versions": [{"version": "1.0", "label": "live"}]}, "kafka-connect-mqtt": {"displayName": "MQTT Connector (Source and Sink)", "versions": [{"version": "1.3", "label": "live"}, {"version": "1.4", "label": "live"}, {"version": "1.5", "label": "live"}, {"version": "1.6", "label": "live"}, {"version": "1.7", "label": "live"}]}, "kafka-connect-netezza": {"displayName": "Netezza Sink Connector", "versions": [{"version": "1.0", "label": "live"}]}, "kafka-connect-omnisci": {"displayName": "HEAVY-AI Sink Connector", "versions": [{"version": "1.0", "label": "live"}]}, "kafka-connect-oracle-cdc": {"displayName": "Oracle CDC Source Connector", "versions": [{"version": "1.0", "label": "live"}, {"version": "1.1", "label": "live"}, {"version": "1.2", "label": "live"}, {"version": "1.3", "label": "live"}, {"version": "1.4", "label": "live"}, {"version": "1.5", "label": "live"}, {"version": "2.0", "label": "live"}, {"version": "2.1", "label": "live"}, {"version": "2.10", "label": "live"}, {"version": "2.11", "label": "live"}, {"version": "2.12", "label": "live"}, {"version": "2.13", "label": "live"}, {"version": "2.14", "label": "live"}, {"version": "2.15", "label": "live"}, {"version": "2.2", "label": "live"}, {"version": "2.3", "label": "live"}, {"version": "2.4", "label": "live"}, {"version": "2.5", "label": "live"}, {"version": "2.6", "label": "live"}, {"version": "2.7", "label": "live"}, {"version": "2.8", "label": "live"}, {"version": "2.9", "label": "live"}]}, "kafka-connect-oracle-xstream-cdc-source": {"displayName": "Oracle XStream CDC Source Connector", "versions": [{"version": "1.0", "label": "live"}, {"version": "1.1", "label": "live"}, {"version": "1.2", "label": "live"}, {"version": "1.3", "label": "live"}, {"version": "1.4", "label": "live"}, {"version": "1.5", "label": "live"}, {"version": "1.6", "label": "live"}]}, "kafka-connect-pagerduty-sink": {"displayName": "PagerDuty Sink Connector", "versions": [{"version": "1.0", "label": "live"}]}, "kafka-connect-prometheus-metrics": {"displayName": "Prometheus Metrics Sink Connector", "versions": [{"version": "1.1", "label": "live"}, {"version": "1.2", "label": "live"}, {"version": "1.3", "label": "live"}, {"version": "2.0", "label": "live"}]}, "kafka-connect-rabbitmq-sink": {"displayName": "RabbitMQ Sink Connector", "versions": [{"version": "1.3", "label": "live"}, {"version": "1.4", "label": "live"}, {"version": "1.5", "label": "live"}, {"version": "1.6", "label": "live"}, {"version": "1.7", "label": "live"}, {"version": "1.8", "label": "live"}]}, "kafka-connect-rabbitmq-source": {"displayName": "RabbitMQ Source Connector", "versions": [{"version": "1.3", "label": "live"}, {"version": "1.4", "label": "live"}, {"version": "1.5", "label": "live"}, {"version": "1.6", "label": "live"}, {"version": "1.7", "label": "live"}, {"version": "1.8", "label": "live"}]}, "kafka-connect-redis": {"displayName": "Redis Sink Connector", "versions": [{"version": "1.0", "label": "live"}]}, "kafka-connect-s3-sink": {"displayName": "Amazon S3 Sink Connector", "versions": [{"version": "10.0", "label": "live"}, {"version": "10.1", "label": "live"}, {"version": "10.2", "label": "live"}, {"version": "10.3", "label": "live"}, {"version": "10.4", "label": "live"}, {"version": "10.5", "label": "live"}, {"version": "10.6", "label": "live"}, {"version": "11.0", "label": "live"}, {"version": "12.0", "label": "live"}, {"version": "12.1", "label": "live"}]}, "kafka-connect-s3-source": {"displayName": "Amazon S3 Source Connector", "versions": [{"version": "1.1", "label": "live"}, {"version": "1.2", "label": "live"}, {"version": "1.3", "label": "live"}, {"version": "1.4", "label": "live"}, {"version": "2.0", "label": "live"}, {"version": "2.1", "label": "live"}, {"version": "2.2", "label": "live"}, {"version": "2.3", "label": "live"}, {"version": "2.4", "label": "live"}, {"version": "2.5", "label": "live"}, {"version": "2.6", "label": "live"}, {"version": "3.0", "label": "live"}, {"version": "3.1", "label": "live"}]}, "kafka-connect-salesforce": {"displayName": "Salesforce Connector (Source and Sink)", "versions": [{"version": "1.10", "label": "live"}, {"version": "1.11", "label": "live"}, {"version": "1.7", "label": "live"}, {"version": "1.8", "label": "live"}, {"version": "1.9", "label": "live"}, {"version": "2.0", "label": "live"}, {"version": "3.0", "label": "live"}, {"version": "3.1", "label": "live"}]}, "kafka-connect-servicenow": {"displayName": "ServiceNow Connector (Source and Sink)", "versions": [{"version": "2.0", "label": "live"}, {"version": "2.1", "label": "live"}, {"version": "2.2", "label": "live"}, {"version": "2.3", "label": "live"}, {"version": "2.4", "label": "live"}, {"version": "2.5", "label": "live"}, {"version": "2.6", "label": "live"}]}, "kafka-connect-sftp": {"displayName": "SFTP Connector (Source and Sink)", "versions": [{"version": "2.1", "label": "live"}, {"version": "2.2", "label": "live"}, {"version": "2.3", "label": "live"}, {"version": "3.0", "label": "live"}, {"version": "3.1", "label": "live"}, {"version": "3.2", "label": "live"}]}, "kafka-connect-snmp": {"displayName": "SNMP Trap Source Connector", "versions": [{"version": "1.0", "label": "live"}, {"version": "1.1", "label": "live"}, {"version": "1.2", "label": "live"}, {"version": "1.3", "label": "live"}]}, "kafka-connect-solace-sink": {"displayName": "Solace Sink Connector", "versions": [{"version": "1.0", "label": "live"}, {"version": "1.1", "label": "live"}, {"version": "1.2", "label": "live"}, {"version": "1.3", "label": "live"}, {"version": "1.4", "label": "live"}, {"version": "2.0", "label": "live"}, {"version": "2.1", "label": "live"}, {"version": "2.2", "label": "live"}]}, "kafka-connect-solace-source": {"displayName": "Solace Source Connector", "versions": [{"version": "1.0", "label": "live"}, {"version": "1.1", "label": "live"}, {"version": "1.2", "label": "live"}]}, "kafka-connect-splunk-s2s": {"displayName": "Splunk S2S Source Connector", "versions": [{"version": "1.0", "label": "live"}, {"version": "1.1", "label": "live"}, {"version": "1.2", "label": "live"}, {"version": "1.3", "label": "live"}, {"version": "1.4", "label": "live"}, {"version": "2.0", "label": "live"}, {"version": "2.1", "label": "live"}, {"version": "2.2", "label": "live"}, {"version": "2.3", "label": "live"}]}, "kafka-connect-splunk-sink": {"displayName": "Splunk Sink Connector", "versions": [{"version": "2.0", "label": "live"}, {"version": "2.1", "label": "live"}, {"version": "2.2", "label": "live"}]}, "kafka-connect-splunk-source": {"displayName": "Splunk Source Connector", "versions": [{"version": "1.0", "label": "live"}, {"version": "1.1", "label": "live"}, {"version": "2.0", "label": "live"}]}, "kafka-connect-spooldir": {"displayName": "Spool Dir Connectors", "versions": [{"version": "2.0", "label": "live"}]}, "kafka-connect-sqs": {"displayName": "Amazon SQS Source Connector", "versions": [{"version": "1.0", "label": "live"}, {"version": "1.1", "label": "live"}, {"version": "1.2", "label": "live"}, {"version": "2.0", "label": "live"}, {"version": "2.1", "label": "live"}]}, "kafka-connect-syslog": {"displayName": "Syslog Source Connector", "versions": [{"version": "1.3", "label": "live"}, {"version": "1.4", "label": "live"}, {"version": "1.5", "label": "live"}]}, "kafka-connect-teradata": {"displayName": "Teradata Connector (Source and Sink)", "versions": [{"version": "1.0", "label": "live"}, {"version": "1.1", "label": "live"}, {"version": "1.2", "label": "live"}, {"version": "2.0", "label": "live"}]}, "kafka-connect-tibco-sink": {"displayName": "TIBCO Sink Connector", "versions": [{"version": "1.0", "label": "live"}, {"version": "1.1", "label": "live"}, {"version": "1.2", "label": "live"}, {"version": "1.3", "label": "live"}, {"version": "1.4", "label": "live"}, {"version": "2.0", "label": "live"}, {"version": "2.1", "label": "live"}, {"version": "2.2", "label": "live"}]}, "kafka-connect-tibco-source": {"displayName": "TIBCO Source Connector", "versions": [{"version": "1.0", "label": "live"}, {"version": "1.1", "label": "live"}, {"version": "1.2", "label": "live"}]}, "kafka-connect-transforms": {"displayName": "Kafka Connect Single Message Transform", "versions": [{"version": "1.6", "label": "live"}]}, "kafka-connect-vertica": {"displayName": "Vertica Sink Connector", "versions": [{"version": "1.2", "label": "live"}, {"version": "1.3", "label": "live"}]}, "kafka-connect-weblogic-source": {"displayName": "Weblogic JMS Source Connector", "versions": [{"version": "10.2", "label": "live"}, {"version": "11.0", "label": "live"}, {"version": "12.0", "label": "live"}, {"version": "12.1", "label": "live"}, {"version": "12.2", "label": "live"}, {"version": "13.0", "label": "live"}, {"version": "13.1", "label": "live"}, {"version": "5.5", "label": "live"}]}, "kafka-connect-zendesk": {"displayName": "Zendesk Source Connector", "versions": [{"version": "1.0", "label": "live"}, {"version": "1.1", "label": "live"}, {"version": "1.2", "label": "live"}, {"version": "1.3", "label": "live"}]}, "operator": {"displayName": "Confluent for Kubernetes for Confluent Platform", "versions": [{"version": "2.10", "label": "live"}, {"version": "2.11", "label": "live"}, {"version": "2.9", "label": "live"}, {"version": "3.0", "label": "live"}, {"version": "3.1", "label": "live"}, {"version": "3.2", "label": "live"}, {"version": "3.3", "label": "live"}]}, "platform": {"displayName": "Confluent Platform", "versions": [{"version": "1.0", "label": "legacy"}, {"version": "2.0", "label": "legacy"}, {"version": "3.0", "label": "legacy"}, {"version": "3.1", "label": "legacy"}, {"version": "3.2", "label": "legacy"}, {"version": "3.3", "label": "legacy"}, {"version": "4.0", "label": "legacy"}, {"version": "4.1", "label": "legacy"}, {"version": "5.0", "label": "legacy"}, {"version": "5.1", "label": "legacy"}, {"version": "5.2", "label": "legacy"}, {"version": "5.3", "label": "legacy"}, {"version": "5.4", "label": "legacy"}, {"version": "5.5", "label": "legacy"}, {"version": "6.0", "label": "legacy"}, {"version": "7.0", "label": "legacy"}, {"version": "7.1", "label": "legacy"}, {"version": "7.2", "label": "legacy"}, {"version": "7.3", "label": "legacy"}, {"version": "7.4", "label": "live"}, {"version": "7.5", "label": "live"}, {"version": "7.6", "label": "live"}, {"version": "7.7", "label": "live"}, {"version": "7.8", "label": "live"}, {"version": "7.9", "label": "live"}, {"version": "8.0", "label": "live"}, {"version": "8.1", "label": "live"}, {"version": "8.2", "label": "live"}, {"version": "8.3", "label": "live"}]}, "private-cloud-gateway": {"displayName": "Confluent Private Cloud Gateway", "versions": [{"version": "1.0", "label": "live"}, {"version": "1.1", "label": "live"}, {"version": "1.2", "label": "live"}, {"version": "1.3", "label": "live"}]}};

    const productInput = document.getElementById('product-input');
    const productList = document.getElementById('product-list');
    const versionInput = document.getElementById('version-input');
    const versionList = document.getElementById('version-list');
    const downloadBtn = document.getElementById('downloadBtn');
    const downloadForm = document.getElementById('downloadForm');

    function compareVersions(a, b) {
        const partsA = a.split('.').map(n => parseInt(n) || 0);
        const partsB = b.split('.').map(n => parseInt(n) || 0);
        const maxLength = Math.max(partsA.length, partsB.length);
        for (let i = 0; i < maxLength; i++) {
            const numA = partsA[i] || 0;
            const numB = partsB[i] || 0;
            if (numA !== numB) return numA - numB;
        }
        return 0;
    }

    // Builds one option <li>. mousedown.preventDefault() keeps focus on
    // the text input (instead of the browser trying, and failing, to
    // focus this non-focusable <li> and blurring the input instead) so
    // :focus-within stays true and the list is still visible when the
    // click event that follows actually fires.
    function createItem(list, label, value, onSelect) {
        const item = document.createElement('li');
        item.className = 'cf-searchable-dropdown_\_item';
        item.textContent = label;
        item.dataset.value = value;
        item.dataset.label = label;
        item.addEventListener('mousedown', (e) => e.preventDefault());
        item.addEventListener('click', () => onSelect(item));
        list.appendChild(item);
        return item;
    }

    function createGroupLabel(list, text) {
        const groupLabel = document.createElement('li');
        groupLabel.className = 'cf-searchable-dropdown_\_group-label';
        groupLabel.textContent = text;
        list.appendChild(groupLabel);
        return groupLabel;
    }

    // Marks whichever item's value matches, so reopening the list shows
    // what's already chosen (matches .cf-version-dropdown_\_item--selected).
    function markSelected(list, value) {
        Array.from(list.children).forEach((child) => {
            if (!child.classList.contains('cf-searchable-dropdown_\_item')) return;
            child.classList.toggle('cf-searchable-dropdown_\_item--selected', child.dataset.value === value);
        });
    }

    function clearSelected(list) {
        markSelected(list, undefined);
    }

    // Case-insensitive substring filter. A group label hides itself
    // once every item under it is filtered out.
    function filterList(input, list) {
        const query = input.value.trim().toLowerCase();
        let groupLabel = null;
        let groupHasVisibleItem = false;

        Array.from(list.children).forEach((child) => {
            if (child.classList.contains('cf-searchable-dropdown_\_group-label')) {
                if (groupLabel) groupLabel.hidden = !groupHasVisibleItem;
                groupLabel = child;
                groupHasVisibleItem = false;
                return;
            }
            const matches = child.dataset.label.toLowerCase().includes(query);
            child.hidden = !matches;
            if (matches) groupHasVisibleItem = true;
        });

        if (groupLabel) groupLabel.hidden = !groupHasVisibleItem;
    }

    function resetVersionDropdown() {
        versionInput.value = '';
        delete versionInput.dataset.value;
        versionInput.disabled = true;
        versionList.innerHTML = '';
        downloadBtn.disabled = true;
    }

    function populateVersions(componentKey) {
        resetVersionDropdown();

        const component = componentsData[componentKey];
        if (!component) return;

        versionInput.disabled = false;

        const liveVersions = component.versions
            .filter(item => item.label === 'live')
            .sort((a, b) => compareVersions(b.version, a.version));
        const legacyVersions = component.versions
            .filter(item => item.label === 'legacy')
            .sort((a, b) => compareVersions(b.version, a.version));

        function selectVersion(el) {
            versionInput.value = el.dataset.label;
            versionInput.dataset.value = el.dataset.value;
            downloadBtn.disabled = false;
            markSelected(versionList, el.dataset.value);
            // Selection is done -- deliberately blur so :focus-within
            // goes false and the list closes (distinct from the
            // mousedown.preventDefault() above, which only guards
            // against an \*accidental\* blur while the click is landing).
            versionInput.blur();
        }

        if (liveVersions.length > 0) {
            createGroupLabel(versionList, 'Supported');
            liveVersions.forEach(item => {
                createItem(versionList, item.version, item.version, selectVersion);
            });
        }

        if (legacyVersions.length > 0) {
            createGroupLabel(versionList, 'Not supported');
            legacyVersions.forEach(item => {
                createItem(versionList, item.version, item.version, selectVersion);
            });
        }
    }

    // ── Product dropdown ──────────────────────────────────────────────
    Object.keys(componentsData).sort().forEach(componentKey => {
        const component = componentsData[componentKey];
        createItem(productList, component.displayName, componentKey, (item) => {
            productInput.value = item.dataset.label;
            productInput.dataset.value = item.dataset.value;
            populateVersions(item.dataset.value);
            markSelected(productList, item.dataset.value);
            // Deliberate blur to close the list now that a selection has
            // been made -- see the note on versionInput.blur() below.
            productInput.blur();
        });
    });

    productInput.addEventListener('input', () => {
        delete productInput.dataset.value;
        resetVersionDropdown();
        clearSelected(productList);
        filterList(productInput, productList);
    });

    versionInput.addEventListener('input', () => {
        delete versionInput.dataset.value;
        downloadBtn.disabled = true;
        clearSelected(versionList);
        filterList(versionInput, versionList);
    });

    downloadForm.addEventListener('submit', function(e) {
        e.preventDefault();
        const product = productInput.dataset.value;
        const version = versionInput.dataset.value;

        if (product && version) {
            const downloadUrl = \`https://docs.confluent.io/archive/${product}/${product}-${version}.tar.gz\`;
            downloadBtn.textContent = 'Preparing download...';
            downloadBtn.disabled = true;
            window.location.href = downloadUrl;

            setTimeout(() => {
                downloadBtn.textContent = 'Download Documentation';
                downloadBtn.disabled = false;
            }, 2000);
        }
    });
</script>
