New! Redpanda Agentic Data Plane is here: a governed, high-performance foundation for AI agents. Learn more
Redpanda logo Connect
Cloud Self-Managed Connect Labs
or

What do you think of this page?

Let us know more:

Let us contact you about your feedback:

Please complete the “I'm not a robot” checkbox before submitting.

    • Overview
    • Get Started
      • Introduction to Redpanda Connect
      • What’s New
      • Quickstarts
        • CLI
        • Helm Chart
      • Licensing
      • Versioning
    • Install and Upgrade
      • CLI
      • Helm Chart
      • Prebuilt Binary
      • Build from Source
    • MCP Servers
      • Overview
      • Quickstart
      • Concepts
      • Create a Tool
      • Best Practices
      • Tool Patterns
      • Troubleshoot
    • Configuration
      • Resources
      • Allow and Deny Lists
      • Message Batching
      • Windowed Processing
      • Metadata
      • Error Handling
      • Interpolation
      • Secrets
      • Field Paths
      • Processing Pipelines
      • Unit Testing
      • Templating
      • Dynamic Inputs and Outputs
      • Using CUE
      • Telemetry
    • Components Catalog
      • HTTP
      • Inputs
        • amqp_0_9
        • amqp_1
        • aws_cloudwatch_logs
        • aws_dynamodb_cdc
        • aws_kinesis
        • aws_s3
        • aws_sqs
        • azure_blob_storage
        • azure_cosmosdb
        • azure_queue_storage
        • azure_table_storage
        • batched
        • beanstalkd
        • broker
        • cassandra
        • cockroachdb_changefeed
        • csv
        • discord
        • dynamic
        • file
        • gcp_bigquery_select
        • gcp_cloud_storage
        • gcp_pubsub
        • gcp_spanner_cdc
        • generate
        • git
        • hdfs
        • http_client
        • http_server
        • inproc
        • kafka
        • kafka_franz
        • mongodb
        • mongodb_cdc
        • mqtt
        • mysql_cdc
        • nanomsg
        • nats
        • nats_jetstream
        • nats_kv
        • nats_stream
        • nsq
        • ockam_kafka
        • otlp_http
        • otlp_grpc
        • parquet
        • postgres_cdc
        • pulsar
        • read_until
        • redis_list
        • redis_pubsub
        • redis_scan
        • redis_streams
        • redpanda
        • redpanda_common
        • redpanda_migrator
        • legacy_redpanda_migrator
        • legacy_redpanda_migrator_offsets
        • redpanda_migrator_bundle
        • microsoft_sql_server_cdc
        • resource
        • schema_registry
        • sequence
        • sftp
        • slack
        • slack_users
        • socket
        • socket_server
        • spicedb_watch
        • splunk
        • sql_raw
        • sql_select
        • stdin
        • subprocess
        • tigerbeetle_cdc
        • timeplus
        • twitter_search
        • websocket
        • zmq4
      • Scanners
        • avro
        • chunker
        • csv
        • decompress
        • json_array
        • json_documents
        • lines
        • re_match
        • skip_bom
        • switch
        • tar
        • to_the_end
      • Processors
        • archive
        • avro
        • awk
        • aws_bedrock_chat
        • aws_bedrock_embeddings
        • aws_dynamodb_partiql
        • aws_lambda
        • azure_cosmosdb
        • benchmark
        • bloblang
        • bounds_check
        • branch
        • cache
        • cached
        • cohere_chat
        • cohere_embeddings
        • cohere_rerank
        • catch
        • command
        • compress
        • couchbase
        • crash
        • decompress
        • dedupe
        • ffi
        • for_each
        • gcp_bigquery_select
        • gcp_vertex_ai_chat
        • gcp_vertex_ai_embeddings
        • google_drive_download
        • google_drive_list_labels
        • google_drive_search
        • grok
        • group_by
        • group_by_value
        • http
        • insert_part
        • javascript
        • jira
        • jmespath
        • jq
        • json_schema
        • log
        • mapping
        • metric
        • mongodb
        • msgpack
        • mutation
        • nats_kv
        • nats_request_reply
        • noop
        • ollama_chat
        • ollama_embeddings
        • ollama_moderation
        • openai_chat_completion
        • openai_embeddings
        • openai_image_generation
        • openai_speech
        • openai_transcription
        • openai_translation
        • parallel
        • parquet
        • parquet_decode
        • parquet_encode
        • parse_log
        • processors
        • protobuf
        • qdrant
        • rate_limit
        • redpanda_data_transform
        • redis
        • redis_script
        • resource
        • retry
        • schema_registry_decode
        • schema_registry_encode
        • select_parts
        • sentry_capture
        • slack_thread
        • sleep
        • split
        • sql
        • sql_insert
        • sql_raw
        • sql_select
        • subprocess
        • switch
        • sync_response
        • text_chunker
        • try
        • unarchive
        • wasm
        • while
        • workflow
        • xml
      • Outputs
        • amqp_0_9
        • amqp_1
        • aws_dynamodb
        • aws_kinesis
        • aws_kinesis_firehose
        • aws_s3
        • aws_sns
        • aws_sqs
        • azure_blob_storage
        • azure_cosmosdb
        • azure_data_lake_gen2
        • azure_queue_storage
        • azure_table_storage
        • beanstalkd
        • broker
        • cache
        • cassandra
        • couchbase
        • cyborgdb
        • cypher
        • discord
        • drop
        • drop_on
        • dynamic
        • elasticsearch_v8
        • elasticsearch_v9
        • fallback
        • file
        • gcp_bigquery
        • gcp_cloud_storage
        • gcp_pubsub
        • hdfs
        • http_client
        • http_server
        • iceberg
        • inproc
        • kafka
        • kafka_franz
        • mongodb
        • mqtt
        • nanomsg
        • nats
        • nats_jetstream
        • nats_kv
        • nats_stream
        • nsq
        • ockam_kafka
        • opensearch
        • otlp_http
        • otlp_grpc
        • pinecone
        • pulsar
        • pusher
        • qdrant
        • questdb
        • redis_hash
        • redis_list
        • redis_pubsub
        • redis_streams
        • redpanda
        • redpanda_common
        • redpanda_migrator
        • redpanda_migrator_bundle
        • legacy_redpanda_migrator
        • legacy_redpanda_migrator_offsets
        • reject
        • reject_errored
        • resource
        • retry
        • schema_registry
        • sftp
        • slack_post
        • slack_reaction
        • snowflake_put
        • snowflake_streaming
        • socket
        • splunk_hec
        • sql
        • sql_insert
        • sql_raw
        • stdout
        • subprocess
        • switch
        • sync_response
        • timeplus
        • websocket
        • zmq4
      • Caches
        • aws_dynamodb
        • aws_s3
        • couchbase
        • file
        • gcp_cloud_storage
        • lru
        • memcached
        • memory
        • mongodb
        • multilevel
        • nats_kv
        • noop
        • redpanda
        • redis
        • ristretto
        • sql
        • ttlru
      • Rate Limits
        • local
        • redis
      • Buffers
        • memory
        • sqlite
        • none
        • system_window
      • Metrics
        • aws_cloudwatch
        • logger
        • statsd
        • influxdb
        • none
        • json_api
        • prometheus
      • Tracers
        • gcp_cloudtrace
        • none
        • jaeger
        • open_telemetry_collector
        • redpanda
      • Redpanda
      • Logger
    • Plugins
    • Bloblang
      • Walkthrough
      • Functions
      • Methods
      • Arithmetic
      • Advanced
      • Playground
    • Guides
      • Monitoring
      • Message Delivery Semantics
      • Performance Tuning
      • Synchronous Responses
      • Cloud Credentials
        • Amazon Web Services
        • Authenticate to Amazon Aurora using IAM roles
        • Google Cloud Platform
      • Serverless
        • Lambda
      • Streams Mode
        • Streams Via Config Files
        • Streams Via REST API
        • Streams API
      • Migration
        • Migrate to the Unified Redpanda Migrator
        • Migrating to Version 4
        • Migrating to Version 3
        • Migrating to Version 2
    • Cookbooks
      • DynamoDB CDC Patterns
      • Enrichment Workflows
      • Filtering and Sampling
      • Work with Jira Issues
      • Joining Streams
      • Ingest data into Snowflake
      • Redpanda Migrator
      • Retrieval-Augmented Generation (RAG)
      • Custom Metrics
      • Create a Discord Bot
    • Reference
      • Helm Chart Specification
      • Release Notes
