This is an automated email from the ASF dual-hosted git repository.

maciej pushed a commit to branch connectors-versions
in repository https://gitbox.apache.org/repos/asf/iggy.git

commit d8ab373c105db9db0fd5b2674bbd683f008efac2
Author: Maciej Modzelewski <[email protected]>
AuthorDate: Mon Feb 2 16:19:10 2026 +0100

    feat(connectors): add connector version to stats endpoint
---
 Cargo.lock                                         | 20 ++++-----
 Cargo.toml                                         |  2 +-
 DEPENDENCIES.md                                    | 20 ++++-----
 core/connectors/README.md                          |  2 +-
 core/connectors/runtime/Cargo.toml                 |  2 +-
 core/connectors/runtime/README.md                  | 51 ++++++++++++++++++++++
 core/connectors/runtime/src/context.rs             |  2 +
 core/connectors/runtime/src/main.rs                |  4 ++
 core/connectors/runtime/src/manager/sink.rs        |  1 +
 core/connectors/runtime/src/manager/source.rs      |  1 +
 core/connectors/runtime/src/sink.rs                | 13 ++++++
 core/connectors/runtime/src/source.rs              | 13 ++++++
 core/connectors/runtime/src/stats.rs               | 14 ++++++
 core/connectors/sdk/Cargo.toml                     |  2 +-
 core/connectors/sdk/README.md                      |  4 +-
 core/connectors/sdk/src/sink.rs                    |  7 +++
 core/connectors/sdk/src/source.rs                  |  7 +++
 .../connectors/sinks/elasticsearch_sink/Cargo.toml |  2 +-
 core/connectors/sinks/iceberg_sink/Cargo.toml      |  2 +-
 core/connectors/sinks/postgres_sink/Cargo.toml     |  2 +-
 core/connectors/sinks/quickwit_sink/Cargo.toml     |  2 +-
 core/connectors/sinks/stdout_sink/Cargo.toml       |  2 +-
 .../sources/elasticsearch_source/Cargo.toml        |  2 +-
 core/connectors/sources/postgres_source/Cargo.toml |  2 +-
 core/connectors/sources/random_source/Cargo.toml   |  2 +-
 25 files changed, 148 insertions(+), 33 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock
