# Connectors

<style>
/\* ── Hide RST-generated title ───────────────────────────────────── \*/
.home-landing-page .document > .section > h1:first-child,
.home-landing-page .document > section > h1:first-child {
  display: none;
}

/\* ── Layout resets ──────────────────────────────────────────────── \*/
.home-landing-page .wy-nav-content {
  width: 100%;
  max-width: 100%;
  margin: 0;
  padding: 0;
}

.cn-inner {
  max-width: 1568px;
  margin: 0 auto;
  padding: 0 var(--cf-space-32);
}

/\* ── Hero ───────────────────────────────────────────────────────── \*/
.cn-hero {
  position: relative;
}

.cn-hero-inner {
  position: relative;
  z-index: 1;
  max-width: 1568px;
  margin: 0 auto;
  display: flex;
  align-items: center;
  min-height: 380px;
  padding: 0 var(--cf-space-32);
}

.cn-hero-wrapper {
  padding: var(--cf-space-64) 0 var(--cf-space-80);
  flex: 1;
  max-width: 696px;
}

.cn-hero-title {
  font-family: var(--cf-font-family-heading);
  font-size: 52px !important;
  font-weight: 700;
  color: var(--cf-text-primary);
  line-height: 1.2;
  margin: 0 0 var(--cf-space-16);
  white-space: nowrap;
}

.cn-hero-desc {
  font-size: 1rem;
  color: var(--cf-text-primary);
  line-height: 1.6;
  margin: 0;
  max-width: 520px;
}

/\* Hero illustration — decorative background image, bleeds off the
   right edge of .cn-hero behind the max-width .cn-hero-inner content. \*/
.cn-hero-illustration {
  position: absolute;
  top: 50%;
  right: 0;
  transform: translateY(-50%);
  z-index: 0;
}

.cn-hero-illustration img {
  width: 721px;
  height: auto;
}

/\* Light mode (default): show the light illustration, hide the dark one. \*/
.hp-hero-illustration--dark {
  display: none;
}

[data-theme='dark'] .hp-hero-illustration--light {
  display: none;
}
[data-theme='dark'] .hp-hero-illustration--dark {
  display: block;
}

/\* ── Tabs ───────────────────────────────────────────────────────── \*/
.cn-tabs-section {
  border-bottom: 1px solid var(--cf-border-subtle);
}

.cn-tabs {
  display: flex;
  gap: 0;
}

.cn-tab {
  padding: var(--cf-space-08) 12px;
  font-size: 14px;
  font-weight: 400;
  color: var(--cf-text-secondary);
  background: none;
  border: none;
  border-bottom: 2px solid var(--cf-border-subtle);
  cursor: pointer;
  font-family: var(--cf-font-family);
  white-space: nowrap;
  transition: color 0.2s;
  margin-bottom: -1px;
}

.cn-tab:hover {
  color: var(--cf-text-primary);
}

.cn-tab--active {
  color: var(--cf-interactive-input);
  font-weight: 600;
  border-bottom-color: var(--cf-interactive-input);
}

/\* ── Search bar ─────────────────────────────────────────────────── \*/
.cn-search-section {
  padding: var(--cf-space-48) 0;
}

.cn-search-wrap {
  position: relative;
  max-width: 320px;
  display: flex;
  align-items: center;
  gap: var(--cf-space-08);
  padding: var(--cf-space-08) var(--cf-space-16);
  border-bottom: 1px solid var(--color-neutral-50);
  border-radius: var(--cf-radius-sm);
  background: var(--color-neutral-10);
  color: var(--color-neutral-60);
  transition: border-color 0.15s;
}

[data-theme='dark'] .cn-search-wrap {
  background: var(--color-neutral-80);
  color: var(--color-neutral-40);
}

.cn-search-wrap:focus-within {
  border-color: var(--color-purple-40);
}

.cn-search-icon {
  flex-shrink: 0;
  width: 14px;
  height: 14px;
}

/\* Light mode (default): show the dark-glyph icon, hide the light-glyph one. \*/
.cn-search-icon[data-theme-icon='dark'] {
  display: none;
}

/\* Dark mode: show the light-glyph icon, hide the dark-glyph one. \*/
[data-theme='dark'] .cn-search-icon[data-theme-icon='light'] {
  display: none;
}

[data-theme='dark'] .cn-search-icon[data-theme-icon='dark'] {
  display: block;
}

.cn-search-input {
  flex: 1;
  border: none;
  outline: none;
  background: transparent;
  font-size: 14px;
  color: inherit;
  font-family: var(--cf-font-family);
  min-width: 0;
}

.cn-search-input::placeholder {
  color: inherit;
}

/\* ── Section heading ────────────────────────────────────────────── \*/
.cn-section {
}

.cn-section-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: var(--cf-space-32);
}

.cn-section-title {
  font-family: var(--cf-font-family-heading);
  font-size: 36px;
  font-weight: 600;
  color: var(--cf-text-primary);
  margin: 0;
}

.cn-view-all {
  display: inline-flex;
  align-items: center;
  gap: var(--cf-space-04);
  font-size: 14px;
  color: var(--cf-link-primary);
  text-decoration: none;
  font-weight: 500;
}

.cn-view-all:hover {
  color: var(--cf-link-primary-hover);
}

/\* ── Connector grid ─────────────────────────────────────────────── \*/
.cn-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: var(--cf-space-16);
}

.cn-card {
  background: var(--color-neutral-10);
  border: 1px solid var(--color-neutral-20);
  border-radius: var(--cf-radius-md);
  padding: var(--cf-space-24);
  display: flex;
  flex-direction: column;
  gap: var(--cf-space-16);
  text-decoration: none;
  cursor: pointer;
  transition: border-color 0.15s, box-shadow 0.15s, opacity 0.2s, transform 0.2s;
  animation: cn-card-in 0.2s ease both;
}

[data-theme='dark'] .cn-card {
  background: var(--color-neutral-80);
  border-color: var(--color-neutral-70);
}

@keyframes cn-card-in {
  from { opacity: 0; transform: translateY(6px); }
  to   { opacity: 1; transform: translateY(0); }
}

.cn-card:hover {
  border-color: var(--color-purple-40);
  box-shadow: var(--cf-elevation-02);
}

.cn-card-header {
  display: flex;
  align-items: center;
  gap: var(--cf-space-16);
}

.cn-card-icon {
  width: 40px;
  height: 40px;
  border-radius: 8px;
  flex-shrink: 0;
  overflow: hidden;
  display: flex;
  align-items: center;
  justify-content: center;
}

.cn-card-icon img {
  width: 40px;
  height: 40px;
  object-fit: contain;
}

.cn-card-name {
  font-size: 15px;
  font-weight: 600;
  color: var(--cf-text-primary);
  line-height: 1.3;
  flex: 1;
}

.cn-card-desc {
  font-size: 13px;
  color: var(--cf-text-secondary);
  line-height: 1.5;
  flex: 1;
}

.cn-card-footer {
  display: flex;
  align-items: center;
  gap: var(--cf-space-04);
  font-size: 12px;
  color: var(--cf-text-helper);
}

.cn-card-footer svg {
  flex-shrink: 0;
  color: var(--cf-link-primary);
}

.cn-no-results {
  grid-column: 1 / -1;
  padding: var(--cf-space-64) 0;
  text-align: center;
  color: var(--cf-text-helper);
  font-size: 14px;
}

/\* ── Features section ───────────────────────────────────────────── \*/
.cn-features {
  padding: var(--cf-space-64) 0;
}

.cn-features-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: var(--cf-space-16);
  margin-top: var(--cf-space-32);
}

.cn-feature-card {
  background: var(--color-neutral-10);
  border: 1px solid var(--color-neutral-20);
  border-radius: var(--cf-radius-md);
  padding: var(--cf-space-24);
  text-decoration: none;
  display: block;
  transition: border-color 0.15s, box-shadow 0.15s;
}

[data-theme='dark'] .cn-feature-card {
  background: var(--color-neutral-80);
  border-color: var(--color-neutral-70);
}

.cn-feature-card:hover {
  border-color: var(--cf-border-interactive);
  box-shadow: var(--cf-elevation-01);
}

.cn-feature-title {
  font-size: 15px;
  font-weight: 600;
  color: var(--cf-text-primary);
  margin: 0 0 var(--cf-space-08);
}

.cn-feature-desc {
  font-size: 13px;
  color: var(--cf-text-secondary);
  line-height: 1.5;
  margin: 0;
}

