diff --git a/docs/changelog.yml b/docs/changelog.yml
new file mode 100644
index 00000000000..e80a649fe4f
--- /dev/null
+++ b/docs/changelog.yml
@@ -0,0 +1,130 @@
+# Changelog Configuration
+# This file configures the valid values for changelog fields using the pivot structure.
+# Place this file as `changelog.yml` in the `docs/` directory
+
+# Products configuration (optional)
+# If not specified, all products from products.yml are allowed
+products:
+ # List of available product IDs (empty = all from products.yml)
+ available:
+ - logstash
+ # Default products when --products not specified
+ default:
+ - product: logstash
+ lifecycle: ga
+
+# Extraction configuration
+# Controls automatic extraction of information from PR descriptions
+extract:
+ # Auto-extract release notes from PR descriptions (default: true)
+ # Can be overridden by CLI --no-extract-release-notes
+ release_notes: true
+ # Auto-extract issues from PR body (default: true)
+ # Looks for patterns like "Fixes #123", "Closes #456", etc.
+ issues: true
+
+# Available lifecycle values (strongly typed: preview, beta, ga)
+lifecycles:
+ - preview
+ - beta
+ - ga
+
+# Pivot configuration for types, subtypes, and areas with label mappings.
+# By default we render entries grouped by type > subtype > area.
+# NOTE: subtype and area are optional and either may be omitted.
+# Labels are specified in a "label -> value" format
+pivot:
+ # Type definitions with optional labels
+ # At a minimum, feature, bug-fix, and breaking-change must be configured.
+ # Keys are type names, values can be:
+ # - simple string: comma-separated label list (e.g., ">bug, >fix")
+ # - empty/null: no labels for this type
+ # - object: { labels: "...", subtypes: {...} } for breaking-change type only
+ types:
+ # Complex object form with subtypes (ONLY allowed for breaking-change)
+ # Subtypes help categorize breaking changes by their nature
+ breaking-change:
+ labels: "breaking change"
+ # subtypes:
+ # api: ">api-breaking"
+ # behavioral: ">behavioral-breaking"
+ # configuration: ">config-breaking"
+ # dependency: ">dependency-breaking"
+ # subscription: ">subscription-breaking"
+ # plugin: ">plugin-breaking"
+ # security: ">security-breaking"
+ # other:
+ # Simple string form: labels as comma-separated string
+ bug-fix: ">bug, bug"
+ deprecation: "deprecation"
+ feature:
+ enhancement: "enhancement"
+ docs: "docs"
+ known-issue:
+ other:
+ regression: "regression"
+ security:
+
+ # Area definitions with labels
+ # Keys are area display names, values are label strings
+ # Multiple labels can be comma-separated
+ areas:
+ # Example mappings - customize based on your label naming conventions
+ Elasticsearch Output:
+ # Search: ":Search/Search"
+ # Security: ":Security/Security"
+ # Watcher: ":Data Management/Watcher"
+
+# Block configuration - combined create and publish blockers
+# block:
+ # Global labels that block changelog creation for all products (comma-separated string)
+ # create: ">non-issue, >test"
+
+ # Block changelog entries from publishing based on entry type or area
+ # publish:
+ # types:
+ # - deprecation
+ # - known-issue
+ # areas:
+ # - "Internal"
+
+ # Product-specific overrides (override global blockers, don't merge)
+ # Dictionary key can be a single product ID or comma-separated product IDs
+ # product:
+ # Example: Block these labels for elasticsearch and kibana
+ # 'elasticsearch, kibana':
+ # create: ">test"
+ # publish:
+ # types:
+ # - docs
+ # Example: Block ILM label for cloud-serverless
+ # 'cloud-serverless':
+ # create: "ILM"
+ # publish:
+ # areas:
+ # - "ILM"
+
+# Bundle configuration (profiles and defaults)
+bundle:
+ # Input directory containing changelog YAML files
+ directory: docs/changelog
+ # Output directory for bundled changelog files
+ output_directory: docs/releases
+ # Whether to resolve (copy contents) by default
+ resolve: true
+
+ # Named bundle profiles for different release scenarios
+ # profiles:
+ # Example: Elasticsearch release profile
+ # elasticsearch-release:
+ # products: "elasticsearch {version} {lifecycle}"
+ # output: "elasticsearch-{version}.yaml"
+
+ # Example: Serverless release profile
+ # serverless-release:
+ # products: "cloud-serverless {version} *"
+ # output: "serverless-{version}.yaml"
+ # # Feature IDs to hide when bundling with this profile
+ # hide_features:
+ # - feature-flag-1
+ # - feature-flag-2
diff --git a/docs/changelog/18265.yaml b/docs/changelog/18265.yaml
new file mode 100644
index 00000000000..63fd69b8668
--- /dev/null
+++ b/docs/changelog/18265.yaml
@@ -0,0 +1,93 @@
+##### Required fields #####
+
+# title:
+# A required string that is a short, user-facing headline.
+# (Max 80 characters)
+
+# type:
+# A required string that contains the type of change
+# It can be one of:
+# - breaking-change
+# - bug-fix
+# - deprecation
+# - feature
+# - enhancement
+# - docs
+# - known-issue
+# - other
+# - regression
+# - security
+
+# products:
+# A required array of objects that denote the affected products
+# Each product object contains:
+#
+# - product:
+# A required string with a valid product ID.
+# Valid values are defined in https://github.com/elastic/docs-builder/blob/main/config/products.yml
+#
+# target:
+# An optional string with the target version or date.
+#
+# lifecycle:
+# An optional string for new features or enhancements that have a specific availability.
+# It can be one of:
+# - preview
+# - beta
+# - ga
+
+##### Optional fields #####
+
+# action:
+# An optional string that describes what users must do to mitigate
+# the impact of a breaking change or known issue.
+
+# areas:
+# An optional array of strings that denotes the parts/components/services
+# of the product that are affected.
+
+# description:
+# An optional string that provides additional information.
+# (Max 600 characters).
+
+# feature-id:
+# An optional string to associate a feature or enhanceent with a
+# unique feature flag.
+
+# highlight:
+# An optional boolean for items that should be included in release
+# highlights or the UI to draw user attention.
+
+# impact:
+# An optional string that describes how the user's environment is
+# affected by a breaking change or known issue.
+
+# issues:
+# An optional array of strings that contain the issues that are
+# relevant to the PR.
+
+# pr:
+# An optional string that contains the pull request number.
+
+# subtype:
+# An optional string that applies only to breaking changes.
+# It can be one of:
+# - api
+# - behavioral
+# - configuration
+# - dependency
+# - subscription
+# - plugin
+# - security
+# - other
+
+pr: "18265"
+issues:
+- https://github.com/elastic/logstash/issues/17980
+- https://github.com/elastic/logstash/issues/18078
+type: bug-fix
+products:
+- product: logstash
+ target: 9.3.0
+title: 'management: confirm server-side filtering 404s'
+description: fixes an issue with Central Management where a spurious 404 when looking up pipeline definitions could cause the running pipelines to shut down.
diff --git a/docs/changelog/18377.yaml b/docs/changelog/18377.yaml
new file mode 100644
index 00000000000..fc6cd069b73
--- /dev/null
+++ b/docs/changelog/18377.yaml
@@ -0,0 +1,92 @@
+##### Required fields #####
+
+# title:
+# A required string that is a short, user-facing headline.
+# (Max 80 characters)
+
+# type:
+# A required string that contains the type of change
+# It can be one of:
+# - breaking-change
+# - bug-fix
+# - deprecation
+# - feature
+# - enhancement
+# - docs
+# - known-issue
+# - other
+# - regression
+# - security
+
+# products:
+# A required array of objects that denote the affected products
+# Each product object contains:
+#
+# - product:
+# A required string with a valid product ID.
+# Valid values are defined in https://github.com/elastic/docs-builder/blob/main/config/products.yml
+#
+# target:
+# An optional string with the target version or date.
+#
+# lifecycle:
+# An optional string for new features or enhancements that have a specific availability.
+# It can be one of:
+# - preview
+# - beta
+# - ga
+
+##### Optional fields #####
+
+# action:
+# An optional string that describes what users must do to mitigate
+# the impact of a breaking change or known issue.
+
+# areas:
+# An optional array of strings that denotes the parts/components/services
+# of the product that are affected.
+
+# description:
+# An optional string that provides additional information.
+# (Max 600 characters).
+
+# feature-id:
+# An optional string to associate a feature or enhanceent with a
+# unique feature flag.
+
+# highlight:
+# An optional boolean for items that should be included in release
+# highlights or the UI to draw user attention.
+
+# impact:
+# An optional string that describes how the user's environment is
+# affected by a breaking change or known issue.
+
+# issues:
+# An optional array of strings that contain the issues that are
+# relevant to the PR.
+
+# pr:
+# An optional string that contains the pull request number.
+
+# subtype:
+# An optional string that applies only to breaking changes.
+# It can be one of:
+# - api
+# - behavioral
+# - configuration
+# - dependency
+# - subscription
+# - plugin
+# - security
+# - other
+
+pr: "18377"
+issues:
+- https://github.com/elastic/logstash/issues/17457
+type: feature
+products:
+- product: logstash
+ target: 9.3.0
+title: Wait for status feature added to Logstash API
+description: We've added additional wait_for_status and timeout query parameters to the Logstash root endpoint `/`. When calling the endpoint with these parameters set, the call will return when either the Logstash status matches (or improves on) the given status, or the given timeout has expired.
diff --git a/docs/changelog/18460.yaml b/docs/changelog/18460.yaml
new file mode 100644
index 00000000000..099fd3b5f5b
--- /dev/null
+++ b/docs/changelog/18460.yaml
@@ -0,0 +1,92 @@
+##### Required fields #####
+
+# title:
+# A required string that is a short, user-facing headline.
+# (Max 80 characters)
+
+# type:
+# A required string that contains the type of change
+# It can be one of:
+# - breaking-change
+# - bug-fix
+# - deprecation
+# - feature
+# - enhancement
+# - docs
+# - known-issue
+# - other
+# - regression
+# - security
+
+# products:
+# A required array of objects that denote the affected products
+# Each product object contains:
+#
+# - product:
+# A required string with a valid product ID.
+# Valid values are defined in https://github.com/elastic/docs-builder/blob/main/config/products.yml
+#
+# target:
+# An optional string with the target version or date.
+#
+# lifecycle:
+# An optional string for new features or enhancements that have a specific availability.
+# It can be one of:
+# - preview
+# - beta
+# - ga
+
+##### Optional fields #####
+
+# action:
+# An optional string that describes what users must do to mitigate
+# the impact of a breaking change or known issue.
+
+# areas:
+# An optional array of strings that denotes the parts/components/services
+# of the product that are affected.
+
+# description:
+# An optional string that provides additional information.
+# (Max 600 characters).
+
+# feature-id:
+# An optional string to associate a feature or enhanceent with a
+# unique feature flag.
+
+# highlight:
+# An optional boolean for items that should be included in release
+# highlights or the UI to draw user attention.
+
+# impact:
+# An optional string that describes how the user's environment is
+# affected by a breaking change or known issue.
+
+# issues:
+# An optional array of strings that contain the issues that are
+# relevant to the PR.
+
+# pr:
+# An optional string that contains the pull request number.
+
+# subtype:
+# An optional string that applies only to breaking changes.
+# It can be one of:
+# - api
+# - behavioral
+# - configuration
+# - dependency
+# - subscription
+# - plugin
+# - security
+# - other
+
+pr: "18460"
+issues:
+- https://github.com/elastic/logstash/issues/123
+- https://github.com/elastic/logstash/issues/17998
+type: enhancement
+products:
+- product: logstash
+ target: 9.3.0
+title: Exposes batch size metrics for last 1, 5 and 15 minutes.
diff --git a/docs/release-notes/breaking-changes.md b/docs/release-notes/breaking-changes.md
index 6e53ee67edf..015c05c7e6e 100644
--- a/docs/release-notes/breaking-changes.md
+++ b/docs/release-notes/breaking-changes.md
@@ -15,6 +15,13 @@ Before you upgrade, carefully review the Logstash breaking changes and take the
% **Action**
Steps for mitigating deprecation impact.
% ::::
+:::{changelog} /releases/
+:subsections:
+:type: breaking-change
+:config: /changelog.yml
+:product: logstash
+:::
+
## 9.0.0 [logstash-900-breaking-changes]
diff --git a/docs/release-notes/deprecations.md b/docs/release-notes/deprecations.md
index 73dd404224d..71763c88684 100644
--- a/docs/release-notes/deprecations.md
+++ b/docs/release-notes/deprecations.md
@@ -17,6 +17,13 @@ While deprecations have no immediate impact, we strongly encourage you update yo
% **Action**
Steps for mitigating deprecation impact.
% ::::
+:::{changelog} /releases/
+:subsections:
+:type: deprecation
+:config: /changelog.yml
+:product: logstash
+:::
+
% ## 9.0.0 [logstash-900-deprecations]
% ::::{dropdown} Deprecation title
diff --git a/docs/release-notes/index.md b/docs/release-notes/index.md
index c00227aa224..8ec5baa430a 100644
--- a/docs/release-notes/index.md
+++ b/docs/release-notes/index.md
@@ -21,6 +21,16 @@ To check for security updates, go to [Security announcements for the Elastic sta
% ### Fixes [logstash-next-fixes]
% *
+:::{changelog} /releases/
+:subsections:
+:config: /changelog.yml
+:product: logstash
+:::
+
+## Old content
+
+Everything below here is the existing content
+
## 9.3.0 [logstash-9.3.0-release-notes]
### Features and enhancements [logstash-9.3.0-features-enhancements]
diff --git a/docs/release-notes/known-issues.md b/docs/release-notes/known-issues.md
index 9f183f61304..990c075a715 100644
--- a/docs/release-notes/known-issues.md
+++ b/docs/release-notes/known-issues.md
@@ -8,6 +8,13 @@ Known issues are significant defects or limitations that may impact your impleme
These issues are actively being worked on and will be addressed in a future release.
Review known issues to help you make informed decisions, such as upgrading to a new version.
+:::{changelog} /releases/
+:subsections:
+:type: known-issue
+:config: /changelog.yml
+:product: logstash
+:::
+
## 9.2.0 [logstash-ki-9.2.0]
**Logstash will not start if a Persistent Queue has been defined with a size greater than 2 GiB**
diff --git a/docs/releases/logstash-9.3.0.yaml b/docs/releases/logstash-9.3.0.yaml
new file mode 100644
index 00000000000..32be2555a2b
--- /dev/null
+++ b/docs/releases/logstash-9.3.0.yaml
@@ -0,0 +1,42 @@
+products:
+- product: logstash
+ target: 9.3.0
+ repo: logstash
+entries:
+- file:
+ name: 18265.yaml
+ checksum: ab23acf8567e6f7c32c2e6793fe01ec6f4246706
+ type: bug-fix
+ title: 'management: confirm server-side filtering 404s'
+ products:
+ - product: logstash
+ target: 9.3.0
+ description: fixes an issue with Central Management where a spurious 404 when looking up pipeline definitions could cause the running pipelines to shut down.
+ pr: "18265"
+ issues:
+ - https://github.com/elastic/logstash/issues/17980
+ - https://github.com/elastic/logstash/issues/18078
+- file:
+ name: 18377.yaml
+ checksum: d3891923af101b76f0ee0a08b8bd478162b8bd23
+ type: feature
+ title: Wait for status feature added to Logstash API
+ products:
+ - product: logstash
+ target: 9.3.0
+ description: We've added additional wait_for_status and timeout query parameters to the Logstash root endpoint `/`. When calling the endpoint with these parameters set, the call will return when either the Logstash status matches (or improves on) the given status, or the given timeout has expired.
+ pr: "18377"
+ issues:
+ - https://github.com/elastic/logstash/issues/17457
+- file:
+ name: 18460.yaml
+ checksum: 0791e71c711953b3c6316e14b3dfd2e5d9a8a832
+ type: enhancement
+ title: Exposes batch size metrics for last 1, 5 and 15 minutes.
+ products:
+ - product: logstash
+ target: 9.3.0
+ pr: "18460"
+ issues:
+ - https://github.com/elastic/logstash/issues/123
+ - https://github.com/elastic/logstash/issues/17998
diff --git a/docs/releases/logstash-output-elasticsearch-9.3.0.yaml b/docs/releases/logstash-output-elasticsearch-9.3.0.yaml
new file mode 100644
index 00000000000..e45db908e87
--- /dev/null
+++ b/docs/releases/logstash-output-elasticsearch-9.3.0.yaml
@@ -0,0 +1,29 @@
+products:
+- product: logstash
+ target: 9.3.0
+ repo: logstash-output-elasticsearch
+entries:
+- file:
+ name: 1228.yaml
+ checksum: 01a12f7123a1b3be32c15ec1836c7e6a536b2a5f
+ type: other
+ title: Add drop_error_types config option to not retry after certain error types
+ products:
+ - product: logstash
+ target: 9.3.0
+ areas:
+ - Elasticsearch Output
+ pr: https://github.com/logstash-plugins/logstash-output-elasticsearch/pull/1228
+ issues:
+ - https://github.com/logstash-plugins/logstash-output-elasticsearch/issues/1225
+- file:
+ name: 1232.yaml
+ checksum: 441c187a3367cf87d0575c48a52b941256ce2b95
+ type: other
+ title: Remove duplicated deprecation log entry
+ products:
+ - product: logstash
+ target: 9.3.0
+ areas:
+ - Elasticsearch Output
+ pr: https://github.com/logstash-plugins/logstash-output-elasticsearch/pull/1232