diff --git a/fireflyframework-notifications-core/pom.xml b/fireflyframework-notifications-core/pom.xml
index ff90fa6..765ef5b 100644
--- a/fireflyframework-notifications-core/pom.xml
+++ b/fireflyframework-notifications-core/pom.xml
@@ -7,7 +7,7 @@
org.fireflyframework
fireflyframework-notifications
- 26.04.01
+ 26.05.06
../pom.xml
diff --git a/fireflyframework-notifications-core/src/main/java/org/fireflyframework/notifications/observability/NotificationMetrics.java b/fireflyframework-notifications-core/src/main/java/org/fireflyframework/notifications/observability/NotificationMetrics.java
new file mode 100644
index 0000000..b7a3fe2
--- /dev/null
+++ b/fireflyframework-notifications-core/src/main/java/org/fireflyframework/notifications/observability/NotificationMetrics.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2024-2026 Firefly Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.fireflyframework.notifications.observability;
+
+import io.micrometer.core.instrument.MeterRegistry;
+import org.fireflyframework.observability.metrics.FireflyMetricsSupport;
+import reactor.core.publisher.Mono;
+
+/**
+ * Shared observability instrumentation for the Notifications module.
+ *
+ * Records:
+ *
+ * - {@code firefly.notifications.sent} — total notifications dispatched, tagged by {@code channel}
+ * (email/sms/push), {@code provider} (sendgrid/twilio/firebase/resend/...) and {@code status}
+ * - {@code firefly.notifications.delivery.duration} — end-to-end dispatch latency timer
+ * - {@code firefly.notifications.errors} — failed deliveries, tagged by {@code error.type}
+ * - {@code firefly.notifications.templates.rendered} — template renders, tagged by template name
+ *
+ */
+public class NotificationMetrics extends FireflyMetricsSupport {
+
+ private static final String TAG_CHANNEL = "channel";
+ private static final String TAG_PROVIDER = "provider";
+ private static final String TAG_TEMPLATE = "template";
+
+ public NotificationMetrics(MeterRegistry meterRegistry) {
+ super(meterRegistry, "notifications");
+ }
+
+ /**
+ * Wraps a notification dispatch operation with a timer and success/failure counters.
+ */
+ public Mono timedDispatch(String channel, String provider, Mono dispatch) {
+ return timed("delivery.duration", dispatch, TAG_CHANNEL, channel, TAG_PROVIDER, provider)
+ .doOnSuccess(v -> recordSuccess("sent", TAG_CHANNEL, channel, TAG_PROVIDER, provider))
+ .doOnError(e -> {
+ recordFailure("sent", e, TAG_CHANNEL, channel, TAG_PROVIDER, provider);
+ recordFailure("errors", e, TAG_CHANNEL, channel, TAG_PROVIDER, provider);
+ });
+ }
+
+ public void recordTemplateRendered(String template) {
+ counter("templates.rendered", TAG_TEMPLATE, template).increment();
+ }
+}
diff --git a/fireflyframework-notifications-core/src/main/java/org/fireflyframework/notifications/observability/NotificationObservabilityAutoConfiguration.java b/fireflyframework-notifications-core/src/main/java/org/fireflyframework/notifications/observability/NotificationObservabilityAutoConfiguration.java
new file mode 100644
index 0000000..3599eba
--- /dev/null
+++ b/fireflyframework-notifications-core/src/main/java/org/fireflyframework/notifications/observability/NotificationObservabilityAutoConfiguration.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2024-2026 Firefly Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.fireflyframework.notifications.observability;
+
+import io.micrometer.core.instrument.MeterRegistry;
+import org.springframework.boot.autoconfigure.AutoConfiguration;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Bean;
+
+/**
+ * Auto-configures {@link NotificationMetrics} as a Spring bean for use by every
+ * notifications adapter (email, SMS, push, etc.).
+ */
+@AutoConfiguration
+@ConditionalOnClass(MeterRegistry.class)
+@ConditionalOnProperty(prefix = "firefly.observability.metrics", name = "enabled",
+ havingValue = "true", matchIfMissing = true)
+public class NotificationObservabilityAutoConfiguration {
+
+ @Bean
+ @ConditionalOnMissingBean
+ @ConditionalOnBean(MeterRegistry.class)
+ NotificationMetrics notificationMetrics(MeterRegistry meterRegistry) {
+ return new NotificationMetrics(meterRegistry);
+ }
+}
diff --git a/fireflyframework-notifications-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/fireflyframework-notifications-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
new file mode 100644
index 0000000..0785f8c
--- /dev/null
+++ b/fireflyframework-notifications-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -0,0 +1 @@
+org.fireflyframework.notifications.observability.NotificationObservabilityAutoConfiguration
diff --git a/pom.xml b/pom.xml
index 59bff1e..2d4a829 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,13 +7,13 @@
org.fireflyframework
fireflyframework-parent
- 26.04.01
+ 26.05.06
org.fireflyframework
fireflyframework-notifications
- 26.04.01
+ 26.05.06
pom
Firefly Framework - Notifications Library