Collapse navigation tree

Collapse

Connect Tools

  • Bloblang Playground
  • Claude AI Skills
Was this helpful?
🎉 Thanks for your feedback!
  • Docs
  • Connect
  • Get Started
  • Introduction to Redpanda Connect

Introduction to Redpanda Connect

Redpanda Connect is a declarative connector framework that solves a wide range of data engineering problems with simple, chained, stateless processing steps. It implements transaction-based resiliency with back pressure, so when connecting to at-least-once sources and sinks it’s able to guarantee at-least-once delivery without needing to persist messages during transit.

It’s simple to deploy, comes with a wide range of connectors, and is totally data agnostic, making it easy to drop into your existing infrastructure. Redpanda Connect has functionality that overlaps with integration frameworks, log aggregators and ETL workflow engines, and can therefore be used to complement these traditional data engineering tools or act as a simpler alternative.

Next steps

  • Get started.

  • View all connectors

Back to top
×

Simple online edits

For simple changes, such as fixing a typo, you can edit the content directly on GitHub.

Edit on GitHub

Or, open an issue to let us know about something that you want us to change.

Open an issue

Contribution guide

For extensive content updates, or if you prefer to work locally, read our contribution guide .

Was this helpful?
group Ask in the community
mail Share your feedback
group_add Make a contribution
🎉 Thanks for your feedback!
Get Started What’s New
Image for tracking purposes only
Redpanda
Product
Agentic Data Plane Data Streaming
Learn
Resources Events On-demand Blog
Company
About us Customers Press Partners Careers Contact Legal hub Trust center
Privacy policy
© 2026 Redpanda. All rights reserved.
`; /** * For API endpoint results we show a tiny example to reduce clicks. * This is pure UI enrichment: not required by Algolia. */ const hasEndpoint = !!(preview && (preview.method || preview.path)); let endpointLine = ''; let curlExample = ''; if (hasEndpoint) { const method = (preview.method || 'GET').toUpperCase(); const path = preview.path || ''; endpointLine = `${method} ${path}`; let origin = ''; try { origin = new URL(preview.url || '').origin; } catch (e) { /* no-op */ } curlExample = `curl -X ${method} '${origin ? origin + path : path}'`; } // Integrate AI assistant with the current query. const askAIButton = currentQuery ? html`` : ''; // Compose a “View all results” link that respects product + version context. const componentTitle = 'Connect'; const productParams = (() => { if (componentTitle === 'Cloud') return '&product[0]=Cloud&product[1]=Connect'; if (componentTitle === 'Self-Managed') return '&product[0]=Self-Managed&product[1]=Connect'; return ''; })(); const viewAllLink = currentQuery ? html` View all results ` : ''; // Layout: header (filters/AI), results list, right-side preview, footer tips. render( html`
${dropdown} ${askAIButton}
${children}
${ preview ? html`
${ preview.breadcrumbs ? html`
    ${preview.breadcrumbs.map( (breadcrumb) => html`
  • { event.stopPropagation(); // Click analytics requires clickAnalytics: true and a queryID. // Docs: https://www.algolia.com/doc/api-reference/api-parameters/clickAnalytics/ aa('clickedObjectIDsAfterSearch', { eventName: 'Preview Selected', index: state.context.preview.__autocomplete_indexName, queryID: state.context.preview.__autocomplete_queryID, objectIDs: [state.context.preview.objectID], positions: [state.activeItemId + 1], // positions start at 1 }); }} href="${breadcrumb.u}" > ${breadcrumb.t}
  • ` )}
` : '' }

${components.Highlight({ hit: preview, attribute: 'title' })}

${ preview.intro ? components.Highlight({ hit: preview, attribute: 'intro' }) : preview.description ? components.Highlight({ hit: preview, attribute: 'description' }) : '' }

${ preview.api ? html`
${preview.api}
` : '' } ${ hasEndpoint ? html`

Endpoint

${endpointLine}

Example

${curlExample}
` : '' } ${ preview.image ? html`
${ SUPPORTED_PREVIEW_TYPES.includes((preview.type || '').toLowerCase()) ? html` { event.stopPropagation(); aa('clickedObjectIDsAfterSearch', { eventName: 'Preview Selected', index: state.context.preview.__autocomplete_indexName, queryID: state.context.preview.__autocomplete_queryID, objectIDs: [state.context.preview.objectID], positions: [state.activeItemId + 1], }); }} href="${preview.url || preview.objectID}" > ${preview.title || ''} ` : html` { event.stopPropagation(); aa('clickedObjectIDsAfterSearch', { eventName: 'Preview Selected', index: state.context.preview.__autocomplete_indexName, queryID: state.context.preview.__autocomplete_queryID, objectIDs: [state.context.preview.objectID], positions: [state.activeItemId + 1], }); }} target="_blank" rel="noopener noreferrer" href="${preview.url || preview.objectID}" > ${preview.title || ''} ` }
` : '' }
${preview.titles && preview.titles.length > 0 ? html`

On this page

` : ''}
    ${(preview.titles || []).slice(0, 15).map( (title) => html`
  • ${ SUPPORTED_PREVIEW_TYPES.includes((state.context.preview.type || '').toLowerCase()) ? html` { event.stopPropagation(); aa('clickedObjectIDsAfterSearch', { eventName: 'Preview Selected', index: state.context.preview.__autocomplete_indexName, queryID: state.context.preview.__autocomplete_queryID, objectIDs: [state.context.preview.objectID], positions: [state.activeItemId + 1], }); }} href="${(preview.url || preview.objectID)}#${title.h}" > ${components.Highlight({ hit: title, attribute: 't' })} ` : html` { event.stopPropagation(); aa('clickedObjectIDsAfterSearch', { eventName: 'Preview Selected', index: state.context.preview.__autocomplete_indexName, queryID: state.context.preview.__autocomplete_queryID, objectIDs: [state.context.preview.objectID], positions: [state.activeItemId + 1], }); }} target="_blank" rel="noopener noreferrer" href="${(preview.url || preview.objectID)}#${title.h}" > ${components.Highlight({ hit: title, attribute: 't' })} ` }
  • ` )}
  • ⏎to select
  • ↓↑to navigate
  • Escto close
${viewAllLink}
` : '' }
`, root ); }, /** * Define our data sources: * - "filters": facet values for the _tags facet (used by the tags plugin) * - "docs": actual content/hits * Sources overview: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/ */ getSources({ query, state }) { const tagsByFacet = groupBy(state.context.tagsPlugin.tags, (tag) => tag.facet); return [ { sourceId: 'filters', getItems() { // Fetch facet values for _tags to populate the checkbox menu. // getAlgoliaFacets: https://www.algolia.com/doc/ui-libraries/autocomplete/api-reference/sources/#param-getalgoliafacets return getAlgoliaFacets({ searchClient, queries: [ { indexName: 'redpanda', facet: '_tags', params: { facetQuery: '', // https://www.algolia.com/doc/api-reference/api-parameters/facetQuery/ maxFacetHits: 50, // https://www.algolia.com/doc/api-reference/api-parameters/maxFacetHits/ }, }, ], transformResponse({ facetHits }) { // We return raw server facets; union with known+selected happens in render(). const server = (facetHits[0] || []).map(h => ({ label: h.label, facet: '_tags' })); return server; }, }); }, templates: { header() { return null; }, item() { return null; }, }, }, { sourceId: 'docs', getItems() { // getAlgoliaResults: https://www.algolia.com/doc/ui-libraries/autocomplete/api-reference/sources/#param-getalgoliaresults return getAlgoliaResults({ searchClient, queries: [ { indexName: 'redpanda', query, params: { clickAnalytics: true, // https://www.algolia.com/doc/api-reference/api-parameters/clickAnalytics/ hitsPerPage: 10, // https://www.algolia.com/doc/api-reference/api-parameters/hitsPerPage/ attributesToSnippet: ['*:25'], // https://www.algolia.com/doc/api-reference/api-parameters/attributesToSnippet/ snippetEllipsisText: '…', // https://www.algolia.com/doc/api-reference/api-parameters/snippetEllipsisText/ tagFilters: mapToAlgoliaFilters(tagsByFacet), // https://www.algolia.com/doc/api-reference/api-parameters/tagFilters/ }, }, ], transformResponse({ hits }) { // Re-order mixed hits so Docs stay in place while non-Doc items // are time-sorted, and compute a matchingHeading to deep-link // to the best title match. return hits.map((nestedHits) => { const docIndices = new Map(); nestedHits.forEach((item, index) => { if (item.type === 'Doc') { docIndices.set(index, item); } }); const nonDocItems = nestedHits .filter((item) => item.type !== 'Doc') .sort((a, b) => (b.unixTimestamp ?? -Infinity) - (a.unixTimestamp ?? -Infinity)); let nonDocIndex = 0; docIndices.forEach((item, index) => { if (item._highlightResult && item._highlightResult.titles) { const matchedIndex = item._highlightResult.titles.findIndex( (title) => title.t.matchLevel === 'full' ); if (matchedIndex !== -1) { const matchedTopLevelTitle = item.titles[matchedIndex]; if (matchedTopLevelTitle) { item.matchingHeading = `#${matchedTopLevelTitle.h}`; } } } nestedHits[index] = item; }); return nestedHits.map((item, index) => docIndices.has(index) ? docIndices.get(index) : nonDocItems[nonDocIndex++] ); }); }, }); }, templates: { noResults({ state, html }) { // Clear preview so we don’t show stale content for a query with no hits. state.context.preview = null; if (!state.query) return; return html`
No results for ${state.query}

