diff --git a/content/editions/overview.md b/content/editions/overview.md
index 833ea4ae6..87192f11b 100644
--- a/content/editions/overview.md
+++ b/content/editions/overview.md
@@ -307,3 +307,32 @@ import "myproject/foo.proto";
While the generated code changes when you move from proto2 or proto3 to
editions, the wire format does not. You'll still be able to access proto2 and
proto3 data files or file streams using your editions-syntax proto definitions.
+
+### Grammar Changes {#syntax}
+
+There are some grammar changes in editions compared to proto2 and proto3.
+
+**Syntax description.** Instead of the `syntax` element, you use an `edition`
+element:
+
+```proto
+syntax = "proto2";
+syntax = "proto3";
+edition = "2028";
+```
+
+**Reserved names.** You no longer put field names and enum value names in
+quotation marks when reserving them:
+
+```proto
+reserved foo, bar;
+```
+
+**Group syntax.** Group syntax, available in proto2, is removed in editions. The
+special wire-format that groups used is still available by using `DELIMITED`
+message encoding.
+
+**Required label.** The `required` label, available only in proto2, is
+unavailable in editions. The underlying functionality is still available (but
+[discouraged](/programming-guides/required-considered-harmful))
+by using `features.field_presence=LEGACY_REQUIRED`.
diff --git a/content/reference/kotlin/kotlin-generated.md b/content/reference/kotlin/kotlin-generated.md
index a38e8a0fc..855542294 100644
--- a/content/reference/kotlin/kotlin-generated.md
+++ b/content/reference/kotlin/kotlin-generated.md
@@ -369,3 +369,61 @@ extend Foo {
Java generates the \"extension identifier\" `bar`, which is used to \"key\"
extension operations above.
+
+## Why Doesn't Protobuf Support Nullable Setters/Getters? {#nullable-setters-getters}
+
+We have heard feedback that some folks would like protobuf to support nullable
+getters/setters in their null-friendly language of choice (particularly Kotlin,
+C#, and Rust). While this does seem to be a helpful feature for folks using
+those languages, the design choice has tradeoffs which have led to the Protobuf
+team choosing not to implement them.
+
+The biggest reason not to have nullable fields is the intended behavior of
+default values specified in a `.proto` file. By design, calling a getter on an
+unset field will return the default value of that field.
+
+As an example, consider this `.proto` file:
+
+```proto
+message Msg { optional Child child = 1; }
+message Child { optional Grandchild grandchild = 1; }
+message Grandchild { optional int32 foo = 1 [default = 72]; }
+```
+
+and corresponding Kotlin getters:
+
+```kotlin
+// With our API where getters are always non-nullable:
+msg.child.grandchild.foo == 72
+
+// With nullable submessages the ?. operator fails to get the default value:
+msg?.child?.grandchild?.foo == null
+
+// Or verbosely duplicating the default value at the usage site:
+(msg?.child?.grandchild?.foo ?: 72)
+```
+
+If a nullable getter existed, it would necessarily ignore the user-specified
+defaults (to return null instead) which would lead to surprising and
+inconsistent behavior. If users of nullable getters want to access the default
+value of the field, they would have to write their own custom handling to use
+the default if null is returned, which removes the supposed benefit of
+cleaner/easier code with null getters.
+
+Similarly, we do not provide nullable setters as the behavior would be
+unintuitive. Performing a set and then get would not always give the same value
+back, and calling a set would only sometimes affect the has-bit for the field.
+
+Note that message-typed fields are always explicit presence fields (with
+hazzers). Proto3 defaults to scalar fields having implicit presence (without
+hazzers) unless they are explicitly marked `optional`, while Proto2 does not
+support implicit presence. With
+[Editions](/editions/features#field_presence), explicit
+presence is the default behavior unless an implicit presence feature is used.
+With the forward expectation that almost all fields will have explicit presence,
+the ergonomic concerns that come with nullable getters are expected to be more
+of a concern than they may have been for Proto3 users.
+
+Due to these issues, nullable setters/getters would radically change the way
+default values can be used. While we understand the possible utility, we have
+decided it’s not worth the inconsistencies and difficulty it introduces.
diff --git a/content/support/version-support.md b/content/support/version-support.md
index 26449c5db..0c2d53f64 100644
--- a/content/support/version-support.md
+++ b/content/support/version-support.md
@@ -141,7 +141,12 @@ This table provides specific dates for support duration.
| 5.27.x |
- 23 May 2024 |
+ 23 May 2024 |
+ 28 Aug 2024 |
+
+
+ | 5.28.x |
+ 28 Aug 2024 |
TBD |
@@ -162,6 +167,7 @@ C++ will target making major version bumps annually in Q1 of each year.
24Q2 |
24Q3 |
24Q4 |
+ 25Q1 |
| 21.x |
@@ -174,6 +180,7 @@ C++ will target making major version bumps annually in Q1 of each year.
|
|
|
+ |
| 22.x |
@@ -186,6 +193,7 @@ C++ will target making major version bumps annually in Q1 of each year.
|
|
|
+ |
| 23.x |
@@ -198,6 +206,7 @@ C++ will target making major version bumps annually in Q1 of each year.
|
|
|
+ |
| 24.x |
@@ -210,6 +219,7 @@ C++ will target making major version bumps annually in Q1 of each year.
|
|
|
+ |
| 25.x |
@@ -222,6 +232,7 @@ C++ will target making major version bumps annually in Q1 of each year.
PS |
PS |
PS |
+ SE |
| 26.x |
@@ -234,6 +245,7 @@ C++ will target making major version bumps annually in Q1 of each year.
|
|
|
+ |
| 27.x |
@@ -244,8 +256,22 @@ C++ will target making major version bumps annually in Q1 of each year.
|
|
IR |
- PS |
- PS |
+ |
+
+ | |
+
+
+ | 28.x |
+ 5.28.x |
+ |
+ |
+ |
+ |
+ |
+ |
+ IR |
+ |
+ |
|
@@ -255,19 +281,21 @@ C++ will target making major version bumps annually in Q1 of each year.
|
- | 28.x |
- |
+ 29.x |
+ 5.29.x |
|
|
|
|
|
|
- IR |
+ |
+ IR |
+ PS |
- | 29.x |
- |
+ 30.x |
+ 6.30.x |
|
|
|
@@ -275,7 +303,8 @@ C++ will target making major version bumps annually in Q1 of each year.
|
|
|
- IR |
+ |
+ IR |
@@ -347,7 +376,12 @@ This table provides specific dates for support duration.
| 3.27.x |
- 23 May 2024 |
+ 23 May 2024 |
+ 28 Aug 2024 |
+
+
+ | 3.28.x |
+ 28 Aug 2024 |
TBD |
@@ -366,6 +400,7 @@ This table graphically shows support durations.
24Q2 |
24Q3 |
24Q4 |
+ 25Q1 |
| 22.x |
@@ -378,6 +413,7 @@ This table graphically shows support durations.
|
|
|
+ |
| 23.x |
@@ -390,6 +426,7 @@ This table graphically shows support durations.
|
|
|
+ |
| 24.x |
@@ -402,6 +439,7 @@ This table graphically shows support durations.
|
|
|
+ |
| 25.x |
@@ -414,6 +452,7 @@ This table graphically shows support durations.
|
|
|
+ |
| 26.x |
@@ -426,6 +465,7 @@ This table graphically shows support durations.
|
|
|
+ |
| 27.x |
@@ -436,8 +476,22 @@ This table graphically shows support durations.
|
|
IR |
- PS |
- PS |
+ |
+ |
+ |
+
+
+ | 28.x |
+ 3.28.x |
+ |
+ |
+ |
+ |
+ |
+ |
+ IR |
+ |
+ |
|
@@ -447,7 +501,7 @@ This table graphically shows support durations.
|
- | 28.x |
+ 29.x |
|
|
|
@@ -455,11 +509,12 @@ This table graphically shows support durations.
|
|
|
- IR |
- |
+ |
+ IR |
+ |
- | 29.x |
+ 30.x |
|
|
|
@@ -468,7 +523,8 @@ This table graphically shows support durations.
|
|
|
- IR |
+ |
+ IR |
@@ -555,12 +611,17 @@ This table provides specific dates for support duration.
| 4.27.x |
- 23 May 2024 |
+ 23 May 2024 |
+ 28 Aug 2024 |
+
+
+ | 4.28.x |
+ 28 Aug 2024 |
TBD |
-**NOTE:** the support window for the Java 3.25.x release will be 24 months
+**NOTE:** The support window for the Java 3.25.x release will be 24 months
rather than the typical 12 months for the final release in a major version line.
Future major version updates (5.x+) will adopt an improved
["rolling compatibility window"](/support/cross-version-runtime-guarantee/#major)
@@ -582,7 +643,6 @@ Java will target making major version bumps annually in Q1 of each year.
24Q3 |
24Q4 |
25Q1 |
- 25Q2 |
| 22.x |
@@ -595,7 +655,6 @@ Java will target making major version bumps annually in Q1 of each year.
|
|
|
- |
| 23.x |
@@ -608,20 +667,18 @@ Java will target making major version bumps annually in Q1 of each year.
|
|
|
- |
| 24.x |
3.24.x |
|
IR |
-
- |
- |
- |
+ | |
+ |
+ |
+ |
|
|
- |
| 25.x |
@@ -635,7 +692,6 @@ Java will target making major version bumps annually in Q1 of each year.
PS |
PS |
PS |
- PS |
| 26.x |
@@ -648,7 +704,6 @@ Java will target making major version bumps annually in Q1 of each year.
|
|
|
- |
| 27.x |
@@ -658,17 +713,9 @@ Java will target making major version bumps annually in Q1 of each year.
|
|
IR |
- PS |
- PS |
- PS |
- PS |
-
-
-
- The cells below are projections of future releases, but are not guarantees
- that those releases will happen, or that they will happen on that
- schedule.
- |
+ |
+ |
+ |
| 28.x |
@@ -681,7 +728,13 @@ Java will target making major version bumps annually in Q1 of each year.
IR |
|
|
- |
+
+
+
+ The cells below are projections of future releases, but are not guarantees
+ that those releases will happen, or that they will happen on that
+ schedule.
+ |
| 29.x |
@@ -694,11 +747,10 @@ Java will target making major version bumps annually in Q1 of each year.
|
IR |
|
- |
| 30.x |
- 5.30.x |
+ 4.30.x |
|
|
|
@@ -707,7 +759,6 @@ Java will target making major version bumps annually in Q1 of each year.
|
|
IR |
- |
@@ -779,7 +830,12 @@ This table provides specific dates for support duration.
| 3.27.x |
- 23 May 2024 |
+ 23 May 2024 |
+ 28 Aug 2024 |
+
+
+ | 3.28.x |
+ 28 Aug 2024 |
TBD |
@@ -798,6 +854,7 @@ This table graphically shows support durations.
24Q2 |
24Q3 |
24Q4 |
+ 25Q1 |
| 22.x |
@@ -810,6 +867,7 @@ This table graphically shows support durations.
|
|
|
+ |
| 23.x |
@@ -822,6 +880,7 @@ This table graphically shows support durations.
|
|
|
+ |
| 24.x |
@@ -834,6 +893,7 @@ This table graphically shows support durations.
|
|
|
+ |
| 25.x |
@@ -846,6 +906,7 @@ This table graphically shows support durations.
|
|
|
+ |
| 26.x |
@@ -858,6 +919,7 @@ This table graphically shows support durations.
|
|
|
+ |
| 27.x |
@@ -868,8 +930,22 @@ This table graphically shows support durations.
|
|
IR |
- PS |
- PS |
+ |
+ |
+ |
+
+
+ | 28.x |
+ 3.28.x |
+ |
+ |
+ |
+ |
+ |
+ |
+ IR |
+ |
+ |
|
@@ -879,20 +955,21 @@ This table graphically shows support durations.
|
- | 28.x |
- |
+ 29.x |
+ 3.29.x |
|
|
|
|
|
|
- IR |
- |
+ |
+ IR |
+ PS |
- | 29.x |
- |
+ 30.x |
+ 4.30.x |
|
|
|
@@ -900,7 +977,8 @@ This table graphically shows support durations.
|
|
|
- IR |
+ |
+ IR |
@@ -964,7 +1042,12 @@ This table provides specific dates for support duration.
| 4.27.x |
- 23 May 2024 |
+ 23 May 2024 |
+ 28 Aug 2024 |
+
+
+ | 4.28.x |
+ 28 Aug 2024 |
TBD |
@@ -984,7 +1067,6 @@ This table graphically shows support durations.
24Q3 |
24Q4 |
25Q1 |
- 25Q2 |
| 22.x |
@@ -998,7 +1080,6 @@ This table graphically shows support durations.
|
|
|
- |
| 23.x |
@@ -1012,7 +1093,6 @@ This table graphically shows support durations.
|
|
|
- |
| 24.x |
@@ -1026,7 +1106,6 @@ This table graphically shows support durations.
|
|
|
- |
| 25.x |
@@ -1039,8 +1118,7 @@ This table graphically shows support durations.
PS |
PS |
PS |
- PS |
- SE |
+ SE |
| 26.x |
@@ -1054,7 +1132,6 @@ This table graphically shows support durations.
|
|
|
- |
| 27.x |
@@ -1065,11 +1142,22 @@ This table graphically shows support durations.
|
|
IR |
- PS |
- PS |
- PS |
- PS |
+ |
+ |
+ |
+
+ | 28.x |
+ 4.28.x |
+ |
+ |
+ |
+ |
+ |
+ |
+ IR |
+ |
+ |
|
The cells below are projections of future releases, but are not guarantees
@@ -1077,8 +1165,9 @@ This table graphically shows support durations.
schedule.
|
+
- | 28.x |
+ 29.x |
|
|
|
@@ -1086,13 +1175,12 @@ This table graphically shows support durations.
|
|
|
- IR |
- |
+ |
+ IR |
|
- |
- | 29.x |
+ 30.x |
|
|
|
@@ -1101,9 +1189,8 @@ This table graphically shows support durations.
|
|
|
- IR |
- |
- |
+ |
+ IR |
@@ -1148,16 +1235,6 @@ This table provides specific dates for support duration.
Initial Release |
Public Support Until |
-
- | 3.20.x |
- 25 Mar 2022 |
- 30 Jun 2023 |
-
-
- | 4.21.x |
- 25 May 2022 |
- 16 Feb 2023 |
-
| 4.22.x |
16 Feb 2023 |
@@ -1185,7 +1262,12 @@ This table provides specific dates for support duration.
| 5.27.x |
- 23 May 2024 |
+ 23 May 2024 |
+ 28 Aug 2024 |
+
+
+ | 5.28.x |
+ 28 Aug 2024 |
TBD |
@@ -1196,8 +1278,6 @@ This table graphically shows support durations.
| protoc |
Python |
- 22Q3 |
- 22Q4 |
23Q1 |
23Q2 |
23Q3 |
@@ -1207,45 +1287,10 @@ This table graphically shows support durations.
24Q3 |
24Q4 |
25Q1 |
- 25Q2 |
-
-
- | 20.x |
- 3.20.x |
- PS |
- PS |
- PS |
- SE |
- |
- |
- |
- |
- |
- |
- |
- |
-
-
- | 21.x |
- 4.21.x |
- PS |
- PS |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
| 22.x |
4.22.x |
- |
- |
IR |
|
|
@@ -1255,13 +1300,10 @@ This table graphically shows support durations.
|
|
|
- |
| 23.x |
4.23.x |
- |
- |
|
IR |
|
@@ -1271,13 +1313,10 @@ This table graphically shows support durations.
|
|
|
- |
| 24.x |
4.24.x |
- |
- |
|
|
IR |
@@ -1287,13 +1326,10 @@ This table graphically shows support durations.
|
|
|
- |
| 25.x |
4.25.x |
- |
- |
|
|
|
@@ -1302,14 +1338,11 @@ This table graphically shows support durations.
PS |
PS |
PS |
- PS |
- SE |
+ SE |
| 26.x |
5.26.x |
- |
- |
|
|
|
@@ -1319,36 +1352,23 @@ This table graphically shows support durations.
|
|
|
- |
| 27.x |
5.27.x |
- |
- |
|
|
|
|
|
IR |
- PS |
- PS |
- PS |
- PS |
-
-
-
- The cells below are projections of future releases, but are not guarantees
- that those releases will happen, or that they will happen on that
- schedule.
- |
+ |
+ |
+ |
| 28.x |
- |
- |
- |
+ 5.28.x |
|
|
|
@@ -1358,13 +1378,17 @@ This table graphically shows support durations.
IR |
|
|
- |
+
+
+
+ The cells below are projections of future releases, but are not guarantees
+ that those releases will happen, or that they will happen on that
+ schedule.
+ |
| 29.x |
- |
- |
- |
+ 5.29.x |
|
|
|
@@ -1373,8 +1397,20 @@ This table graphically shows support durations.
|
|
IR |
- |
- |
+ PS |
+
+
+ | 30.x |
+ 6.30.x |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ IR |
@@ -1451,7 +1487,12 @@ This table provides specific dates for support duration.
| 4.27.x |
- 23 May 2024 |
+ 23 May 2024 |
+ 28 Aug 2024 |
+
+
+ | 4.28.x |
+ 28 Aug 2024 |
TBD |
@@ -1471,7 +1512,6 @@ This table graphically shows support durations.
24Q3 |
24Q4 |
25Q1 |
- 25Q2 |
| 22.x |
@@ -1485,7 +1525,6 @@ This table graphically shows support durations.
|
|
|
- |
| 23.x |
@@ -1499,7 +1538,6 @@ This table graphically shows support durations.
|
|
|
- |
| 24.x |
@@ -1513,7 +1551,6 @@ This table graphically shows support durations.
|
|
|
- |
| 25.x |
@@ -1526,8 +1563,7 @@ This table graphically shows support durations.
PS |
PS |
PS |
- PS |
- SE |
+ SE |
| 26.x |
@@ -1541,7 +1577,6 @@ This table graphically shows support durations.
|
|
|
- |
| 27.x |
@@ -1552,20 +1587,32 @@ This table graphically shows support durations.
|
|
IR |
- PS |
- PS |
- PS |
- PS |
+ |
+ |
+ |
- |
+ | 28.x |
+ 4.28.x |
+ |
+ |
+ |
+ |
+ |
+ |
+ IR |
+ |
+ |
+
+
+
The cells below are projections of future releases, but are not guarantees
that those releases will happen, or that they will happen on that
schedule.
|
- | 28.x |
+ 29.x |
|
|
|
@@ -1573,13 +1620,12 @@ This table graphically shows support durations.
|
|
|
- IR |
- |
+ |
+ IR |
|
- |
- | 29.x |
+ 30.x |
|
|
|
@@ -1588,9 +1634,8 @@ This table graphically shows support durations.
|
|
|
- IR |
- |
- |
+ |
+ IR |