/\* Show only the feature cards for the active tab; cards with no
   data-tab (e.g. "Connector deployment") are always shown. \*/
.cn-features[data-active-tab='fully-managed'] .cn-feature-card[data-tab='self-managed'] { display: none; }
.cn-features[data-active-tab='self-managed'] .cn-feature-card[data-tab='fully-managed'] { display: none; }

/\* ── Empty / hidden state ───────────────────────────────────────── \*/
.cn-hidden { display: none !important; }

/\* ── Responsive ─────────────────────────────────────────────────── \*/

/\* 1092px–1375px \*/
@media (min-width: 1092px) and (max-width: 1375px) {
  .cn-inner,
  .cn-hero-inner {
    padding: 0 var(--cf-space-32);
  }

  .cn-hero-illustration img { width: 300px; }
}

/\* 832px–1091px (tablet) \*/
@media (min-width: 832px) and (max-width: 1091px) {
  .cn-grid { grid-template-columns: repeat(2, 1fr); }
  .cn-features-grid { grid-template-columns: repeat(2, 1fr); }
  .cn-hero-inner {
    max-width: 100%;
    padding: 0 var(--cf-space-32);
  }
  .cn-hero-illustration { display: none; }
  .cn-inner {
    padding: 0 var(--cf-space-32);
  }
}

/\* up to 831px (mobile) \*/
@media (max-width: 831px) {
  .cn-hero-inner {
    grid-template-columns: 1fr;
    max-width: 100%;
    padding: 0 var(--cf-space-16);
  }
  .cn-hero-illustration { display: none; }
  .cn-grid { grid-template-columns: 1fr; }
  .cn-features-grid { grid-template-columns: 1fr; }
  .cn-inner {
    padding: 0 var(--cf-space-16);
  }
}
</style>

<!-- ── HERO ──────────────────────────────────────────────────────────── -->
<div class="cn-hero">
  <div class="cn-hero-inner">
    <div class="cn-hero-wrapper">
      <h1 class="cn-hero-title">Connectors</h1>
      <p class="cn-hero-desc">Use connectors to move data in and out of Apache Kafka®.</p>
    </div>
  </div>

  <!-- Illustration -->
  <div class="cn-hero-illustration" aria-hidden="true">
    <img class="hp-hero-illustration--light" src="../_static/images/connectors_light.svg" alt="">
    <img class="hp-hero-illustration--dark"  src="../_static/images/connectors_dark.svg"  alt="">
  </div>
</div>

<!-- ── MAIN CONTENT ──────────────────────────────────────────────────── -->
<div class="cn-inner">

  <!-- Tabs -->
  <div class="cn-tabs-section">
    <div class="cn-tabs">
      <button class="cn-tab cn-tab--active" data-tab="fully-managed">Fully managed</button>
      <button class="cn-tab" data-tab="self-managed">Self-managed</button>
    </div>
  </div>

  <!-- Search -->
  <div class="cn-search-section">
    <div class="cn-search-wrap">
      <img src="/_static/images/search_glass_light.svg" alt="" class="cn-search-icon" data-theme-icon="light" aria-hidden="true" />
      <img src="/_static/images/search_glass_dark.svg" alt="" class="cn-search-icon" data-theme-icon="dark" aria-hidden="true" />
      <input
        type="text"
        class="cn-search-input"
        id="cn-search-input"
        placeholder="Search for a connector"
        autocomplete="off"
        spellcheck="false"
      />
    </div>
  </div>

  <!-- Connector grid -->
  <div class="cn-section">
    <div class="cn-section-head">
      <h2 class="cn-section-title" id="cn-section-title">Recommended connectors</h2>
      <a href="https://hub.confluent.io" class="cn-view-all" target="_blank" rel="noopener">
        <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
          <path d="M18 13v6a2 2 0 01-2 2H5a2 2 0 01-2-2V8a2 2 0 012-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/>
        </svg>
        View on Confluent Hub
      </a>
    </div>
    <div class="cn-grid" id="cn-grid"></div>
  </div>

  <!-- Features -->
  <div class="cn-features" id="cn-features" data-active-tab="fully-managed">
    <h2 class="cn-section-title">Features</h2>
    <div class="cn-features-grid">
      <a class="cn-feature-card" data-tab="fully-managed" href="/cloud/current/connectors/overview.html">
        <div class="cn-feature-title">Connector deployment</div>
        <p class="cn-feature-desc">Deploy and run connectors to automate real-time data integration across your ecosystem.</p>
      </a>
      <a class="cn-feature-card" data-tab="self-managed" href="/platform/current/connect/index.html">
        <div class="cn-feature-title">Connector deployment</div>
        <p class="cn-feature-desc">Deploy and run connectors to automate real-time data integration across your ecosystem.</p>
      </a>
      <a class="cn-feature-card" data-tab="fully-managed" href="/cloud/current/connectors/single-message-transforms.html">
        <div class="cn-feature-title">Single Message Transforms</div>
        <p class="cn-feature-desc">Modify records as they pass through a connector, without needing a separate stream processing step.</p>
      </a>
      <a class="cn-feature-card" data-tab="fully-managed" href="/cloud/current/security/encrypt/csfle/overview.html">
        <div class="cn-feature-title">Client-Side Field Level Encryption</div>
        <p class="cn-feature-desc">Encrypt sensitive fields before they reach Kafka, so connectors can read and write data securely.</p>
      </a>
      <a class="cn-feature-card" data-tab="fully-managed" href="/cloud/current/connectors/secret-manager-integration/overview.html">
        <div class="cn-feature-title">Secret Manager integration</div>
        <p class="cn-feature-desc">Reference secrets stored in AWS, Azure, or Google Cloud secret managers directly in your connector configuration.</p>
      </a>
      <a class="cn-feature-card" data-tab="self-managed" href="/kafka-connectors/transforms/current/overview.html">
        <div class="cn-feature-title">Single Message Transforms</div>
        <p class="cn-feature-desc">Modify records as they pass through a connector, without needing a separate stream processing step.</p>
      </a>
      <a class="cn-feature-card" data-tab="self-managed" href="/platform/current/security/protect-data/csfle/overview.html">
        <div class="cn-feature-title">Client-Side Field Level Encryption</div>
        <p class="cn-feature-desc">Encrypt sensitive fields before they reach Kafka, so connectors can read and write data securely.</p>
      </a>
      <a class="cn-feature-card" data-tab="self-managed" href="/platform/current/security/compliance/secrets/overview.html">
        <div class="cn-feature-title">Secrets management</div>
        <p class="cn-feature-desc">Keep credentials out of your connector configuration files using externalized secrets.</p>
      </a>
      <a class="cn-feature-card" data-tab="fully-managed" href="/cloud/current/connectors/bring-your-connector/index.html">
        <div class="cn-feature-title">Custom connectors</div>
        <p class="cn-feature-desc">Package and run your own connector plugins on Confluent Cloud when a pre-built connector isn't available.</p>
      </a>
      <a class="cn-feature-card" data-tab="self-managed" href="/platform/current/connect/devguide.html">
        <div class="cn-feature-title">Custom connectors</div>
        <p class="cn-feature-desc">Build and deploy your own connector plugins using the Kafka Connect API.</p>
      </a>
      <a class="cn-feature-card" data-tab="fully-managed" href="/cloud/current/connectors/connector-statuses.html">
        <div class="cn-feature-title">Connector monitoring</div>
        <p class="cn-feature-desc">Track connector and task status to catch failures and degraded performance early.</p>
      </a>
      <a class="cn-feature-card" data-tab="self-managed" href="/platform/current/connect/monitoring.html">
        <div class="cn-feature-title">Connector monitoring</div>
        <p class="cn-feature-desc">Monitor connector and worker health using JMX metrics and the Connect REST API.</p>
      </a>
      <a class="cn-feature-card" data-tab="fully-managed" href="/cloud/current/connectors/managed-connector-rbac.html">
        <div class="cn-feature-title">Role-based access control</div>
        <p class="cn-feature-desc">Control who can view, manage, and edit connectors using granular RBAC roles.</p>
      </a>
      <a class="cn-feature-card" data-tab="self-managed" href="/platform/current/connect/security.html">
        <div class="cn-feature-title">Connect security</div>
        <p class="cn-feature-desc">Secure your Connect cluster with authentication, authorization, and RBAC.</p>
      </a>
      <a class="cn-feature-card" data-tab="fully-managed" href="/cloud/current/connectors/offsets.html">
        <div class="cn-feature-title">Offset management</div>
        <p class="cn-feature-desc">View and update connector offsets to control where a connector resumes reading or writing.</p>
      </a>
      <a class="cn-feature-card" data-tab="self-managed" href="/platform/current/connect/references/restapi.html">
        <div class="cn-feature-title">Offset management</div>
        <p class="cn-feature-desc">View and update connector offsets using the Kafka Connect REST API.</p>
      </a>
    </div>
  </div>

