diff --git a/.assets/timeline-gantt.png b/.assets/timeline-gantt.png
index 55ddbd8..365c76b 100644
Binary files a/.assets/timeline-gantt.png and b/.assets/timeline-gantt.png differ
diff --git a/CALENDAR.md b/CALENDAR.md
index a1e1123..5172bf1 100644
--- a/CALENDAR.md
+++ b/CALENDAR.md
@@ -8,6 +8,20 @@ Full untruncated version index.
| Version | SemVer | Cutoff | Publish | End of Life | State |
|---------|--------|--------|---------|-------------|-------|
+| **stable2603** | 1.22.0 | 2026-02-07 | 2026-03-26 | 2027-03-26 | Planned |
+| stable2603-1 | 1.22.1 | 2026-04-27 | 2026-04-30 | | Planned |
+| stable2603-2 | 1.22.2 | 2026-05-25 | 2026-05-28 | | Planned |
+| stable2603-3 | 1.22.3 | 2026-06-22 | 2026-06-25 | | Planned |
+| stable2603-4 | 1.22.4 | 2026-07-27 | 2026-07-30 | | Planned |
+| stable2603-5 | 1.22.5 | 2026-08-24 | 2026-08-27 | | Planned |
+| stable2603-6 | 1.22.6 | 2026-09-28 | 2026-10-01 | | Planned |
+| stable2603-7 | 1.22.7 | 2026-10-26 | 2026-10-29 | | Planned |
+| stable2603-8 | 1.22.8 | 2026-11-23 | 2026-11-26 | | Planned |
+| stable2603-9 | 1.22.9 | 2026-12-28 | 2026-12-31 | | Planned |
+| stable2603-10 | 1.22.10 | 2027-01-25 | 2027-01-28 | | Planned |
+| stable2603-11 | 1.22.11 | 2027-02-22 | 2027-02-25 | | Planned |
+| stable2603-12 | 1.22.12 | 2027-03-22 | 2027-03-25 | | Planned |
+| stable2603-13 | 1.22.13 | 2027-04-26 | 2027-04-29 | | Planned |
| **stable2512** | 1.21.0 | 2025-11-17 | 2025-12-22 | 2027-01-01 | [Released](https://github.com/paritytech/polkadot-sdk/releases/tag/polkadot-stable2512) |
| stable2512-1 | 1.21.1 | 2026-01-19 | 2026-01-22 | | Planned |
| stable2512-2 | 1.21.2 | 2026-02-16 | 2026-02-19 | | Planned |
diff --git a/README.md b/README.md
index f3e8d01..006edb2 100644
--- a/README.md
+++ b/README.md
@@ -20,6 +20,10 @@ Planned and historic release dates:
| Version | SemVer | Cutoff | Publish | End of Life | State |
|---------|--------|--------|---------|-------------|-------|
+| **stable2603** | 1.22.0 | 2026-02-07 | 2026-03-26 | 2027-03-26 | Planned |
+| stable2603-1 | 1.22.1 | 2026-04-27 | 2026-04-30 | | Planned |
+| stable2603-2 | 1.22.2 | 2026-05-25 | 2026-05-28 | | Planned |
+| [11 more planned](CALENDAR.md) | | | | |
| **stable2512** | 1.21.0 | 2025-11-17 | 2025-12-22 | 2027-01-01 | [Released](https://github.com/paritytech/polkadot-sdk/releases/tag/polkadot-stable2512) |
| stable2512-1 | 1.21.1 | 2026-01-19 | 2026-01-22 | | Planned |
| stable2512-2 | 1.21.2 | 2026-02-16 | 2026-02-19 | | Planned |
diff --git a/badges/polkadot-sdk-latest.svg b/badges/polkadot-sdk-latest.svg
index 78826ca..87aaf64 100644
--- a/badges/polkadot-sdk-latest.svg
+++ b/badges/polkadot-sdk-latest.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/badges/polkadot-sdk-next.svg b/badges/polkadot-sdk-next.svg
index 961035d..e18b65c 100644
--- a/badges/polkadot-sdk-next.svg
+++ b/badges/polkadot-sdk-next.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/releases-v1.ics b/releases-v1.ics
index cd638a7..6b22665 100644
--- a/releases-v1.ics
+++ b/releases-v1.ics
@@ -1434,4 +1434,207 @@ DTEND;VALUE=DATE:20261225
DESCRIPTION:Release of stable2512-12 (planned)\n\nFull Calendar: https://g
ithub.com/paritytech/release-registry/blob/main/CALENDAR.md#calendar
END:VEVENT
+BEGIN:VEVENT
+SUMMARY:stable2603 Cutoff
+DTSTART;VALUE=DATE:20260207
+DTEND;VALUE=DATE:20260208
+DESCRIPTION:Cutoff for stable2603 (planned)\n\nFull Calendar: https://gith
+ ub.com/paritytech/release-registry/blob/main/CALENDAR.md#calendar
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:stable2603 Release
+DTSTART;VALUE=DATE:20260326
+DTEND;VALUE=DATE:20260327
+DESCRIPTION:Release of stable2603 (planned)\n\nFull Calendar: https://gith
+ ub.com/paritytech/release-registry/blob/main/CALENDAR.md#calendar
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:stable2603 End of Life
+DTSTART;VALUE=DATE:20270326
+DTEND;VALUE=DATE:20270327
+DESCRIPTION:End of Life for stable2603\n\nFull Calendar: https://github.co
+ m/paritytech/release-registry/blob/main/CALENDAR.md#calendar
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:stable2603-1 Cutoff
+DTSTART;VALUE=DATE:20260427
+DTEND;VALUE=DATE:20260428
+DESCRIPTION:Cutoff for stable2603-1 (planned)\n\nFull Calendar: https://gi
+ thub.com/paritytech/release-registry/blob/main/CALENDAR.md#calendar
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:stable2603-1 Release
+DTSTART;VALUE=DATE:20260430
+DTEND;VALUE=DATE:20260501
+DESCRIPTION:Release of stable2603-1 (planned)\n\nFull Calendar: https://gi
+ thub.com/paritytech/release-registry/blob/main/CALENDAR.md#calendar
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:stable2603-2 Cutoff
+DTSTART;VALUE=DATE:20260525
+DTEND;VALUE=DATE:20260526
+DESCRIPTION:Cutoff for stable2603-2 (planned)\n\nFull Calendar: https://gi
+ thub.com/paritytech/release-registry/blob/main/CALENDAR.md#calendar
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:stable2603-2 Release
+DTSTART;VALUE=DATE:20260528
+DTEND;VALUE=DATE:20260529
+DESCRIPTION:Release of stable2603-2 (planned)\n\nFull Calendar: https://gi
+ thub.com/paritytech/release-registry/blob/main/CALENDAR.md#calendar
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:stable2603-3 Cutoff
+DTSTART;VALUE=DATE:20260622
+DTEND;VALUE=DATE:20260623
+DESCRIPTION:Cutoff for stable2603-3 (planned)\n\nFull Calendar: https://gi
+ thub.com/paritytech/release-registry/blob/main/CALENDAR.md#calendar
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:stable2603-3 Release
+DTSTART;VALUE=DATE:20260625
+DTEND;VALUE=DATE:20260626
+DESCRIPTION:Release of stable2603-3 (planned)\n\nFull Calendar: https://gi
+ thub.com/paritytech/release-registry/blob/main/CALENDAR.md#calendar
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:stable2603-4 Cutoff
+DTSTART;VALUE=DATE:20260727
+DTEND;VALUE=DATE:20260728
+DESCRIPTION:Cutoff for stable2603-4 (planned)\n\nFull Calendar: https://gi
+ thub.com/paritytech/release-registry/blob/main/CALENDAR.md#calendar
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:stable2603-4 Release
+DTSTART;VALUE=DATE:20260730
+DTEND;VALUE=DATE:20260731
+DESCRIPTION:Release of stable2603-4 (planned)\n\nFull Calendar: https://gi
+ thub.com/paritytech/release-registry/blob/main/CALENDAR.md#calendar
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:stable2603-5 Cutoff
+DTSTART;VALUE=DATE:20260824
+DTEND;VALUE=DATE:20260825
+DESCRIPTION:Cutoff for stable2603-5 (planned)\n\nFull Calendar: https://gi
+ thub.com/paritytech/release-registry/blob/main/CALENDAR.md#calendar
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:stable2603-5 Release
+DTSTART;VALUE=DATE:20260827
+DTEND;VALUE=DATE:20260828
+DESCRIPTION:Release of stable2603-5 (planned)\n\nFull Calendar: https://gi
+ thub.com/paritytech/release-registry/blob/main/CALENDAR.md#calendar
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:stable2603-6 Cutoff
+DTSTART;VALUE=DATE:20260928
+DTEND;VALUE=DATE:20260929
+DESCRIPTION:Cutoff for stable2603-6 (planned)\n\nFull Calendar: https://gi
+ thub.com/paritytech/release-registry/blob/main/CALENDAR.md#calendar
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:stable2603-6 Release
+DTSTART;VALUE=DATE:20261001
+DTEND;VALUE=DATE:20261002
+DESCRIPTION:Release of stable2603-6 (planned)\n\nFull Calendar: https://gi
+ thub.com/paritytech/release-registry/blob/main/CALENDAR.md#calendar
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:stable2603-7 Cutoff
+DTSTART;VALUE=DATE:20261026
+DTEND;VALUE=DATE:20261027
+DESCRIPTION:Cutoff for stable2603-7 (planned)\n\nFull Calendar: https://gi
+ thub.com/paritytech/release-registry/blob/main/CALENDAR.md#calendar
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:stable2603-7 Release
+DTSTART;VALUE=DATE:20261029
+DTEND;VALUE=DATE:20261030
+DESCRIPTION:Release of stable2603-7 (planned)\n\nFull Calendar: https://gi
+ thub.com/paritytech/release-registry/blob/main/CALENDAR.md#calendar
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:stable2603-8 Cutoff
+DTSTART;VALUE=DATE:20261123
+DTEND;VALUE=DATE:20261124
+DESCRIPTION:Cutoff for stable2603-8 (planned)\n\nFull Calendar: https://gi
+ thub.com/paritytech/release-registry/blob/main/CALENDAR.md#calendar
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:stable2603-8 Release
+DTSTART;VALUE=DATE:20261126
+DTEND;VALUE=DATE:20261127
+DESCRIPTION:Release of stable2603-8 (planned)\n\nFull Calendar: https://gi
+ thub.com/paritytech/release-registry/blob/main/CALENDAR.md#calendar
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:stable2603-9 Cutoff
+DTSTART;VALUE=DATE:20261228
+DTEND;VALUE=DATE:20261229
+DESCRIPTION:Cutoff for stable2603-9 (planned)\n\nFull Calendar: https://gi
+ thub.com/paritytech/release-registry/blob/main/CALENDAR.md#calendar
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:stable2603-9 Release
+DTSTART;VALUE=DATE:20261231
+DTEND;VALUE=DATE:20270101
+DESCRIPTION:Release of stable2603-9 (planned)\n\nFull Calendar: https://gi
+ thub.com/paritytech/release-registry/blob/main/CALENDAR.md#calendar
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:stable2603-10 Cutoff
+DTSTART;VALUE=DATE:20270125
+DTEND;VALUE=DATE:20270126
+DESCRIPTION:Cutoff for stable2603-10 (planned)\n\nFull Calendar: https://g
+ ithub.com/paritytech/release-registry/blob/main/CALENDAR.md#calendar
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:stable2603-10 Release
+DTSTART;VALUE=DATE:20270128
+DTEND;VALUE=DATE:20270129
+DESCRIPTION:Release of stable2603-10 (planned)\n\nFull Calendar: https://g
+ ithub.com/paritytech/release-registry/blob/main/CALENDAR.md#calendar
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:stable2603-11 Cutoff
+DTSTART;VALUE=DATE:20270222
+DTEND;VALUE=DATE:20270223
+DESCRIPTION:Cutoff for stable2603-11 (planned)\n\nFull Calendar: https://g
+ ithub.com/paritytech/release-registry/blob/main/CALENDAR.md#calendar
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:stable2603-11 Release
+DTSTART;VALUE=DATE:20270225
+DTEND;VALUE=DATE:20270226
+DESCRIPTION:Release of stable2603-11 (planned)\n\nFull Calendar: https://g
+ ithub.com/paritytech/release-registry/blob/main/CALENDAR.md#calendar
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:stable2603-12 Cutoff
+DTSTART;VALUE=DATE:20270322
+DTEND;VALUE=DATE:20270323
+DESCRIPTION:Cutoff for stable2603-12 (planned)\n\nFull Calendar: https://g
+ ithub.com/paritytech/release-registry/blob/main/CALENDAR.md#calendar
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:stable2603-12 Release
+DTSTART;VALUE=DATE:20270325
+DTEND;VALUE=DATE:20270326
+DESCRIPTION:Release of stable2603-12 (planned)\n\nFull Calendar: https://g
+ ithub.com/paritytech/release-registry/blob/main/CALENDAR.md#calendar
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:stable2603-13 Cutoff
+DTSTART;VALUE=DATE:20270426
+DTEND;VALUE=DATE:20270427
+DESCRIPTION:Cutoff for stable2603-13 (planned)\n\nFull Calendar: https://g
+ ithub.com/paritytech/release-registry/blob/main/CALENDAR.md#calendar
+END:VEVENT
+BEGIN:VEVENT
+SUMMARY:stable2603-13 Release
+DTSTART;VALUE=DATE:20270429
+DTEND;VALUE=DATE:20270430
+DESCRIPTION:Release of stable2603-13 (planned)\n\nFull Calendar: https://g
+ ithub.com/paritytech/release-registry/blob/main/CALENDAR.md#calendar
+END:VEVENT
END:VCALENDAR
diff --git a/releases-v1.json b/releases-v1.json
index 8eb429c..9c050e3 100644
--- a/releases-v1.json
+++ b/releases-v1.json
@@ -1,7 +1,7 @@
{
"Polkadot SDK": {
"recommended": {
- "release": "stable2503"
+ "release": "stable2512"
},
"releases": [
{
@@ -1196,6 +1196,165 @@
"semver": "1.21.12"
}
]
+ },
+ {
+ "name": "stable2603",
+ "semver": "1.22.0",
+ "cutoff": {
+ "estimated": "2026-02-07"
+ },
+ "publish": {
+ "estimated": "2026-03-26"
+ },
+ "state": "planned",
+ "endOfLife": {
+ "estimated": "2027-03-26"
+ },
+ "patches": [
+ {
+ "name": "stable2603-1",
+ "cutoff": {
+ "estimated": "2026-04-27"
+ },
+ "publish": {
+ "estimated": "2026-04-30"
+ },
+ "state": "planned",
+ "semver": "1.22.1"
+ },
+ {
+ "name": "stable2603-2",
+ "cutoff": {
+ "estimated": "2026-05-25"
+ },
+ "publish": {
+ "estimated": "2026-05-28"
+ },
+ "state": "planned",
+ "semver": "1.22.2"
+ },
+ {
+ "name": "stable2603-3",
+ "cutoff": {
+ "estimated": "2026-06-22"
+ },
+ "publish": {
+ "estimated": "2026-06-25"
+ },
+ "state": "planned",
+ "semver": "1.22.3"
+ },
+ {
+ "name": "stable2603-4",
+ "cutoff": {
+ "estimated": "2026-07-27"
+ },
+ "publish": {
+ "estimated": "2026-07-30"
+ },
+ "state": "planned",
+ "semver": "1.22.4"
+ },
+ {
+ "name": "stable2603-5",
+ "cutoff": {
+ "estimated": "2026-08-24"
+ },
+ "publish": {
+ "estimated": "2026-08-27"
+ },
+ "state": "planned",
+ "semver": "1.22.5"
+ },
+ {
+ "name": "stable2603-6",
+ "cutoff": {
+ "estimated": "2026-09-28"
+ },
+ "publish": {
+ "estimated": "2026-10-01"
+ },
+ "state": "planned",
+ "semver": "1.22.6"
+ },
+ {
+ "name": "stable2603-7",
+ "cutoff": {
+ "estimated": "2026-10-26"
+ },
+ "publish": {
+ "estimated": "2026-10-29"
+ },
+ "state": "planned",
+ "semver": "1.22.7"
+ },
+ {
+ "name": "stable2603-8",
+ "cutoff": {
+ "estimated": "2026-11-23"
+ },
+ "publish": {
+ "estimated": "2026-11-26"
+ },
+ "state": "planned",
+ "semver": "1.22.8"
+ },
+ {
+ "name": "stable2603-9",
+ "cutoff": {
+ "estimated": "2026-12-28"
+ },
+ "publish": {
+ "estimated": "2026-12-31"
+ },
+ "state": "planned",
+ "semver": "1.22.9"
+ },
+ {
+ "name": "stable2603-10",
+ "cutoff": {
+ "estimated": "2027-01-25"
+ },
+ "publish": {
+ "estimated": "2027-01-28"
+ },
+ "state": "planned",
+ "semver": "1.22.10"
+ },
+ {
+ "name": "stable2603-11",
+ "cutoff": {
+ "estimated": "2027-02-22"
+ },
+ "publish": {
+ "estimated": "2027-02-25"
+ },
+ "state": "planned",
+ "semver": "1.22.11"
+ },
+ {
+ "name": "stable2603-12",
+ "cutoff": {
+ "estimated": "2027-03-22"
+ },
+ "publish": {
+ "estimated": "2027-03-25"
+ },
+ "state": "planned",
+ "semver": "1.22.12"
+ },
+ {
+ "name": "stable2603-13",
+ "cutoff": {
+ "estimated": "2027-04-26"
+ },
+ "publish": {
+ "estimated": "2027-04-29"
+ },
+ "state": "planned",
+ "semver": "1.22.13"
+ }
+ ]
}
],
"changelog": "https://github.com/paritytech/polkadot-sdk/releases/tag/$TAG"
diff --git a/releases-v1.schema.json b/releases-v1.schema.json
index eaa2d36..2e82f56 100644
--- a/releases-v1.schema.json
+++ b/releases-v1.schema.json
@@ -22,7 +22,7 @@
"properties": {
"release": {
"type": "string",
- "pattern": "^stable2[45][01][0-9]$",
+ "pattern": "^stable2[456][01][0-9]$",
"description": "The recommended release to use"
},
"patch": {
@@ -61,7 +61,7 @@
"properties": {
"name": {
"type": "string",
- "pattern": "^stable2[45][01][0-9]$",
+ "pattern": "^stable2[456][01][0-9]$",
"description": "The name of the release"
},
"semver": {
@@ -109,7 +109,7 @@
"properties": {
"name": {
"type": "string",
- "pattern": "^stable2[45][01][0-9]-([1-9][0-9]*)$"
+ "pattern": "^stable2[456][01][0-9]-([1-9][0-9]*)$"
},
"semver": {
"type": "string",