index f2806dd02..1cbecf2ab 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -4540,7 +4540,7 @@ dependencies = [
 
 [[package]]
 name = "iggy-connectors"
-version = "0.2.2-edge.1"
+version = "0.2.3-edge.1"
 dependencies = [
  "async-trait",
  "axum",
@@ -4686,7 +4686,7 @@ dependencies = [
 
 [[package]]
 name = "iggy_connector_elasticsearch_sink"
-version = "0.2.1-edge.1"
+version = "0.2.2-edge.1"
 dependencies = [
  "async-trait",
  "base64 0.22.1",
@@ -4704,7 +4704,7 @@ dependencies = [
 
 [[package]]
 name = "iggy_connector_elasticsearch_source"
-version = "0.2.1-edge.1"
+version = "0.2.2-edge.1"
 dependencies = [
  "async-trait",
  "chrono",
@@ -4722,7 +4722,7 @@ dependencies = [
 
 [[package]]
 name = "iggy_connector_iceberg_sink"
-version = "0.2.1-edge.1"
+version = "0.2.2-edge.1"
 dependencies = [
  "arrow-json",
  "async-trait",
@@ -4741,7 +4741,7 @@ dependencies = [
 
 [[package]]
 name = "iggy_connector_postgres_sink"
-version = "0.2.1-edge.1"
+version = "0.2.2-edge.1"
 dependencies = [
  "async-trait",
  "chrono",
@@ -4760,7 +4760,7 @@ dependencies = [
 
 [[package]]
 name = "iggy_connector_postgres_source"
-version = "0.2.1-edge.1"
+version = "0.2.2-edge.1"
 dependencies = [
  "async-trait",
  "base64 0.22.1",
@@ -4781,7 +4781,7 @@ dependencies = [
 
 [[package]]
 name = "iggy_connector_quickwit_sink"
-version = "0.2.1-edge.1"
+version = "0.2.2-edge.1"
 dependencies = [
  "async-trait",
  "dashmap",
@@ -4796,7 +4796,7 @@ dependencies = [
 
 [[package]]
 name = "iggy_connector_random_source"
-version = "0.2.1-edge.1"
+version = "0.2.2-edge.1"
 dependencies = [
  "async-trait",
  "dashmap",
@@ -4813,7 +4813,7 @@ dependencies = [
 
 [[package]]
 name = "iggy_connector_sdk"
-version = "0.1.2-edge.1"
+version = "0.1.3-edge.1"
 dependencies = [
  "async-trait",
  "base64 0.22.1",
@@ -4841,7 +4841,7 @@ dependencies = [
 
 [[package]]
 name = "iggy_connector_stdout_sink"
-version = "0.2.1-edge.1"
+version = "0.2.2-edge.1"
 dependencies = [
  "async-trait",
  "dashmap",
diff --git a/Cargo.toml b/Cargo.toml
index 0be7d8a9c..f61c76455 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -163,7 +163,7 @@ iceberg-catalog-rest = "0.8.0"
 iggy = { path = "core/sdk", version = "0.8.2-edge.2" }
 iggy_binary_protocol = { path = "core/binary_protocol", version = 
"0.8.2-edge.2" }
 iggy_common = { path = "core/common", version = "0.8.2-edge.2" }
-iggy_connector_sdk = { path = "core/connectors/sdk", version = "0.1.2-edge.1" }
+iggy_connector_sdk = { path = "core/connectors/sdk", version = "0.1.3-edge.1" }
 integration = { path = "core/integration" }
 journal = { path = "core/journal" }
 js-sys = "0.3"
diff --git a/DEPENDENCIES.md b/DEPENDENCIES.md
index 924cbd10d..8da864a75 100644
--- a/DEPENDENCIES.md
+++ b/DEPENDENCIES.md
@@ -389,19 +389,19 @@ iggy: 0.8.2-edge.2, "Apache-2.0",
 iggy-bench: 0.3.2-edge.1, "Apache-2.0",
 iggy-bench-dashboard-server: 0.5.1-edge.1, "Apache-2.0",
 iggy-cli: 0.10.2-edge.1, "Apache-2.0",
-iggy-connectors: 0.2.2-edge.1, "Apache-2.0",
+iggy-connectors: 0.2.3-edge.1, "Apache-2.0",
 iggy-mcp: 0.2.2-edge.1, "Apache-2.0",
 iggy_binary_protocol: 0.8.2-edge.2, "Apache-2.0",
 iggy_common: 0.8.2-edge.2, "Apache-2.0",
-iggy_connector_elasticsearch_sink: 0.2.1-edge.1, "Apache-2.0",
-iggy_connector_elasticsearch_source: 0.2.1-edge.1, "Apache-2.0",
-iggy_connector_iceberg_sink: 0.2.1-edge.1, "Apache-2.0",
-iggy_connector_postgres_sink: 0.2.1-edge.1, "Apache-2.0",
-iggy_connector_postgres_source: 0.2.1-edge.1, "Apache-2.0",
-iggy_connector_quickwit_sink: 0.2.1-edge.1, "Apache-2.0",
-iggy_connector_random_source: 0.2.1-edge.1, "Apache-2.0",
-iggy_connector_sdk: 0.1.2-edge.1, "Apache-2.0",
-iggy_connector_stdout_sink: 0.2.1-edge.1, "Apache-2.0",
+iggy_connector_elasticsearch_sink: 0.2.2-edge.1, "Apache-2.0",
+iggy_connector_elasticsearch_source: 0.2.2-edge.1, "Apache-2.0",
+iggy_connector_iceberg_sink: 0.2.2-edge.1, "Apache-2.0",
+iggy_connector_postgres_sink: 0.2.2-edge.1, "Apache-2.0",
+iggy_connector_postgres_source: 0.2.2-edge.1, "Apache-2.0",
+iggy_connector_quickwit_sink: 0.2.2-edge.1, "Apache-2.0",
+iggy_connector_random_source: 0.2.2-edge.1, "Apache-2.0",
+iggy_connector_sdk: 0.1.3-edge.1, "Apache-2.0",
+iggy_connector_stdout_sink: 0.2.2-edge.1, "Apache-2.0",
 iggy_examples: 0.0.6, "Apache-2.0",
 ignore: 0.4.25, "MIT OR Unlicense",
 impl-more: 0.1.9, "Apache-2.0 OR MIT",
diff --git a/core/connectors/README.md b/core/connectors/README.md
index 32ddc08a1..12211dbac 100644
--- a/core/connectors/README.md
+++ b/core/connectors/README.md
@@ -49,7 +49,7 @@ Sinks are responsible for consuming the messages from the 
configured stream(s) a
 
 Please refer to the **[Sink 
documentation](https://github.com/apache/iggy/tree/master/core/connectors/sinks)**
 for the details about the configuration and the sample implementation.
 
-When implementing `Sink`, make sure to use the `sink_connector!` macro to 
expose the FFI interface and allow the connector runtime to register the sink 
with the runtime.
+When implementing `Sink`, make sure to use the `sink_connector!` macro to 
expose the FFI interface and allow the connector runtime to register the sink 
with the runtime. The macro also exports the connector's version (from 
`Cargo.toml`) which is reported in the runtime's `/stats` endpoint.
 Each sink should have its own, custom configuration, which is passed along 
with the unique plugin ID via expected `new()` method.
 
 ## Source
diff --git a/core/connectors/runtime/Cargo.toml 
b/core/connectors/runtime/Cargo.toml
index 270471abe..41e7a3808 100644
--- a/core/connectors/runtime/Cargo.toml
+++ b/core/connectors/runtime/Cargo.toml
@@ -17,7 +17,7 @@
 
 [package]
 name = "iggy-connectors"
-version = "0.2.2-edge.1"
+version = "0.2.3-edge.1"
 description = "Connectors runtime for Iggy message streaming platform"
 edition = "2024"
 license = "Apache-2.0"
diff --git a/core/connectors/runtime/README.md 
b/core/connectors/runtime/README.md
index 6433fb822..10458adc6 100644
--- a/core/connectors/runtime/README.md
+++ b/core/connectors/runtime/README.md
@@ -205,3 +205,54 @@ The runtime exposes Prometheus-compatible metrics via the 
`/metrics` endpoint wh
 - `iggy_connector_messages_consumed_total`: Messages consumed from Iggy (sink)
 - `iggy_connector_messages_processed_total`: Messages processed and sent to 
sink plugin
 - `iggy_connector_errors_total`: Errors encountered
+
+## Stats
+
+The `/stats` endpoint provides runtime and per-connector statistics in JSON 
format. This includes system resource usage, connector counts, and detailed 
per-connector metrics with version information.
+
+### Example Response
+
+```json
+{
+  "connectors_runtime_version": "0.2.3-edge.1",
+  "connectors_runtime_version_semver": 203,
+  "process_id": 12345,
+  "cpu_usage": 2.5,
+  "total_cpu_usage": 15.3,
+  "memory_usage": 52428800,
+  "total_memory": 17179869184,
+  "available_memory": 8589934592,
+  "run_time": 3600000000,
+  "start_time": 1706889600000000,
+  "sources_total": 1,
+  "sources_running": 1,
+  "sinks_total": 1,
+  "sinks_running": 1,
+  "connectors": [
+    {
+      "key": "random-source",
+      "name": "Random Source",
+      "connector_type": "source",
+      "version": "0.2.2-edge.1",
+      "version_semver": 202,
+      "status": "running",
+      "enabled": true,
+      "messages_produced": 1000,
+      "messages_sent": 1000,
+      "errors": 0
+    },
+    {
+      "key": "stdout-sink",
+      "name": "Stdout Sink",
+      "connector_type": "sink",
+      "version": "0.2.2-edge.1",
+      "version_semver": 202,
+      "status": "running",
+      "enabled": true,
+      "messages_consumed": 1000,
+      "messages_processed": 1000,
+      "errors": 0
+    }
+  ]
+}
+```
diff --git a/core/connectors/runtime/src/context.rs 
b/core/connectors/runtime/src/context.rs
index 20d9906ca..831c76c7a 100644
--- a/core/connectors/runtime/src/context.rs
+++ b/core/connectors/runtime/src/context.rs
@@ -93,6 +93,7 @@ fn map_sinks(
                     key: sink_plugin.key.to_owned(),
                     name: sink_plugin.name.to_owned(),
                     path: sink_plugin.path.to_owned(),
+                    version: sink_plugin.version.to_owned(),
                     enabled: sink_config.enabled,
                     status,
                     last_error: sink_plugin
@@ -134,6 +135,7 @@ fn map_sources(
                     key: source_plugin.key.to_owned(),
                     name: source_plugin.name.to_owned(),
                     path: source_plugin.path.to_owned(),
+                    version: source_plugin.version.to_owned(),
                     enabled: source_config.enabled,
                     status,
                     last_error: source_plugin
diff --git a/core/connectors/runtime/src/main.rs 
b/core/connectors/runtime/src/main.rs
index b71bd5eef..f9b187c83 100644
--- a/core/connectors/runtime/src/main.rs
+++ b/core/connectors/runtime/src/main.rs
@@ -81,6 +81,7 @@ struct SourceApi {
     ) -> i32,
     handle: extern "C" fn(id: u32, callback: SendCallback) -> i32,
     close: extern "C" fn(id: u32) -> i32,
+    version: extern "C" fn() -> *const std::ffi::c_char,
 }
 
 #[derive(WrapperApi)]
@@ -102,6 +103,7 @@ struct SinkApi {
         messages_len: usize,
     ) -> i32,
     close: extern "C" fn(id: u32) -> i32,
+    version: extern "C" fn() -> *const std::ffi::c_char,
 }
 
 fn print_ascii_art(text: &str) {
@@ -280,6 +282,7 @@ struct SinkConnectorPlugin {
     key: String,
     name: String,
     path: String,
+    version: String,
     config_format: Option<ConfigFormat>,
     consumers: Vec<SinkConnectorConsumer>,
     error: Option<String>,
@@ -313,6 +316,7 @@ struct SourceConnectorPlugin {
     key: String,
     name: String,
     path: String,
+    version: String,
     config_format: Option<ConfigFormat>,
     transforms: Vec<Arc<dyn Transform>>,
     producer: Option<SourceConnectorProducer>,
diff --git a/core/connectors/runtime/src/manager/sink.rs 
b/core/connectors/runtime/src/manager/sink.rs
index 495693716..50d98a29a 100644
--- a/core/connectors/runtime/src/manager/sink.rs
+++ b/core/connectors/runtime/src/manager/sink.rs
@@ -104,6 +104,7 @@ pub struct SinkInfo {
     pub key: String,
     pub name: String,
     pub path: String,
+    pub version: String,
     pub enabled: bool,
     pub status: ConnectorStatus,
     pub last_error: Option<ConnectorError>,
diff --git a/core/connectors/runtime/src/manager/source.rs 
b/core/connectors/runtime/src/manager/source.rs
index 051668640..a63c6d1df 100644
--- a/core/connectors/runtime/src/manager/source.rs
+++ b/core/connectors/runtime/src/manager/source.rs
@@ -104,6 +104,7 @@ pub struct SourceInfo {
     pub key: String,
     pub name: String,
     pub path: String,
+    pub version: String,
     pub enabled: bool,
     pub status: ConnectorStatus,
     pub last_error: Option<ConnectorError>,
diff --git a/core/connectors/runtime/src/sink.rs 
b/core/connectors/runtime/src/sink.rs
index 0987eb7e5..ccd8b9d98 100644
--- a/core/connectors/runtime/src/sink.rs
+++ b/core/connectors/runtime/src/sink.rs
@@ -65,6 +65,7 @@ pub async fn init(
         let init_error: Option<String>;
         if let Some(container) = sink_connectors.get_mut(&path) {
             info!("Sink container for plugin: {path} is already loaded.",);
+            let version = get_plugin_version(&container.container);
             init_error = init_sink(
                 &container.container,
                 &config.plugin_config.unwrap_or_default(),
@@ -77,6 +78,7 @@ pub async fn init(
                 key: key.to_owned(),
                 name: name.to_owned(),
                 path: path.to_owned(),
+                version,
                 config_format: config.plugin_config_format,
                 consumers: vec![],
                 error: init_error.clone(),
@@ -86,6 +88,7 @@ pub async fn init(
             let container: Container<SinkApi> =
                 unsafe { Container::load(&path).expect("Failed to load sink 
container") };
             info!("Sink container for plugin: {path} loaded successfully.",);
+            let version = get_plugin_version(&container);
             init_error = init_sink(
                 &container,
                 &config.plugin_config.unwrap_or_default(),
@@ -102,6 +105,7 @@ pub async fn init(
                         key: key.to_owned(),
                         name: name.to_owned(),
                         path: path.to_owned(),
+                        version,
                         config_format: config.plugin_config_format,
                         consumers: vec![],
                         error: init_error.clone(),
@@ -331,6 +335,15 @@ async fn consume_messages(
     Ok(())
 }
 
+fn get_plugin_version(container: &Container<SinkApi>) -> String {
+    unsafe {
+        let version_ptr = (container.version)();
+        std::ffi::CStr::from_ptr(version_ptr)
+            .to_string_lossy()
+            .into_owned()
+    }
+}
+
 fn init_sink(
     container: &Container<SinkApi>,
     plugin_config: &serde_json::Value,
diff --git a/core/connectors/runtime/src/source.rs 
b/core/connectors/runtime/src/source.rs
index c4f155b5a..727544f16 100644
--- a/core/connectors/runtime/src/source.rs
+++ b/core/connectors/runtime/src/source.rs
@@ -75,6 +75,7 @@ pub async fn init(
         let init_error: Option<String>;
         if let Some(container) = source_connectors.get_mut(&path) {
             info!("Source container for plugin: {path} is already loaded.",);
+            let version = get_plugin_version(&container.container);
             init_error = init_source(
                 &container.container,
                 &config.plugin_config.unwrap_or_default(),
@@ -88,6 +89,7 @@ pub async fn init(
                 key: key.to_owned(),
                 name: name.to_owned(),
                 path: path.to_owned(),
+                version,
                 config_format: config.plugin_config_format,
                 producer: None,
                 transforms: vec![],
@@ -99,6 +101,7 @@ pub async fn init(
             let container: Container<SourceApi> =
                 unsafe { Container::load(&path).expect("Failed to load source 
container") };
             info!("Source container for plugin: {path} loaded successfully.",);
+            let version = get_plugin_version(&container);
             init_error = init_source(
                 &container,
                 &config.plugin_config.unwrap_or_default(),
@@ -116,6 +119,7 @@ pub async fn init(
                         key: key.to_owned(),
                         name: name.to_owned(),
                         path: path.to_owned(),
+                        version,
                         config_format: config.plugin_config_format,
                         producer: None,
                         transforms: vec![],
@@ -187,6 +191,15 @@ pub async fn init(
     Ok(source_connectors)
 }
 
+fn get_plugin_version(container: &Container<SourceApi>) -> String {
+    unsafe {
+        let version_ptr = (container.version)();
+        std::ffi::CStr::from_ptr(version_ptr)
+            .to_string_lossy()
+            .into_owned()
+    }
+}
+
 fn init_source(
     container: &Container<SourceApi>,
     plugin_config: &serde_json::Value,
diff --git a/core/connectors/runtime/src/stats.rs 
b/core/connectors/runtime/src/stats.rs
index 7a3e7717b..3cf0664e1 100644
--- a/core/connectors/runtime/src/stats.rs
+++ b/core/connectors/runtime/src/stats.rs
@@ -22,6 +22,7 @@ use crate::manager::status::ConnectorStatus;
 use crate::metrics::ConnectorType;
 use iggy_common::{IggyTimestamp, SemanticVersion};
 use serde::Serialize;
+use std::str::FromStr;
 use std::sync::Arc;
 use sysinfo::System;
 
@@ -52,6 +53,9 @@ pub struct ConnectorStats {
     pub key: String,
     pub name: String,
     pub connector_type: String,
+    pub version: String,
+    #[serde(skip_serializing_if = "Option::is_none")]
+    pub version_semver: Option<u32>,
     pub status: ConnectorStatus,
     pub enabled: bool,
     #[serde(skip_serializing_if = "Option::is_none")]
@@ -95,10 +99,15 @@ pub async fn get_runtime_stats(context: 
&Arc<RuntimeContext>) -> ConnectorRuntim
 
     let mut connectors = Vec::with_capacity(sources.len() + sinks.len());
     for source in &sources {
+        let version_semver = SemanticVersion::from_str(&source.version)
+            .ok()
+            .and_then(|v| v.get_numeric_version().ok());
         connectors.push(ConnectorStats {
             key: source.key.clone(),
             name: source.name.clone(),
             connector_type: "source".to_owned(),
+            version: source.version.clone(),
+            version_semver,
             status: source.status,
             enabled: source.enabled,
             messages_produced: 
Some(context.metrics.get_messages_produced(&source.key)),
@@ -111,10 +120,15 @@ pub async fn get_runtime_stats(context: 
&Arc<RuntimeContext>) -> ConnectorRuntim
         });
     }
     for sink in &sinks {
+        let version_semver = SemanticVersion::from_str(&sink.version)
+            .ok()
+            .and_then(|v| v.get_numeric_version().ok());
         connectors.push(ConnectorStats {
             key: sink.key.clone(),
             name: sink.name.clone(),
             connector_type: "sink".to_owned(),
+            version: sink.version.clone(),
+            version_semver,
             status: sink.status,
             enabled: sink.enabled,
             messages_produced: None,
diff --git a/core/connectors/sdk/Cargo.toml b/core/connectors/sdk/Cargo.toml
index 4d03859c4..b42909386 100644
--- a/core/connectors/sdk/Cargo.toml
+++ b/core/connectors/sdk/Cargo.toml
@@ -17,7 +17,7 @@
 
 [package]
 name = "iggy_connector_sdk"
-version = "0.1.2-edge.1"
+version = "0.1.3-edge.1"
 description = "Iggy is the persistent message streaming platform written in 
Rust, supporting QUIC, TCP and HTTP transport protocols, capable of processing 
millions of messages per second."
 edition = "2024"
 license = "Apache-2.0"
diff --git a/core/connectors/sdk/README.md b/core/connectors/sdk/README.md
index 1da28597c..0ddb84f66 100644
--- a/core/connectors/sdk/README.md
+++ b/core/connectors/sdk/README.md
@@ -1,6 +1,8 @@
 # Apache Iggy Connectors - SDK
 
-SDK provides the commonly used structs and traits such as `Sink` and `Source`, 
along with the `sink_connector` and `source_connector` macros to be used when 
developing connectors.
+SDK provides the commonly used structs and traits such as `Sink` and `Source`, 
along with the `sink_connector!` and `source_connector!` macros to be used when 
developing connectors.
+
+The macros automatically export the connector's version (from 
`CARGO_PKG_VERSION`) via FFI, allowing the runtime to report per-connector 
version information in the `/stats` endpoint.
 
 Moreover, it contains both, the `decoders` and `encoders` modules, 
implementing either `StreamDecoder` or `StreamEncoder` traits, which are used 
when consuming or producing data from/to Iggy streams.
 
diff --git a/core/connectors/sdk/src/sink.rs b/core/connectors/sdk/src/sink.rs
index 457618e75..4176e5c65 100644
--- a/core/connectors/sdk/src/sink.rs
+++ b/core/connectors/sdk/src/sink.rs
@@ -277,5 +277,12 @@ macro_rules! sink_connector {
             };
             instance.1.close()
         }
+
+        #[cfg(not(test))]
+        #[unsafe(no_mangle)]
+        extern "C" fn version() -> *const std::ffi::c_char {
+            static VERSION: &str = concat!(env!("CARGO_PKG_VERSION"), "\0");
+            VERSION.as_ptr() as *const std::ffi::c_char
+        }
     };
 }
diff --git a/core/connectors/sdk/src/source.rs 
b/core/connectors/sdk/src/source.rs
index 16b45aee7..3531c4277 100644
--- a/core/connectors/sdk/src/source.rs
+++ b/core/connectors/sdk/src/source.rs
@@ -263,5 +263,12 @@ macro_rules! source_connector {
             };
             instance.1.close()
         }
+
+        #[cfg(not(test))]
+        #[unsafe(no_mangle)]
+        extern "C" fn version() -> *const std::ffi::c_char {
+            static VERSION: &str = concat!(env!("CARGO_PKG_VERSION"), "\0");
+            VERSION.as_ptr() as *const std::ffi::c_char
+        }
     };
 }
diff --git a/core/connectors/sinks/elasticsearch_sink/Cargo.toml 
b/core/connectors/sinks/elasticsearch_sink/Cargo.toml
index 7ede4457a..6201be03d 100644
--- a/core/connectors/sinks/elasticsearch_sink/Cargo.toml
+++ b/core/connectors/sinks/elasticsearch_sink/Cargo.toml
@@ -17,7 +17,7 @@
 
 [package]
 name = "iggy_connector_elasticsearch_sink"
-version = "0.2.1-edge.1"
+version = "0.2.2-edge.1"
 description = "Iggy Elasticsearch sink connector"
 edition = "2024"
 license = "Apache-2.0"
diff --git a/core/connectors/sinks/iceberg_sink/Cargo.toml 
b/core/connectors/sinks/iceberg_sink/Cargo.toml
index 4b63979de..d175ac70d 100644
--- a/core/connectors/sinks/iceberg_sink/Cargo.toml
+++ b/core/connectors/sinks/iceberg_sink/Cargo.toml
@@ -17,7 +17,7 @@
 
 [package]
 name = "iggy_connector_iceberg_sink"
-version = "0.2.1-edge.1"
+version = "0.2.2-edge.1"
 edition = "2024"
 license = "Apache-2.0"
 keywords = ["iggy", "messaging", "streaming"]
diff --git a/core/connectors/sinks/postgres_sink/Cargo.toml 
b/core/connectors/sinks/postgres_sink/Cargo.toml
index bfc5ead2c..a24a68cf3 100644
--- a/core/connectors/sinks/postgres_sink/Cargo.toml
+++ b/core/connectors/sinks/postgres_sink/Cargo.toml
@@ -17,7 +17,7 @@
 
 [package]
 name = "iggy_connector_postgres_sink"
-version = "0.2.1-edge.1"
+version = "0.2.2-edge.1"
 description = "Iggy PostgreSQL sink connector for storing stream messages into 
PostgreSQL database"
 edition = "2024"
 license = "Apache-2.0"
diff --git a/core/connectors/sinks/quickwit_sink/Cargo.toml 
b/core/connectors/sinks/quickwit_sink/Cargo.toml
index 51fa78f10..360d9f919 100644
--- a/core/connectors/sinks/quickwit_sink/Cargo.toml
+++ b/core/connectors/sinks/quickwit_sink/Cargo.toml
@@ -17,7 +17,7 @@
 
 [package]
 name = "iggy_connector_quickwit_sink"
-version = "0.2.1-edge.1"
+version = "0.2.2-edge.1"
 description = "Iggy is the persistent message streaming platform written in 
Rust, supporting QUIC, TCP and HTTP transport protocols, capable of processing 
millions of messages per second."
 edition = "2024"
 license = "Apache-2.0"
diff --git a/core/connectors/sinks/stdout_sink/Cargo.toml 
b/core/connectors/sinks/stdout_sink/Cargo.toml
index bdceb6297..56a36028b 100644
--- a/core/connectors/sinks/stdout_sink/Cargo.toml
+++ b/core/connectors/sinks/stdout_sink/Cargo.toml
@@ -17,7 +17,7 @@
 
 [package]
 name = "iggy_connector_stdout_sink"
-version = "0.2.1-edge.1"
+version = "0.2.2-edge.1"
 description = "Iggy is the persistent message streaming platform written in 
Rust, supporting QUIC, TCP and HTTP transport protocols, capable of processing 
millions of messages per second."
 edition = "2024"
 license = "Apache-2.0"
diff --git a/core/connectors/sources/elasticsearch_source/Cargo.toml 
b/core/connectors/sources/elasticsearch_source/Cargo.toml
index 206a9ee67..6b19b6bc4 100644
--- a/core/connectors/sources/elasticsearch_source/Cargo.toml
+++ b/core/connectors/sources/elasticsearch_source/Cargo.toml
@@ -17,7 +17,7 @@
 
 [package]
 name = "iggy_connector_elasticsearch_source"
-version = "0.2.1-edge.1"
+version = "0.2.2-edge.1"
 description = "Iggy Elasticsearch source connector"
 edition = "2024"
 license = "Apache-2.0"
diff --git a/core/connectors/sources/postgres_source/Cargo.toml 
b/core/connectors/sources/postgres_source/Cargo.toml
index 4c5ed6bcc..0ce9b4968 100644
--- a/core/connectors/sources/postgres_source/Cargo.toml
+++ b/core/connectors/sources/postgres_source/Cargo.toml
@@ -17,7 +17,7 @@
 
 [package]
 name = "iggy_connector_postgres_source"
-version = "0.2.1-edge.1"
+version = "0.2.2-edge.1"
 description = "Iggy PostgreSQL source connector supporting CDC and table 
polling for message streaming platform"
 edition = "2024"
 license = "Apache-2.0"
diff --git a/core/connectors/sources/random_source/Cargo.toml 
b/core/connectors/sources/random_source/Cargo.toml
index 11b4d4a6e..092c31cbb 100644
--- a/core/connectors/sources/random_source/Cargo.toml
+++ b/core/connectors/sources/random_source/Cargo.toml
@@ -17,7 +17,7 @@
 
 [package]
 name = "iggy_connector_random_source"
-version = "0.2.1-edge.1"
+version = "0.2.2-edge.1"
 description = "Iggy is the persistent message streaming platform written in 
Rust, supporting QUIC, TCP and HTTP transport protocols, capable of processing 
millions of messages per second."
 edition = "2024"
 license = "Apache-2.0"

Reply via email to