</div>

<!-- ── DATA ──────────────────────────────────────────────────────────── -->
<script type="application/json" id="cn-data-fully-managed">
  [
      {
          "name": "ActiveMQ Source",
          "description": "Ingest data from ActiveMQ into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/activemq-source.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-activemq-source.html",
          "type": "source"
      },
      {
          "name": "AlloyDB Sink",
          "description": "Stream data from Apache Kafka topics into AlloyDB.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-alloydb-sink.html",
          "type": "sink"
      },
      {
          "name": "Amazon CloudWatch Logs Source",
          "description": "Ingest data from Amazon CloudWatch Logs into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-amazon-cloudwatch-logs-source.html",
          "type": "source"
      },
      {
          "name": "Amazon CloudWatch Metrics Sink",
          "description": "Stream data from Apache Kafka topics into Amazon CloudWatch Metrics.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-amazon-cloudwatch-metrics-sink.html",
          "type": "sink"
      },
      {
          "name": "Amazon DynamoDB Sink",
          "description": "Stream data from Apache Kafka topics into Amazon DynamoDB.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-amazon-dynamo-db-sink.html",
          "type": "sink"
      },
      {
          "name": "Amazon DynamoDB CDC Source",
          "description": "Ingest data from Amazon DynamoDB into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-amazon-dynamodb-cdc-source.html",
          "type": "source"
      },
      {
          "name": "Amazon Redshift Sink",
          "description": "Stream data from Apache Kafka topics into Amazon Redshift.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-amazon-redshift-sink.html",
          "type": "sink"
      },
      {
          "name": "Amazon SQS Source",
          "description": "Ingest data from Amazon SQS into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-amazon-sqs-source.html",
          "type": "source"
      },
      {
          "name": "AWS Lambda Sink",
          "description": "Stream data from Apache Kafka topics into AWS Lambda.",
          "icon": "/_static/images/connectors/aws-lambda-sink.jpg",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-aws-lambda-sink.html",
          "type": "sink"
      },
      {
          "name": "Azure Blob Storage Sink",
          "description": "Stream data from Apache Kafka topics into Azure Blob Storage.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-azure-blob-sink.html",
          "type": "sink"
      },
      {
          "name": "Azure Blob Storage Source",
          "description": "Ingest data from Azure Blob Storage into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-azure-blob-source.html",
          "type": "source"
      },
      {
          "name": "Azure Cognitive Search Sink",
          "description": "Stream data from Apache Kafka topics into Azure Cognitive Search.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-azure-cognitive-search-sink.html",
          "type": "sink"
      },
      {
          "name": "Azure Cosmos DB Sink",
          "description": "Stream data from Apache Kafka topics into Azure Cosmos DB.",
          "icon": "/_static/images/connectors/azure-cosmos-sink.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-azure-cosmos-sink.html",
          "type": "sink"
      },
      {
          "name": "Azure Cosmos DB Sink V2",
          "description": "Stream data from Apache Kafka topics into Azure Cosmos DB.",
          "icon": "/_static/images/connectors/azure-cosmos-sink-v2.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-azure-cosmos-sink-v2.html",
          "type": "sink"
      },
      {
          "name": "Azure Cosmos DB Source",
          "description": "Ingest data from Azure Cosmos DB into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/azure-cosmos-source.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-azure-cosmos-source.html",
          "type": "source"
      },
      {
          "name": "Azure Cosmos DB Source V2",
          "description": "Ingest data from Azure Cosmos DB into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/azure-cosmos-source-v2.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-azure-cosmos-source-v2.html",
          "type": "source"
      },
      {
          "name": "Azure Data Lake Storage Gen2 Sink",
          "description": "Stream data from Apache Kafka topics into Azure Data Lake Storage Gen2.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-azure-datalakeGen2-storage-sink.html",
          "type": "sink"
      },
      {
          "name": "Azure Event Hubs Source",
          "description": "Ingest data from Azure Event Hubs into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-azure-event-hubs-source.html",
          "type": "source"
      },
      {
          "name": "Azure Functions Sink",
          "description": "Stream data from Apache Kafka topics into Azure Functions.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-azure-functions-sink.html",
          "type": "sink"
      },
      {
          "name": "Azure Log Analytics Sink",
          "description": "Stream data from Apache Kafka topics into Azure Log Analytics.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-azure-log-analytics-sink.html",
          "type": "sink"
      },
      {
          "name": "Azure Service Bus Source",
          "description": "Ingest data from Azure Service Bus into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-azure-service-bus-source.html",
          "type": "source"
      },
      {
          "name": "Azure Synapse Analytics Sink",
          "description": "Stream data from Apache Kafka topics into Azure Synapse Analytics.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-azure-synapse-analytics-sink.html",
          "type": "sink"
      },
      {
          "name": "Couchbase Sink",
          "description": "Stream data from Apache Kafka topics into Couchbase.",
          "icon": "/_static/images/connectors/couchbase-db-sink.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-couchbase-db-sink/cc-couchbase-db-sink.html",
          "type": "sink"
      },
      {
          "name": "Couchbase Source",
          "description": "Ingest data from Couchbase into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/couchbase-db-source.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-couchbase-db-source/cc-couchbase-db-source.html",
          "type": "source"
      },
      {
          "name": "Databricks Delta Lake Sink",
          "description": "Stream data from Apache Kafka topics into Databricks Delta Lake.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-databricks-delta-lake-sink/databricks-aws-setup.html",
          "type": "sink"
      },
      {
          "name": "Datadog Metrics Sink",
          "description": "Stream data from Apache Kafka topics into Datadog Metrics.",
          "icon": "/_static/images/connectors/datadog-metrics-sink.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-datadog-metrics-sink.html",
          "type": "sink"
      },
      {
          "name": "Datagen Source",
          "description": "Ingest data from Datagen into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-datagen-source.html",
          "type": "source"
      },
      {
          "name": "Elasticsearch Service Sink",
          "description": "Stream data from Apache Kafka topics into Elasticsearch Service.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-elasticsearch-service-sink.html",
          "type": "sink"
      },
      {
          "name": "Elasticsearch Sink V2",
          "description": "Stream data from Apache Kafka topics into Elasticsearch.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-elasticsearch-sink-v2/cc-elasticsearch-sink-v2.html",
          "type": "sink"
      },
      {
          "name": "Google Cloud BigQuery Sink Connector (Legacy)",
          "description": "Stream data from Apache Kafka topics into Google Cloud BigQuery.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-gcp-bigquery-sink.html",
          "type": "sink"
      },
      {
          "name": "Google Cloud BigQuery Sink V2",
          "description": "Stream data from Apache Kafka topics into Google Cloud BigQuery.",
          "icon": "https://cc-connectors-images.s3.us-west-2.amazonaws.com/BigQuery.png",
          "author": "Confluent",
          "verified": true,
          "popular": true,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-gcp-bigquery-storage-sink.html",
          "type": "sink"
      },
      {
          "name": "Google Cloud BigTable Sink",
          "description": "Stream data from Apache Kafka topics into Google Cloud BigTable.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-gcp-bigtable-sink.html",
          "type": "sink"
      },
      {
          "name": "Google Cloud Dataproc Sink",
          "description": "Stream data from Apache Kafka topics into Google Cloud Dataproc.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-gcp-dataproc-sink.html",
          "type": "sink"
      },
      {
          "name": "Google Cloud Spanner Sink",
          "description": "Stream data from Apache Kafka topics into Google Cloud Spanner.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-gcp-spanner-sink.html",
          "type": "sink"
      },
      {
          "name": "Google Cloud Storage Sink",
          "description": "Stream data from Apache Kafka topics into Google Cloud Storage.",
          "icon": "/_static/images/connectors/gcs-sink.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-gcs-sink.html",
          "type": "sink"
      },
      {
          "name": "Google Cloud Storage Source",
          "description": "Ingest data from Google Cloud Storage into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/gcs-source.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-gcs-source.html",
          "type": "source"
      },
      {
          "name": "GitHub Source",
          "description": "Ingest data from GitHub into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-github-source.html",
          "type": "source"
      },
      {
          "name": "Google Cloud Functions Gen 2 Sink",
          "description": "Stream data from Apache Kafka topics into Google Cloud Functions Gen 2.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-google-cloud-functions-gen2-sink.html",
          "type": "sink"
      },
      {
          "name": "Google Cloud Functions Sink (Legacy)",
          "description": "Stream data from Apache Kafka topics into Google Cloud Functions.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-google-functions-sink.html",
          "type": "sink"
      },
      {
          "name": "Google Cloud Pub/Sub Source",
          "description": "Ingest data from Google Cloud Pub/Sub into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-google-pubsub-source.html",
          "type": "source"
      },
      {
          "name": "HTTP Sink",
          "description": "Stream data from Apache Kafka topics into HTTP.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-http-sink.html",
          "type": "sink"
      },
      {
          "name": "HTTP Sink V2",
          "description": "Stream data from Apache Kafka topics into HTTP.",
          "icon": "https://cc-connectors-images.s3.us-west-2.amazonaws.com/Http.png",
          "author": "Confluent",
          "verified": true,
          "popular": true,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-http-sink-v2.html",
          "type": "sink"
      },
      {
          "name": "HTTP Source",
          "description": "Ingest data from HTTP into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-http-source.html",
          "type": "source"
      },
      {
          "name": "HTTP Source V2",
          "description": "Ingest data from HTTP into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-http-source-v2.html",
          "type": "source"
      },
      {
          "name": "IBM MQ Sink",
          "description": "Stream data from Apache Kafka topics into IBM MQ.",
          "icon": "/_static/images/connectors/ibm-mq-sink.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-ibm-mq-sink.html",
          "type": "sink"
      },
      {
          "name": "IBM MQ Source",
          "description": "Ingest data from IBM MQ into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/ibmmq-source.jpg",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-ibmmq-source.html",
          "type": "source"
      },
      {
          "name": "InfluxDB 3 Sink",
          "description": "Stream data from Apache Kafka topics into InfluxDB 3.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-influx-db3-sink.html",
          "type": "sink"
      },
      {
          "name": "InfluxDB 2 Sink",
          "description": "Stream data from Apache Kafka topics into InfluxDB 2.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-influxdb2-sink.html",
          "type": "sink"
      },
      {
          "name": "InfluxDB 2 Source",
          "description": "Ingest data from InfluxDB 2 into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-influxdb2-source.html",
          "type": "source"
      },
      {
          "name": "Jira Source",
          "description": "Ingest data from Jira into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-jira-source.html",
          "type": "source"
      },
      {
          "name": "Amazon Kinesis Source",
          "description": "Ingest data from Amazon Kinesis into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-kinesis-source.html",
          "type": "source"
      },
      {
          "name": "MariaDB CDC Source (Debezium)",
          "description": "Ingest data from MariaDB into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-mariadb-cdc-source-debezium.html",
          "type": "source"
      },
      {
          "name": "Microsoft SQL Server Sink",
          "description": "Stream data from Apache Kafka topics into Microsoft SQL Server.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-microsoft-sql-server-sink.html",
          "type": "sink"
      },
      {
          "name": "Microsoft SQL Server Source",
          "description": "Ingest data from Microsoft SQL Server into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-microsoft-sql-server-source.html",
          "type": "source"
      },
      {
          "name": "Microsoft SQL Server Change Data Capture (CDC) Source (Debezium) [Legacy]",
          "description": "Ingest data from Microsoft SQL Server into Apache Kafka topics on Confluent Cloud using the legacy Debezium CDC connector.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-microsoft-sql-server-source-cdc-debezium.html",
          "type": "source"
      },
      {
          "name": "Microsoft SQL Server CDC Source V2 (Debezium)",
          "description": "Ingest data from Microsoft SQL Server CDC Source V2 (Debezium) into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-microsoft-sql-server-source-cdc-v2-debezium/cc-microsoft-sql-server-source-cdc-v2-debezium.html",
          "type": "source"
      },
      {
          "name": "MongoDB Atlas Sink",
          "description": "Stream data from Apache Kafka topics into MongoDB Atlas.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-mongo-db-sink.html",
          "type": "sink"
      },
      {
          "name": "MongoDB Atlas Source",
          "description": "Ingest data from MongoDB Atlas into Apache Kafka topics on Confluent Cloud.",
          "icon": "https://images.ctfassets.net/4ovbwwf5xv2r/5lhL7RYNF0hu82be2IrfbE/42664db1d462e9d978f28dd29972cade/Leaf_2x.png",
          "author": "Confluent",
          "verified": true,
          "popular": true,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-mongo-db-source.html",
          "type": "source"
      },
      {
          "name": "MQTT Sink",
          "description": "Stream data from Apache Kafka topics into MQTT.",
          "icon": "/_static/images/connectors/mqtt-sink.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-mqtt-sink.html",
          "type": "sink"
      },
      {
          "name": "MQTT Source",
          "description": "Ingest data from MQTT into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/mqtt-source.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-mqtt-source.html",
          "type": "source"
      },
      {
          "name": "MySQL Sink",
          "description": "Stream data from Apache Kafka topics into MySQL.",
          "icon": "/_static/images/connectors/mysql-sink.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-mysql-sink.html",
          "type": "sink"
      },
      {
          "name": "MySQL Source",
          "description": "Ingest data from MySQL into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/mysql-source.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-mysql-source.html",
          "type": "source"
      },
      {
          "name": "MySQL Change Data Capture (CDC) Source (Debezium) [Legacy]",
          "description": "Ingest data from MySQL Change Data Capture (CDC) Source (Debezium) [Legacy] into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/mysql-source-cdc-debezium.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-mysql-source-cdc-debezium.html",
          "type": "source"
      },
      {
          "name": "MySQL CDC Source V2 (Debezium)",
          "description": "Ingest data from MySQL CDC Source V2 (Debezium) into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/mysql-source-cdc-v2-debezium.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-mysql-source-cdc-v2-debezium/cc-mysql-source-cdc-v2-debezium.html",
          "type": "source"
      },
      {
          "name": "Neo4j Sink",
          "description": "Stream data from Apache Kafka topics into Neo4j.",
          "icon": "/_static/images/connectors/neo4j-sink.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-neo4j-sink/index.html",
          "type": "sink"
      },
      {
          "name": "New Relic Metrics Sink",
          "description": "Stream data from Apache Kafka topics into New Relic Metrics.",
          "icon": "/_static/images/connectors/new-relic-metrics-sink.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-new-relic-metrics-sink.html",
          "type": "sink"
      },
      {
          "name": "OpenSearch Sink",
          "description": "Stream data from Apache Kafka topics into OpenSearch.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-opensearch-sink.html",
          "type": "sink"
      },
      {
          "name": "Oracle CDC Source",
          "description": "Ingest data from Oracle into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/oracle-cdc-source.jpg",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-oracle-cdc-source/cc-oracle-cdc-source-features.html",
          "type": "source"
      },
      {
          "name": "Oracle Database (JDBC) Sink",
          "description": "Stream data from Apache Kafka topics into Oracle Database (JDBC).",
          "icon": "/_static/images/connectors/oracle-db-sink.jpg",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-oracle-db-sink.html",
          "type": "sink"
      },
      {
          "name": "Oracle Database (JDBC) Source",
          "description": "Ingest data from Oracle Database (JDBC) into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/oracle-db-source.jpg",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-oracle-db-source.html",
          "type": "source"
      },
      {
          "name": "Oracle XStream CDC Source",
          "description": "Ingest data from Oracle XStream into Apache Kafka topics on Confluent Cloud.",
          "icon": "https://cc-connectors-images.s3-us-west-2.amazonaws.com/oracle-logo.png",
          "author": "Confluent",
          "verified": true,
          "popular": true,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-oracle-xstream-cdc-source/cc-oracle-xstream-cdc-source-features.html",
          "type": "source"
      },
      {
          "name": "PagerDuty Sink",
          "description": "Stream data from Apache Kafka topics into PagerDuty.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-pagerduty-sink.html",
          "type": "sink"
      },
      {
          "name": "(Preview) Pinecone Sink",
          "description": "Stream data from Apache Kafka topics into Pinecone.",
          "icon": "/_static/images/connectors/pinecone-sink.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-pinecone-sink.html",
          "type": "sink"
      },
      {
          "name": "PostgreSQL Change Data Capture (CDC) Source (Debezium) [Legacy]",
          "description": "Ingest data from PostgreSQL Change Data Capture (CDC) Source (Debezium) [Legacy] into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/postgresql-cdc-source-debezium.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-postgresql-cdc-source-debezium.html",
          "type": "source"
      },
      {
          "name": "PostgreSQL CDC Source V2 (Debezium)",
          "description": "Ingest data from PostgreSQL CDC Source V2 (Debezium) into Apache Kafka topics on Confluent Cloud.",
          "icon": "../_static/images/connectors/postgresql-cdc-source-v2-debezium.png",
          "author": "Confluent",
          "verified": true,
          "popular": true,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-postgresql-cdc-source-v2-debezium/cc-postgresql-cdc-source-v2-debezium.html",
          "type": "source"
      },
      {
          "name": "PostgreSQL (JDBC) Sink",
          "description": "Stream data from Apache Kafka topics into PostgreSQL (JDBC).",
          "icon": "/_static/images/connectors/postgresql-sink.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-postgresql-sink.html",
          "type": "sink"
      },
      {
          "name": "PostgreSQL Source",
          "description": "Ingest data from PostgreSQL into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/postgresql-source.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-postgresql-source.html",
          "type": "source"
      },
      {
          "name": "RabbitMQ Sink",
          "description": "Stream data from Apache Kafka topics into RabbitMQ.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-rabbitmq-sink.html",
          "type": "sink"
      },
      {
          "name": "RabbitMQ Source",
          "description": "Ingest data from RabbitMQ into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-rabbitmq-source.html",
          "type": "source"
      },
      {
          "name": "Redis Kafka Sink",
          "description": "Stream data from Apache Kafka topics into Redis Kafka.",
          "icon": "/_static/images/connectors/redis-kafka-db-sink.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-redis-kafka-db-sink.html",
          "type": "sink"
      },
      {
          "name": "Redis Kafka Source",
          "description": "Ingest data from Redis Kafka into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/redis-kafka-source.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-redis-kafka-source.html",
          "type": "source"
      },
      {
          "name": "Redis Sink",
          "description": "Stream data from Apache Kafka topics into Redis.",
          "icon": "/_static/images/connectors/redis-sink.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-redis-sink.html",
          "type": "sink"
      },
      {
          "name": "Amazon S3 Sink",
          "description": "Stream data from Apache Kafka topics into Amazon S3.",
          "icon": "https://cc-connectors-images.s3-us-west-2.amazonaws.com/Amazon-Simple-Storage-Service-S3_light-bg%404x.png",
          "author": "Confluent",
          "verified": true,
          "popular": true,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-s3-sink/cc-s3-sink.html",
          "type": "sink"
      },
      {
          "name": "Amazon S3 Source",
          "description": "Ingest data from Amazon S3 into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-s3-source.html",
          "type": "source"
      },
      {
          "name": "Salesforce Bulk API Source",
          "description": "Ingest data from Salesforce Bulk API into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-salesforce-bulk-api-source.html",
          "type": "source"
      },
      {
          "name": "Salesforce Bulk API 2.0 Sink",
          "description": "Stream data from Apache Kafka topics into Salesforce Bulk API 2.0.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-salesforce-bulk-api-v2-sink.html",
          "type": "sink"
      },
      {
          "name": "Salesforce Bulk API 2.0 Source",
          "description": "Ingest data from Salesforce Bulk API 2.0 into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-salesforce-bulk-api-v2-source.html",
          "type": "source"
      },
      {
          "name": "Salesforce Platform Event Sink",
          "description": "Stream data from Apache Kafka topics into Salesforce Platform Event.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-salesforce-platform-event-sink.html",
          "type": "sink"
      },
      {
          "name": "Salesforce Platform Event Source",
          "description": "Ingest data from Salesforce Platform Event into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-salesforce-platform-event-source.html",
          "type": "source"
      },
      {
          "name": "Salesforce PushTopic Source",
          "description": "Ingest data from Salesforce PushTopic into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-salesforce-pushtopic-source.html",
          "type": "source"
      },
      {
          "name": "Salesforce SObject Sink",
          "description": "Stream data from Apache Kafka topics into Salesforce SObject.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-salesforce-SObjects-sink.html",
          "type": "sink"
      },
      {
          "name": "Salesforce Change Data Capture (CDC) Source",
          "description": "Ingest data from Salesforce Change Data Capture (CDC) into Apache Kafka topics on Confluent Cloud.",
          "icon": "https://cc-connectors-images.s3-us-west-2.amazonaws.com/Salesforce_Logo.png",
          "author": "Confluent",
          "verified": true,
          "popular": true,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-salesforce-source-cdc.html",
          "type": "source"
      },
      {
          "name": "ServiceNow Sink",
          "description": "Stream data from Apache Kafka topics into ServiceNow.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-servicenow-sink.html",
          "type": "sink"
      },
      {
          "name": "ServiceNow Source",
          "description": "Ingest data from ServiceNow into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-servicenow-source.html",
          "type": "source"
      },
      {
          "name": "ServiceNow Source V2",
          "description": "Ingest data from ServiceNow into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-servicenow-source-v2.html",
          "type": "source"
      },
      {
          "name": "SFTP Sink",
          "description": "Stream data from Apache Kafka topics into SFTP.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-sftp-sink.html",
          "type": "sink"
      },
      {
          "name": "SFTP Source",
          "description": "Ingest data from SFTP into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-sftp-source.html",
          "type": "source"
      },
      {
          "name": "Snowflake Sink",
          "description": "Stream data from Apache Kafka topics into Snowflake.",
          "icon": "../_static/images/connectors/snowflake-sink.png",
          "author": "Confluent",
          "verified": true,
          "popular": true,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-snowflake-sink.html",
          "type": "sink"
      },
      {
          "name": "Snowflake Source",
          "description": "Ingest data from Snowflake into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/snowflake-source.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-snowflake-source/cc-snowflake-source.html",
          "type": "source"
      },
      {
          "name": "Solace Sink",
          "description": "Stream data from Apache Kafka topics into Solace.",
          "icon": "/_static/images/connectors/solace-sink.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-solace-sink.html",
          "type": "sink"
      },
      {
          "name": "Splunk Sink",
          "description": "Stream data from Apache Kafka topics into Splunk.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-splunk-sink.html",
          "type": "sink"
      },
      {
          "name": "Zendesk Source",
          "description": "Ingest data from Zendesk into Apache Kafka topics on Confluent Cloud.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/cloud/current/connectors/cc-zendesk-source.html",
          "type": "source"
      }
  ]
