diff --git a/CONTAINER.md b/CONTAINER.md
index ea29c2f4f..3afe913b3 100644
--- a/CONTAINER.md
+++ b/CONTAINER.md
@@ -910,7 +910,7 @@ Images Comparison
Let's summarize the differences between both container images. Legend:
- :sparkle: is the recommended alternative
-- :orange_circle: added in the latest release (ejabberd 25.xx)
+- :orange_circle: added in the latest release (ejabberd 25.03)
- :high_brightness: added in the previous release (ejabberd 24.12)
- :low_brightness: added in the pre-previous release (ejabberd 24.10)
diff --git a/ejabberd.doap b/ejabberd.doap
index c17c89ca7..00e171905 100644
--- a/ejabberd.doap
+++ b/ejabberd.doap
@@ -770,7 +770,7 @@
0.4.0
24.02
complete
- , 0.4.0 since 25.xx
+ , 0.4.0 since 25.03
diff --git a/src/ejabberd.erl b/src/ejabberd.erl
index 89cbd229c..5b6fea3aa 100644
--- a/src/ejabberd.erl
+++ b/src/ejabberd.erl
@@ -42,7 +42,7 @@
-protocol({xep, 388, '0.4.0', '24.02', "complete", ""}).
-protocol({xep, 424, '0.4.0', '24.02', "complete", ""}).
-protocol({xep, 440, '0.4.0', '24.02', "complete", ""}).
--protocol({xep, 474, '0.4.0', '24.02', "complete", "0.4.0 since 25.xx"}).
+-protocol({xep, 474, '0.4.0', '24.02', "complete", "0.4.0 since 25.03"}).
-protocol({xep, 485, '0.2.0', '24.02', "complete", "mod_pubsub_serverinfo in ejabberd-contrib.git"}).
-export([start/0, stop/0, halt/0, start_app/1, start_app/2,
diff --git a/src/ejabberd_admin.erl b/src/ejabberd_admin.erl
index 9f2cc84b8..4e7dfe739 100644
--- a/src/ejabberd_admin.erl
+++ b/src/ejabberd_admin.erl
@@ -600,7 +600,7 @@ get_commands_spec() ->
#ejabberd_commands{name = mnesia_list_tables, tags = [mnesia],
desc = "List of Mnesia tables",
- note = "added in 25.xx",
+ note = "added in 25.03",
module = ?MODULE, function = mnesia_list_tables,
result = {tables, {list, {table, {tuple, [{name, atom},
{storage_type, binary},
@@ -618,7 +618,7 @@ get_commands_spec() ->
#ejabberd_commands{name = mnesia_table_change_storage, tags = [mnesia],
desc = "Change storage type of a Mnesia table",
- note = "added in 25.xx",
+ note = "added in 25.03",
longdesc = "Storage type can be: `ram_copies`, `disc_copies`, `disc_only_copies`, `remote_copy`.",
module = ?MODULE, function = mnesia_table_change_storage,
args = [{table, binary}, {storage_type, binary}],
diff --git a/src/ejabberd_options_doc.erl b/src/ejabberd_options_doc.erl
index 7c35f96fa..36bebcd5c 100644
--- a/src/ejabberd_options_doc.erl
+++ b/src/ejabberd_options_doc.erl
@@ -545,6 +545,7 @@ doc() ->
"and sophisticated setups. The default value is an empty list.")}},
{define_keyword,
#{value => "{NAME: Value}",
+ note => "added in 25.03",
desc =>
?T("Allows to define configuration "
"_`../configuration/file-format.md#macros-and-keywords|keywords`_. "),
@@ -560,6 +561,7 @@ doc() ->
"sql_username: \"prefix.@SQL_USERNAME@\""]}},
{define_macro,
#{value => "{NAME: Value}",
+ note => "improved in 25.03",
desc =>
?T("Allows to define configuration "
"_`../configuration/file-format.md#macros-and-keywords|macros`_. "),
diff --git a/src/mod_adhoc_api.erl b/src/mod_adhoc_api.erl
index 397f9be6c..d8a16b504 100644
--- a/src/mod_adhoc_api.erl
+++ b/src/mod_adhoc_api.erl
@@ -95,7 +95,7 @@ mod_doc() ->
"https://xmpp.org/extensions/xep-0050.html[XEP-0050: Ad-Hoc Commands]. "
"This module requires _`mod_adhoc`_ (to execute the commands), "
"and recommends _`mod_disco`_ (to discover the commands)."),
- note => "added in 25.xx",
+ note => "added in 25.03",
opts =>
[{default_version,
#{value => "integer() | string()",
diff --git a/src/mod_configure.erl b/src/mod_configure.erl
index 8e4c88405..81e7d5e7b 100644
--- a/src/mod_configure.erl
+++ b/src/mod_configure.erl
@@ -1592,7 +1592,7 @@ mod_doc() ->
opts =>
[{access,
#{value => ?T("AccessName"),
- note => "added in 25.xx",
+ note => "added in 25.03",
desc =>
?T("This option defines which access rule will be used to "
"control who is allowed to access the features provided by this module. "
diff --git a/src/mod_matrix_gw.erl b/src/mod_matrix_gw.erl
index 3088a40d4..3eeaa47dc 100644
--- a/src/mod_matrix_gw.erl
+++ b/src/mod_matrix_gw.erl
@@ -955,9 +955,10 @@ mod_options(Host) ->
mod_doc() ->
#{desc =>
- [?T("https://matrix.org/[Matrix] gateway. "
- "Erlang/OTP 25 or higher is required to use this module.")],
- note => "added in 24.02",
+ [?T("https://matrix.org/[Matrix] gateway. "),
+ ?T("Erlang/OTP 25 or higher is required to use this module."),
+ ?T("This module is available since ejabberd 24.02.")],
+ note => "improved in 25.03",
example =>
["listen:",
" -",
diff --git a/src/mod_muc.erl b/src/mod_muc.erl
index 42be73a93..ac87fec68 100644
--- a/src/mod_muc.erl
+++ b/src/mod_muc.erl
@@ -1766,7 +1766,7 @@ mod_doc() ->
"The default value is an empty string.")}},
{enable_hats,
#{value => "true | false",
- note => "improved in 25.xx",
+ note => "improved in 25.03",
desc =>
?T("Allow extended roles as defined in XEP-0317 Hats. "
"Check the _`../../tutorials/muc-hats.md|MUC Hats`_ tutorial. "
diff --git a/src/mod_muc_admin.erl b/src/mod_muc_admin.erl
index 59c5a0e93..1eadea684 100644
--- a/src/mod_muc_admin.erl
+++ b/src/mod_muc_admin.erl
@@ -196,7 +196,7 @@ get_commands_spec() ->
"Each subscriber can have one or more nodes. "
"In summary, `affiliations` is like `Type1=JID1;Type2=JID2` "
"and `subscribers` is like `JID1=Nick1=Node1A=Node1B=Node1C;JID2=Nick2=Node2`.",
- note = "modified in 25.xx",
+ note = "modified in 25.03",
module = ?MODULE, function = create_room_with_opts,
args_desc = ["Room name", "MUC service", "Server host", "List of options"],
args_example = ["room1", "conference.example.com", "localhost",
diff --git a/src/mod_muc_room.erl b/src/mod_muc_room.erl
index 81254ec91..64e7e0a2d 100644
--- a/src/mod_muc_room.erl
+++ b/src/mod_muc_room.erl
@@ -27,7 +27,7 @@
-author('alexey@process-one.net').
--protocol({xep, 317, '0.2.0', '25.xx', "complete", ""}).
+-protocol({xep, 317, '0.2.0', '21.12', "complete", "0.2.0 since 25.03"}).
-protocol({xep, 410, '1.1.0', '18.12', "complete", ""}).
-behaviour(p1_fsm).