Believe this query should return results? Let us know .

`; }, header({ items, html }) { if (!items.length) return; return html` Results
`; }, item({ item, components, html }) { const matchingHeading = item.matchingHeading || ''; // Helper: render “product” as deduped badges const renderProduct = (product) => { if (Array.isArray(product)) { const seen = new Set(); return product .filter(p => { const k = (p || '').toLowerCase(); if (seen.has(k)) return false; seen.add(k); return true; }) .map(p => html`
${p}
`); } else if (product) { return html`
${product}
`; } return null; }; // If previewable, navigate within the panel; otherwise open a new tab. const aTag = SUPPORTED_PREVIEW_TYPES.includes((item.type || '').toLowerCase()) ? html`
${components.Highlight({ hit: item, attribute: 'title' })}
${ item.text ? html`
${ item.text ? components.Snippet({ hit: item, attribute: 'text' }) : item.intro ? components.Snippet({ hit: item, attribute: 'intro' }) : item.description ? components.Snippet({ hit: item, attribute: 'description' }) : '' }
` : html`
${ item.intro ? components.Snippet({ hit: item, attribute: 'intro' }) : item.description ? components.Snippet({ hit: item, attribute: 'description' }) : '' }
` }
${item.type}
${renderProduct(item.product)} ${item.api ? html`
${item.api}
` : ''} ${item.version ? html`
${item.version}
` : ''}
` : html`
${components.Highlight({ hit: item, attribute: 'title' })}
${ item.breadcrumbs ? html`
    ${ item.breadcrumbs.length > 2 && item.breadcrumbs .slice(1, item.breadcrumbs.length - 1) .map((breadcrumb) => html`
  • ${breadcrumb.t}
  • `) } ${ item.breadcrumbs.length === 2 && item.breadcrumbs.slice(1).map((breadcrumb) => html`
  • ${breadcrumb.t}
  • `) }
` : '' }
${ item.text ? components.Snippet({ hit: item, attribute: 'text' }) : item.intro ? components.Snippet({ hit: item, attribute: 'intro' }) : item.description ? components.Snippet({ hit: item, attribute: 'description' }) : '' }
${item.type}
${renderProduct(item.product)} ${item.version ? html`
${item.version}
` : ''}
`; return html`${aTag}`; }, }, getItemUrl({ item }) { return item.url || item.objectID; }, onActive({ item, setContext, state }) { const ctx = state?.context || {}; setContext({ ...ctx, preview: item }); }, } ]; }, }); /** * Expose the Autocomplete instance globally so other UI (our custom dropdown) * can drive its context without capturing stale references across re-renders. * This is intentionally namespaced and “private”. See notes below. */ window.__algoliaAutocompleteInstance = autocompleteInstance; } window.addEventListener('DOMContentLoaded', initAlgolia);
Expand navigation tree
Quick access to Connect Tools
Bloblang Playground Claude AI Skills