</script>

<script type="application/json" id="cn-data-self-managed">
  [
      {
          "name": "ActiveMQ Sink",
          "description": "Move messages from Apache Kafka to an ActiveMQ cluster.",
          "icon": "/_static/images/connectors/activemq-sink.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/activemq-sink/current/overview.html",
          "type": "sink"
      },
      {
          "name": "ActiveMQ Source",
          "description": "Read messages from an ActiveMQ cluster and write them to an Apache Kafka topic.",
          "icon": "/_static/images/connectors/activemq-source.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/activemq-source/current/overview.html",
          "type": "source"
      },
      {
          "name": "Amazon CloudWatch Logs Source",
          "description": "Import data from Amazon CloudWatch Logs and write it into an Apache Kafka topic.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/aws-cloudwatch-logs/current/overview.html",
          "type": "source"
      },
      {
          "name": "Amazon CloudWatch Metrics Sink [Deprecated]",
          "description": "Export data to Amazon CloudWatch Metrics from an Apache Kafka topic.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/aws-cloudwatch-metrics/current/overview.html",
          "type": "sink"
      },
      {
          "name": "Amazon Kinesis Source",
          "description": "Pull data from Amazon Kinesis and persist the data to an Apache Kafka topic.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/kinesis/current/overview.html",
          "type": "source"
      },
      {
          "name": "Amazon S3 Sink",
          "description": "Export data from Apache Kafka topics to S3 objects in Avro®, JSON, or Bytes formats.",
          "icon": "https://cc-connectors-images.s3-us-west-2.amazonaws.com/Amazon-Simple-Storage-Service-S3_light-bg%404x.png",
          "author": "Confluent",
          "verified": true,
          "popular": true,
          "url": "https://docs.confluent.io/kafka-connectors/s3-sink/current/overview.html",
          "type": "sink"
      },
      {
          "name": "Amazon S3 Source",
          "description": "Read data exported to S3 by the Amazon S3 Sink connector and publish it back to an Apache Kafka topic.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/s3-source/current/",
          "type": "source"
      },
      {
          "name": "Amazon SQS Source",
          "description": "Move messages from AWS SQS queues into Apache Kafka. Supports both Standard and FIFO queues.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/sqs/current/overview.html",
          "type": "source"
      },
      {
          "name": "AMPS Source [Deprecated]",
          "description": "Export data from AMPS to Apache Kafka by subscribing to messages from an AMPS topic.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/amps/current/overview.html",
          "type": "source"
      },
      {
          "name": "Apache HBase Sink",
          "description": "Move data from Apache Kafka to Apache HBase, writing from a topic to a table in the specified HBase instance.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/hbase/current/overview.html",
          "type": "sink"
      },
      {
          "name": "AppDynamics Metrics Sink",
          "description": "Export metrics from Apache Kafka topics to AppDynamics using the AppDynamics Machine Agent.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/appdynamics-metrics/current/overview.html",
          "type": "sink"
      },
      {
          "name": "Amazon DynamoDB Sink",
          "description": "Export messages from Apache Kafka to AWS DynamoDB key-value and document database.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/aws-dynamodb/current/overview.html",
          "type": "sink"
      },
      {
          "name": "AWS Lambda Sink",
          "description": "Pull records from Apache Kafka topics, convert them to JSON, and execute an AWS Lambda function.",
          "icon": "/_static/images/connectors/aws-lambda-sink.jpg",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/aws-lambda/current/overview.html",
          "type": "sink"
      },
      {
          "name": "Amazon Redshift Sink",
          "description": "Export data from Apache Kafka topics to an Amazon Redshift database.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/aws-redshift/current/overview.html",
          "type": "sink"
      },
      {
          "name": "Azure Blob Storage Sink",
          "description": "Export data from Apache Kafka topics to Azure Blob Storage objects in Avro, JSON, Bytes, or Parquet formats.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/azure-blob-storage-sink/current/overview.html",
          "type": "sink"
      },
      {
          "name": "Azure Cognitive Search Sink",
          "description": "Move data from Apache Kafka to Azure Cognitive Search, writing each event to an index.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/azure-search/current/overview.html",
          "type": "sink"
      },
      {
          "name": "Azure Blob Storage Source",
          "description": "Read data exported to Azure Blob Storage by the sink connector and publish it back to an Apache Kafka topic.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/azure-blob-storage-source/current/",
          "type": "source"
      },
      {
          "name": "Azure Data Lake Storage Gen1 Sink [Deprecated]",
          "description": "Export data from Apache Kafka topics to Azure Data Lake Storage Gen1 files in Avro or JSON formats.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/azure-data-lake-gen1-sink/current/overview.html",
          "type": "sink"
      },
      {
          "name": "Azure Data Lake Storage Gen2 Sink",
          "description": "Export data from Apache Kafka topics to Azure Data Lake Storage Gen2 files in Avro, JSON, Parquet, or ByteArray formats.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/azure-data-lake-gen2-sink/current/overview.html",
          "type": "sink"
      },
      {
          "name": "Azure Event Hubs Source",
          "description": "Poll data from Azure Event Hubs and persist the data to an Apache Kafka topic.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/azure-event-hubs/current/overview.html",
          "type": "source"
      },
      {
          "name": "Azure Functions Sink",
          "description": "Integrate Apache Kafka with Azure Functions.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/azure-functions/current/overview.html",
          "type": "sink"
      },
      {
          "name": "Azure Service Bus Source",
          "description": "Send information between applications and services using this multi-tenant cloud messaging service.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/azure-servicebus/current/overview.html",
          "type": "source"
      },
      {
          "name": "Azure Synapse Analytics Sink",
          "description": "Export data from Apache Kafka topics to Azure Synapse Analytics.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/azure-sql-dw/current/overview.html",
          "type": "sink"
      },
      {
          "name": "Cassandra Sink",
          "description": "Write data to Apache Cassandra.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/cassandra/current/overview.html",
          "type": "sink"
      },
      {
          "name": "Databricks Delta Lake Sink",
          "description": "Poll data from Apache Kafka, copy it into an S3 staging bucket, and commit the records to Databricks Delta Lake.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/databricks-delta-lake-sink/current/overview.html",
          "type": "sink"
      },
      {
          "name": "Data Diode (Source and Sink)",
          "description": "Replicate one or more Apache Kafka topics from a source cluster to a destination cluster over UDP.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/data-diode/current/source/overview.html",
          "type": "source"
      },
      {
          "name": "Datadog Metrics Sink",
          "description": "Export data from Apache Kafka topics to Datadog using the Timeseries API's Post endpoint.",
          "icon": "/_static/images/connectors/datadog-metrics-sink.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/datadog-metrics/current/overview.html",
          "type": "sink"
      },
      {
          "name": "Datagen Source",
          "description": "Generate mock source data for development and testing. Not suitable for production use.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/datagen/current/",
          "type": "source"
      },
      {
          "name": "Elasticsearch Service Sink",
          "description": "Move data from Apache Kafka to Elasticsearch, writing from a topic to an index.",
          "icon": "https://cc-connectors-images.s3-us-west-2.amazonaws.com/ElasticsearchLogo.jpg",
          "author": "Confluent",
          "verified": true,
          "popular": true,
          "url": "https://docs.confluent.io/kafka-connectors/elasticsearch/current/overview.html",
          "type": "sink"
      },
      {
          "name": "FileStream Connectors",
          "description": "Demonstrate how a simple connector runs, for those getting started with Kafka Connect. Not recommended for production use.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/platform/current/connect/filestream_connector.html",
          "type": "source"
      },
      {
          "name": "FTPS Source",
          "description": "Watch a directory on an FTPS server for files and read the data as new files are written.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/ftps/current/source/overview.html",
          "type": "source"
      },
      {
          "name": "FTPS Sink",
          "description": "Export data from Apache Kafka topics to files in an FTPS server's directory.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/ftps/current/sink/overview.html",
          "type": "sink"
      },
      {
          "name": "GitHub Source",
          "description": "Write metadata from GitHub to Apache Kafka topics, detecting changes in real time or consuming history.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/github/current/overview.html",
          "type": "source"
      },
      {
          "name": "Google BigQuery Sink",
          "description": "Stream data into BigQuery tables, automatically creating tables when streaming from Apache Kafka topics.",
          "icon": "https://hub-downloads.confluent.io/api/plugins/wepay/kafka-connect-bigquery/versions/2.5.11/assets/BigQuery.png",
          "author": "Confluent",
          "verified": true,
          "popular": true,
          "url": "https://docs.confluent.io/kafka-connectors/bigquery/current/overview.html",
          "type": "sink"
      },
      {
          "name": "Google Cloud BigTable Sink",
          "description": "Move data from Apache Kafka to Google Cloud BigTable, writing from a topic to a table.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/gcp-bigtable/current/overview.html",
          "type": "sink"
      },
      {
          "name": "Google Cloud Dataproc Sink",
          "description": "Integrate Apache Kafka with managed HDFS instances in Google Cloud Dataproc.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/gcp-dataproc/current/overview.html",
          "type": "sink"
      },
      {
          "name": "Google Cloud Functions Sink",
          "description": "Integrate Apache Kafka with Google Cloud Functions, consuming records from topics and executing a function.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/gcp-functions/current/overview.html",
          "type": "sink"
      },
      {
          "name": "Google Cloud Pub/Sub Source",
          "description": "Read messages from a Pub/Sub topic and write them to an Apache Kafka topic.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/gcp-pubsub/current/overview.html",
          "type": "source"
      },
      {
          "name": "Google Cloud Spanner Sink",
          "description": "Move data from Apache Kafka to a Google Cloud Spanner database, writing from a topic to a table.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/gcp-spanner/current/overview.html",
          "type": "sink"
      },
      {
          "name": "Google Cloud Storage Sink",
          "description": "Export data from Apache Kafka topics to GCS storage objects in various formats.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/gcs-sink/current/overview.html",
          "type": "sink"
      },
      {
          "name": "Google Cloud Storage Source",
          "description": "Import data to Apache Kafka from GCS storage objects in various formats.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/gcs-source/current/",
          "type": "source"
      },
      {
          "name": "Google Firebase Source",
          "description": "Read data from a Google Firebase Realtime Database and persist the data in Apache Kafka topics.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/firebase/current/source/overview.html",
          "type": "source"
      },
      {
          "name": "Google Firebase Sink",
          "description": "Read data from multiple Apache Kafka topics and write it to a Google Firebase Realtime Database.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/firebase/current/sink/overview.html",
          "type": "sink"
      },
      {
          "name": "HDFS 2 Sink",
          "description": "Export data from Apache Kafka topics to HDFS 2.x files in various formats, with Hive integration for HiveQL queries.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/hdfs/current/overview.html",
          "type": "sink"
      },
      {
          "name": "HDFS 2 Source",
          "description": "Read data exported to HDFS 2 by the HDFS 2 Sink connector and publish it back to an Apache Kafka topic.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/hdfs2-source/current/overview.html",
          "type": "source"
      },
      {
          "name": "HDFS 3 Sink",
          "description": "Export data from Apache Kafka topics to HDFS 3.x files in various formats, with Hive integration for HiveQL queries.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/hdfs3-sink/current/overview.html",
          "type": "sink"
      },
      {
          "name": "HDFS 3 Source",
          "description": "Read data exported to HDFS 3 by the HDFS 3 Sink connector and publish it back to an Apache Kafka topic.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/hdfs3-source/current/overview.html",
          "type": "source"
      },
      {
          "name": "HTTP Sink",
          "description": "Integrate Apache Kafka with an API through HTTP or HTTPS.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/http/current/overview.html",
          "type": "sink"
      },
      {
          "name": "HTTP Source",
          "description": "Make HTTP requests to an API, process JSON responses, and produce those responses to Apache Kafka.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/http-source/current/overview.html",
          "type": "source"
      },
      {
          "name": "IBM MQ Sink",
          "description": "Move messages from Apache Kafka to an IBM MQ cluster.",
          "icon": "/_static/images/connectors/ibm-mq-sink.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/ibmmq-sink/current/overview.html",
          "type": "sink"
      },
      {
          "name": "IBM MQ Source",
          "description": "Read messages from an IBM MQ cluster and write them to an Apache Kafka topic.",
          "icon": "../_static/images/connectors/ibm-mq-source.jpg",
          "author": "Confluent",
          "verified": true,
          "popular": true,
          "url": "https://docs.confluent.io/kafka-connectors/ibmmq-source/current/overview.html",
          "type": "source"
      },
      {
          "name": "InfluxDB Source [Deprecated]",
          "description": "Import data from an InfluxDB host into an Apache Kafka topic.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/influxdb/current/influx-db-source-connector/overview.html",
          "type": "source"
      },
      {
          "name": "InfluxDB Sink",
          "description": "Write data from an Apache Kafka topic to an InfluxDB host.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/influxdb/current/influx-db-sink-connector/overview.html",
          "type": "sink"
      },
      {
          "name": "JDBC Source and Sink",
          "description": "Transfer data between relational databases and Apache Kafka.",
          "icon": "https://hub-downloads.confluent.io/api/plugins/confluentinc/kafka-connect-jdbc/versions/10.9.7/assets/jdbc.jpg",
          "author": "Confluent",
          "verified": true,
          "popular": true,
          "url": "https://docs.confluent.io/kafka-connectors/jdbc/current/overview.html",
          "type": "source"
      },
      {
          "name": "Jira Source",
          "description": "Move data from Jira to an Apache Kafka topic.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/jira/current/overview.html",
          "type": "source"
      },
      {
          "name": "JMS Sink",
          "description": "Move messages from Apache Kafka to any JMS-compliant broker.",
          "icon": "/_static/images/connectors/jms-sink.jpeg",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/jms-sink/current/overview.html",
          "type": "sink"
      },
      {
          "name": "JMS Source",
          "description": "Move messages from any JMS-compliant broker into Apache Kafka.",
          "icon": "/_static/images/connectors/jms-source.jpeg",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/jms-source/current/overview.html",
          "type": "source"
      },
      {
          "name": "Kudu Source [Deprecated]",
          "description": "Import data to an Apache Kafka topic from a Kudu columnar relational database using the Impala JDBC driver.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/kudu/current/source-connector/overview.html",
          "type": "source"
      },
      {
          "name": "Kudu Sink [Deprecated]",
          "description": "Export data from an Apache Kafka topic to a Kudu columnar relational database using the Impala JDBC driver.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/kudu/current/sink-connector/overview.html",
          "type": "sink"
      },
      {
          "name": "MapR DB Sink",
          "description": "Export data from an Apache Kafka topic and write it to a MapR DB cluster.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/maprdb/current/overview.html",
          "type": "sink"
      },
      {
          "name": "Marketo Source [Deprecated]",
          "description": "Copy data into Apache Kafka from various Marketo entities and activity entities using the Marketo REST API.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/marketo/current/overview.html",
          "type": "source"
      },
      {
          "name": "Microsoft SQL Server Source (Deprecated)",
          "description": "Monitor source databases for changes and write the changes in real time to Apache Kafka.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/cdc-mssql/current/overview.html",
          "type": "source"
      },
      {
          "name": "MongoDB Source (Debezium)",
          "description": "Monitor a MongoDB replica set or sharded cluster for document changes, recording them as events in Apache Kafka topics.",
          "icon": "/_static/images/connectors/mongodb-source-debezium.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/debezium-mongodb-source/current/overview.html",
          "type": "source"
      },
      {
          "name": "MQTT Source",
          "description": "Connect to an MQTT broker and subscribe to specified topics, integrating with existing MQTT servers.",
          "icon": "/_static/images/connectors/mqtt-source.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/mqtt/current/mqtt-source-connector/overview.html",
          "type": "source"
      },
      {
          "name": "MQTT Sink",
          "description": "Connect to an MQTT broker and publish data to an MQTT topic, integrating with existing MQTT servers.",
          "icon": "/_static/images/connectors/mqtt-sink.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/mqtt/current/mqtt-sink-connector/overview.html",
          "type": "sink"
      },
      {
          "name": "MySQL Source (Debezium)",
          "description": "Obtain a snapshot of existing data and record all row-level changes on a MySQL server or cluster.",
          "icon": "/_static/images/connectors/mysql-source-debezium.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/debezium-connect-mysql-source/current/overview.html",
          "type": "source"
      },
      {
          "name": "Netezza Sink",
          "description": "Export data from Apache Kafka topics to Netezza based on a topic subscription.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/netezza/current/overview.html",
          "type": "sink"
      },
      {
          "name": "HEAVY-AI (formerly OmniSci) Sink",
          "description": "Export data from an Apache Kafka topic to HEAVY-AI based on a topic subscription.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/heavy-ai/current/overview.html",
          "type": "sink"
      },
      {
          "name": "Oracle CDC Source",
          "description": "Capture each change to rows in a database as change event records in Apache Kafka topics using Oracle LogMiner.",
          "icon": "../_static/images/connectors/oracle-cdc-source.jpg",
          "author": "Confluent",
          "verified": true,
          "popular": true,
          "url": "https://docs.confluent.io/kafka-connectors/oracle-cdc/current/overview.html",
          "type": "source"
      },
      {
          "name": "Oracle XStream CDC Source",
          "description": "Capture all changes to rows in an Oracle database as change event records in Apache Kafka topics using the XStream API.",
          "icon": "https://cc-connectors-images.s3-us-west-2.amazonaws.com/oracle-logo.png",
          "author": "Confluent",
          "verified": true,
          "popular": true,
          "url": "https://docs.confluent.io/kafka-connectors/oracle-xstream-cdc-source/current/overview.html",
          "type": "source"
      },
      {
          "name": "PagerDuty Sink",
          "description": "Read records from an Apache Kafka topic and create PagerDuty incidents.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/pagerduty-sink/current/overview.html",
          "type": "sink"
      },
      {
          "name": "PostgreSQL Source (Debezium)",
          "description": "Obtain a snapshot of existing data in a PostgreSQL database, then monitor and record subsequent row-level changes.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/debezium-connect-postgres-source/current/overview.html",
          "type": "source"
      },
      {
          "name": "Prometheus Metrics Sink",
          "description": "Export data from multiple Apache Kafka topics to an endpoint scraped by a Prometheus server.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/prometheus-metrics/current/overview.html",
          "type": "sink"
      },
      {
          "name": "RabbitMQ Source",
          "description": "Read data from a RabbitMQ queue or topic and persist it in an Apache Kafka topic using the AMQP protocol.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/rabbitmq-source/current/overview.html",
          "type": "source"
      },
      {
          "name": "RabbitMQ Sink",
          "description": "Read data from one or more Apache Kafka topics and send it to a RabbitMQ exchange using the AMQP protocol.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/rabbitmq-sink/current/overview.html",
          "type": "sink"
      },
      {
          "name": "Redis Sink [Deprecated]",
          "description": "Export data from Apache Kafka topics to Redis.",
          "icon": "/_static/images/connectors/redis-sink-deprecated.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/redis/current/overview.html",
          "type": "sink"
      },
      {
          "name": "Replicator",
          "description": "Replicate topics from one Apache Kafka cluster to another.",
          "icon": "/_static/images/connectors/replicator.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/platform/current/multi-dc-deployments/replicator/",
          "type": "source"
      },
      {
          "name": "Salesforce (Source and Sink)",
          "description": "Integrate Salesforce with Apache Kafka using source and sink connectors.",
          "icon": "https://cc-connectors-images.s3-us-west-2.amazonaws.com/Salesforce_Logo.png",
          "author": "Confluent",
          "verified": true,
          "popular": true,
          "url": "https://docs.confluent.io/kafka-connectors/salesforce/current/overview.html",
          "type": "source"
      },
      {
          "name": "ServiceNow Source",
          "description": "Move creations and updates in a ServiceNow table to Apache Kafka in real time.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/servicenow/current/source-connector/overview.html",
          "type": "source"
      },
      {
          "name": "ServiceNow Sink",
          "description": "Export Apache Kafka records to a ServiceNow table.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/servicenow/current/sink-connector/overview.html",
          "type": "sink"
      },
      {
          "name": "SFTP Source",
          "description": "Watch an SFTP directory for files and read the data as new files are written to the input directory.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/sftp/current/source-connector/overview.html",
          "type": "source"
      },
      {
          "name": "SFTP Sink",
          "description": "Poll data from Apache Kafka and write it to SFTP files.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/sftp/current/sink-connector/overview.html",
          "type": "sink"
      },
      {
          "name": "SNMP Trap Source",
          "description": "Receive data (SNMP traps) from devices through SNMP and convert the trap messages into Apache Kafka records.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/snmp/current/overview.html",
          "type": "source"
      },
      {
          "name": "Solace Source",
          "description": "Move messages from a Solace PubSub+ cluster to Apache Kafka.",
          "icon": "/_static/images/connectors/solace-source.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/solace/source/current/overview.html",
          "type": "source"
      },
      {
          "name": "Solace Sink",
          "description": "Move messages from Apache Kafka to a Solace PubSub+ cluster.",
          "icon": "/_static/images/connectors/solace-sink.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/solace/sink/current/overview.html",
          "type": "sink"
      },
      {
          "name": "Splunk Sink",
          "description": "Move messages from Apache Kafka to Splunk.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/splunk-sink/current/overview.html",
          "type": "sink"
      },
      {
          "name": "Splunk Source",
          "description": "Integrate Splunk with Apache Kafka, receiving data from applications that send to a Splunk HTTP Event Collector.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/splunk-source/current/overview.html",
          "type": "source"
      },
      {
          "name": "Splunk S2S Source",
          "description": "Integrate Splunk with Apache Kafka, receiving data from the Splunk universal forwarder (UF).",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/splunk-s2s/current/overview.html",
          "type": "source"
      },
      {
          "name": "Spool Dir",
          "description": "Monitor a directory for new files and read the data as new files are written to the input directory.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/spooldir/current/overview.html",
          "type": "source"
      },
      {
          "name": "SQL Server Source (Debezium)",
          "description": "Obtain a snapshot of existing data in a SQL Server database, then monitor and record subsequent row-level changes.",
          "icon": "/_static/images/connectors/sql-server-source-debezium.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/debezium-connect-sqlserver-source/current/overview.html",
          "type": "source"
      },
      {
          "name": "Syslog Source",
          "description": "Consume data from network devices. Supported formats are RFC 3164, RFC 5424, and Common Event Format (CEF).",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/syslog/current/overview.html",
          "type": "source"
      },
      {
          "name": "Teradata Source",
          "description": "Import data from Teradata into Apache Kafka topics.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/teradata/current/source-connector/overview.html",
          "type": "source"
      },
      {
          "name": "Teradata Sink",
          "description": "Export data from Apache Kafka topics to Teradata.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/teradata/current/sink-connector/overview.html",
          "type": "sink"
      },
      {
          "name": "TIBCO Sink",
          "description": "Move messages from Apache Kafka to TIBCO Enterprise Messaging Service (EMS).",
          "icon": "/_static/images/connectors/tibco-sink.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/tibco/sink/current/overview.html",
          "type": "sink"
      },
      {
          "name": "TIBCO Source",
          "description": "Move messages from TIBCO Enterprise Messaging Service (EMS) to Apache Kafka.",
          "icon": "/_static/images/connectors/tibco-source.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/tibco/source/current/overview.html",
          "type": "source"
      },
      {
          "name": "Vertica Sink",
          "description": "Export data from Apache Kafka topics to Vertica by periodically polling records and adding them to a table.",
          "icon": "/_static/images/connectors/vertica-sink.jpg",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/vertica/current/overview.html",
          "type": "sink"
      },
      {
          "name": "VMware Tanzu GemFire Sink",
          "description": "Export data from Apache Kafka to Tanzu GemFire by periodically polling data and adding it to GemFire.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/gemfire/current/overview.html",
          "type": "sink"
      },
      {
          "name": "WebLogic JMS Source [Deprecated]",
          "description": "Read messages from an Oracle WebLogic JMS Server and write them into an Apache Kafka topic.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/weblogic-source/current/overview.html",
          "type": "source"
      },
      {
          "name": "Zendesk Source",
          "description": "Copy data into Apache Kafka from various Zendesk support tables using the Zendesk Support API.",
          "icon": "/_static/images/connectors/default.png",
          "author": "Confluent",
          "verified": true,
          "popular": false,
          "url": "https://docs.confluent.io/kafka-connectors/zendesk/current/overview.html",
          "type": "source"
      }
  ]
</script>

<!-- ── LOGIC ──────────────────────────────────────────────────────────── -->
<script>
(function () {
  var activeTab    = 'fully-managed';
  var searchQuery  = '';
  var defaultIcon  = '../_static/images/connectors/default.png';

  var grid         = document.getElementById('cn-grid');
  var sectionTitle = document.getElementById('cn-section-title');
  var searchInput  = document.getElementById('cn-search-input');
  var features     = document.getElementById('cn-features');

  function getData(tab) {
    var el = document.getElementById('cn-data-' + tab);
    try { return JSON.parse(el.textContent); } catch (e) { return []; }
  }

  function escapeHtml(str) {
    return String(str)
      .replace(/&/g, '&amp;').replace(/</g, '&lt;')
      .replace(/>/g, '&gt;').replace(/"/g, '&quot;');
  }

  function renderGrid() {
    var data     = getData(activeTab);
    var isSearch = searchQuery.length > 0;
    var q        = searchQuery.toLowerCase();

    var items = isSearch
      ? data.filter(function (c) {
          return c.name.toLowerCase().indexOf(q) !== -1 ||
                 c.description.toLowerCase().indexOf(q) !== -1;
        })
      : data.filter(function (c) { return c.popular; });

    sectionTitle.textContent = isSearch
      ? 'Results (' + items.length + ')'
      : 'Recommended connectors';

    if (items.length === 0) {
      grid.innerHTML = '<div class="cn-no-results">No connectors found for "' + escapeHtml(searchQuery) + '"</div>';
      return;
    }

    grid.innerHTML = items.map(function (c, i) {
      var icon = c.icon || defaultIcon;
      var delay = (i \* 50) + 'ms';
      return '<a class="cn-card" href="' + escapeHtml(c.url || '#') + '" style="animation-delay:' + delay + '">' +
        '<div class="cn-card-header">' +
          '<div class="cn-card-icon">' +
            '<img src="' + escapeHtml(icon) + '" alt="" onerror="this.onerror=null;this.src=\\'' + defaultIcon + '\\'">' +
          '</div>' +
          '<span class="cn-card-name">' + escapeHtml(c.name) + '</span>' +
        '</div>' +
        '<p class="cn-card-desc">' + escapeHtml(c.description) + '</p>' +
      '</a>';
    }).join('');
  }

  // Tab switching
  document.querySelectorAll('.cn-tab').forEach(function (btn) {
    btn.addEventListener('click', function () {
      document.querySelectorAll('.cn-tab').forEach(function (b) {
        b.classList.remove('cn-tab--active');
      });
      btn.classList.add('cn-tab--active');
      activeTab   = btn.dataset.tab;
      searchQuery = '';
      searchInput.value = '';
      features.dataset.activeTab = activeTab;
      renderGrid();
    });
  });

  // Search
  var searchTimeout;
  searchInput.addEventListener('input', function () {
    clearTimeout(searchTimeout);
    searchTimeout = setTimeout(function () {
      searchQuery = searchInput.value.trim();
      renderGrid();
    }, 150);
  });

  // Initial render
  renderGrid();
})();
</script>
