blob: 8c2bd54fc753b2bb55f063a46d16f0e216a40195 [file] [log] [blame] [view]
AndroidX Core Team2e416b22020-12-03 22:58:07 +00001# Versioning
2
3[TOC]
4
AndroidX Core Team21ccf652022-04-01 14:53:07 +00005This page covers Jetpack's usage of Semantic Versioning and pre-release cycles,
6including the expectations at each cycle and criteria for moving to the next
7cycle or SemVer revision.
8
AndroidX Core Team5fa61982023-01-13 10:43:41 -05009## Semantic versioning and binary compatibility {#semver}
AndroidX Core Team2e416b22020-12-03 22:58:07 +000010
alanv5e4feac2022-07-13 09:55:38 -070011Artifacts follow strict [semantic versioning](http://semver.org) for binary
AndroidX Core Team5fa61982023-01-13 10:43:41 -050012compatibility with an added inter-version sequence of pre-release revisions.
13Versions for finalized release artifacts, which are available on
14[Google Maven](https://maven.google.com) will follow the format
alanv5e4feac2022-07-13 09:55:38 -070015`<major>.<minor>.<bugfix>` with an optional `-<alpha|beta|rc><nn>` suffix.
AndroidX Core Team5fa61982023-01-13 10:43:41 -050016Internal or nightly releases, which are available on
17[androidx.dev](http://androidx.dev), use the `-SNAPSHOT` suffix.
alanv5e4feac2022-07-13 09:55:38 -070018
AndroidX Core Team5fa61982023-01-13 10:43:41 -050019### Behavioral and source compatibility {#compat}
alanv5e4feac2022-07-13 09:55:38 -070020
AndroidX Core Team5fa61982023-01-13 10:43:41 -050021Libraries are required to preserve *behavioral compatibility* -- APIs must
22behave as described in their documentation -- across minor versions. Special
23consideration must also be made for changes to undocumented behavior, as
24developers may have made their own assumptions about API contracts based on
25observed behavior.
AndroidX Core Team2e416b22020-12-03 22:58:07 +000026
AndroidX Core Team5fa61982023-01-13 10:43:41 -050027Libraries are strongly encouraged to preserve *source compatibility* across
28minor versions. Strictly requiring source compatibility would require major
29version bumps when implementing quality-of-life improvements such as nullability
30annotations or generics, which would be [disruptive](#major-implications) to the
31library ecosystem.
32
33### Notation {#notation}
AndroidX Core Team5c914c42021-02-08 17:22:57 +000034
35Major (`x.0.0`)
36: An artifact's major version indicates a guaranteed forward-compatibility
AndroidX Core Team21ccf652022-04-01 14:53:07 +000037 window. The number is incremented only when introducing breaking API or
38 behavioral changes.
AndroidX Core Team5c914c42021-02-08 17:22:57 +000039
40Minor (`1.x.0`)
41: Minor indicates compatible public API changes. This number is incremented
AndroidX Core Team21ccf652022-04-01 14:53:07 +000042 when APIs are added, including the addition of
Ian Baker186108e2023-11-20 06:54:36 -080043 [`@Deprecated` annotations](/docs/api_guidelines/index.md#deprecation-and-removal).
AndroidX Core Team5c914c42021-02-08 17:22:57 +000044 Binary compatibility must be preserved between minor version changes.
45
46Bugfix (`1.0.x`)
47: Bugfix indicates internal changes to address broken behavior. Care should be
48 taken to ensure that existing clients are not broken, including clients that
49 may have been working around long-standing broken behavior.
50
AndroidX Core Team5fa61982023-01-13 10:43:41 -050051#### Pre-release cycles {#prerelease}
AndroidX Core Team5c914c42021-02-08 17:22:57 +000052
alanve048d1c2021-02-11 08:46:57 -080053Alpha (`1.0.0-alphaXX`)
AndroidX Core Team5c914c42021-02-08 17:22:57 +000054: Feature development and API stabilization phase.
55
alanve048d1c2021-02-11 08:46:57 -080056Beta (`1.0.0-betaXX`)
AndroidX Core Team21ccf652022-04-01 14:53:07 +000057: Functional stabilization phase. Suitable for production use.
AndroidX Core Team5c914c42021-02-08 17:22:57 +000058
alanve048d1c2021-02-11 08:46:57 -080059RC (`1.0.0-rcXX`)
AndroidX Core Team5c914c42021-02-08 17:22:57 +000060: Verification phase.
61
62Stable (no-suffix)
AndroidX Core Team21ccf652022-04-01 14:53:07 +000063: Recommended for production use.
AndroidX Core Team5c914c42021-02-08 17:22:57 +000064
AndroidX Core Team8322ab12024-04-11 14:27:28 -070065In the past -- and only in rare cases -- libraries have used a `-devXX` suffix
66to indicate that a public release does not yet meet the requirements for Alpha.
67We **strongly discourage** libraries from using `-devXX`, as failing to meet the
68requirements for Alpha indicates that a library should not be publicly released.
69
AndroidX Core Team2e416b22020-12-03 22:58:07 +000070### Major (`x.0.0`) {#major}
71
72An artifact's major version indicates a guaranteed forward-compatibility window.
73For example, a developer could update an artifact versioned `2.0.0` to `2.7.3`
alanve048d1c2021-02-11 08:46:57 -080074without taking any additional action; however, updating from `2.7.3` to `3.0.0`
75may require a complete rewrite of their application or cause conflicts with
AndroidX Core Team21ccf652022-04-01 14:53:07 +000076their dependencies. Major version bumps are
77[strongly discouraged](#major-implications).
AndroidX Core Team2e416b22020-12-03 22:58:07 +000078
alanve54cc242021-02-11 13:49:33 -080079#### When to increment {#major-when}
AndroidX Core Team2e416b22020-12-03 22:58:07 +000080
81An artifact *must* increment its major version number in response to breaking
alanv5e4feac2022-07-13 09:55:38 -070082changes in binary or behavioral compatibility within the library itself *or* in
AndroidX Core Team2e416b22020-12-03 22:58:07 +000083response to breaking changes within a dependency.
84
85For example, if an artifact updates a SemVer-type dependency from `1.0.0` to
86`2.0.0` then the artifact must also bump its own major version number.
87
88An artifact *may in rare cases* increment its major version number to indicate
89an important but non-breaking change in the library. Note, however, that the
90SemVer implications of incrementing the major version are the same as a breaking
alanv5e4feac2022-07-13 09:55:38 -070091change -- dependent projects *must* assume the major version change is breaking
AndroidX Core Team2e416b22020-12-03 22:58:07 +000092and update their dependency specifications.
93
alanve54cc242021-02-11 13:49:33 -080094#### Ecosystem implications {#major-implications}
AndroidX Core Team2e416b22020-12-03 22:58:07 +000095
alanv5e4feac2022-07-13 09:55:38 -070096When an artifact increases its major version, *all* artifacts that depended on
AndroidX Core Team2e416b22020-12-03 22:58:07 +000097the previous major version are no longer considered compatible and must
98explicitly migrate to depend on the new major version.
99
100As a result, if the library ecosystem is slow to adopt a new major version of an
101artifact then developers may end up in a situation where they cannot update an
102artifact because they depend on a library that has not yet adopted the new major
103version.
104
105For this reason, we *strongly* recommend against increasing the major version of
106a “core” artifact that is depended upon by other libraries. “Leaf” artifacts --
107those that apps depend upon directly and are not used by other libraries -- have
108a much easier time increasing their major version.
109
alanve54cc242021-02-11 13:49:33 -0800110#### Process requirements {#major-process}
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000111
AndroidX Core Team8322ab12024-04-11 14:27:28 -0700112If the artifact has dependencies within Jetpack, owners *must* complete an
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000113assessment before implementing any breaking changes to binary or behavioral
114compatibility.
115
116Otherwise, owners are *strongly recommended* to complete the assessment before
117implementing any breaking changes to binary or behavioral compatibility, as such
118changes may negatively impact downstream clients in Android git or Google's
119repository. These clients are not part of our pre-submit workflow, but filling
120out the assessment will provide insight into how they will be affected by a
121major version change.
122
123### Minor (`1.x.0`) {#minor}
124
125Minor indicates compatible public API changes. This number is incremented when
AndroidX Core Teamb73968c2023-03-30 10:06:49 -0700126APIs are added -- including the addition of `@Deprecated` annotations -- and
127libraries must go through a full [pre-release](#pre-release-suffix) cycle before
128reaching stable. Binary compatibility must be preserved between minor version
129changes.
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000130
131#### Moving between minor versions:
132
133* A change in the minor revision indicates the addition of binary-compatible
134 APIs. Libraries **must** increment their minor revision when adding APIs.
135 Dependent libraries are not required to update their minimum required
136 version unless they depend on newly-added APIs.
137
138### Bugfix (`1.0.x`) {#bugfix}
139
140Bugfix indicates internal changes to address broken behavior. Care should be
141taken to ensure that existing clients are not broken, including clients that may
AndroidX Core Teamb73968c2023-03-30 10:06:49 -0700142have been working around long-standing broken behavior. Bugfix releases *do not*
143go through a pre-release cycle and are considered stable.
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000144
145#### Moving between bugfix versions:
146
147* A change in the bugfix revision indicates changes in behavior to fix bugs.
148 The API surface does not change. Changes to the bugfix version may *only*
149 occur in a release branch. The bugfix revision must always be `.0` in a
150 development branch.
151
152### Pre-release suffixes {#pre-release-suffix}
153
154The pre-release suffix indicates stability and feature completeness of a
155release. A typical release will begin as alpha, move to beta after acting on
156feedback from internal and external clients, move to release candidate for final
157verification, and ultimately move to a finalized build.
158
159Alpha, beta, and release candidate releases are versioned sequentially using a
160leading zero (ex. alpha01, beta11, rc01) for compatibility with the
161lexicographic ordering of versions used by SemVer.
162
163### Snapshot {#snapshot}
164
165Snapshot releases are whatever exists at tip-of-tree. They are only subject to
166the constraints placed on the average commit. Depending on when it's cut, a
AndroidX Core Team8322ab12024-04-11 14:27:28 -0700167snapshot may even be binary-identical to an `alpha`, `beta`, or `RC` release.
alanv5e4feac2022-07-13 09:55:38 -0700168
169### Tooling guarantees
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000170
171Versioning policies are enforced by the following Gradle tasks:
172
AndroidX Core Team8322ab12024-04-11 14:27:28 -0700173- `checkApi`: ensures that changes to public API are intentional and tracked,
174 asking the developer to explicitly run `updateApi` (see below) if any
175 changes are detected
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000176
AndroidX Core Team8322ab12024-04-11 14:27:28 -0700177- `checkApiRelease`: verifies that API changes between previously released and
178 currently under-development versions conform to semantic versioning
179 guarantees
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000180
AndroidX Core Team8322ab12024-04-11 14:27:28 -0700181- `updateApi`: commits API changes to source control in such a way that they
182 can be reviewed in pre-submit via Gerrit `API+2` and reviewed in post-submit
183 by API Council
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000184
AndroidX Core Team8322ab12024-04-11 14:27:28 -0700185`SNAPSHOT` is automatically added to the version string for all builds that
186occur outside the build server for release branches. Local release builds may be
187forced by passing `-Prelease` to the Gradle command line.
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000188
189## Picking the right version {#picking-the-right-version}
190
AndroidX Core Team8322ab12024-04-11 14:27:28 -0700191Libraries follow [semantic versioning](#semver), which means that the version
192code is strongly tied to the API surface. A full version consists of revision
193numbers for major, minor, and bugfix as well as a pre-release stage and
alanv5e4feac2022-07-13 09:55:38 -0700194revision. Correct versioning is, for the most part, automatically enforced;
195however, please check for the following:
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000196
197### Initial version {#initial-version}
198
199If your library is brand new, your version should start at 1.0.0, e.g.
200`1.0.0-alpha01`.
201
202The initial release within a new version always starts at `alpha01`. Note the
203two-digit revision code, which allows us to do up to 99 revisions within a
204pre-release stage.
205
206### Pre-release stages
207
208A single version will typically move through several revisions within each of
209the pre-release stages: alpha, beta, rc, and stable. Subsequent revisions within
210a stage (ex. alpha, beta) are incremented by 1, ex. `alpha01` is followed by
211`alpha02` with no gaps.
212
213### Moving between pre-release stages and revisions
214
215Libraries are expected to go through a number of pre-release stages within a
216version prior to release, with stricter requirements at each stage to ensure a
217high-quality stable release. The owner for a library should typically submit a
218CL to update the stage or revision when they are ready to perform a public
219release.
220
alanv5e4feac2022-07-13 09:55:38 -0700221Libraries are expected to allow >= 2 weeks per pre-release stage. This "soaking
222period" gives developers time to try each version, find bugs, and ensure a
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000223quality stable release. Therefore, at minimum:
224
AndroidX Core Team8322ab12024-04-11 14:27:28 -0700225- An `alpha` version must be publicly available for 2 weeks before releasing a
226 public `beta`
227- A `beta` version must be publicly available for 2 weeks before releasing a
228 public `rc`
229- A `rc` version must be publicly available for 2 weeks before releasing a
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000230 public stable version
231
232Your library must meet the following criteria to move your public release to
233each stage:
234
235### Alpha {#alpha}
236
237Alpha releases are expected to be functionally stable, but may have unstable API
AndroidX Core Team2cf0d5b2024-07-29 10:20:04 -0700238surface or incomplete features. Changes in alpha do trigger API Council review,
239but the feedback does not block an alpha release. Library owners are expected to
240have performed a minimum level of validation.
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000241
242#### Within the `alphaXX` cycle
243
AndroidX Core Teamb73968c2023-03-30 10:06:49 -0700244* Workflow
245 * Development happens in `androidx-main` or `androidx-platform-dev`
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000246* API surface
247 * Prior to `alpha01` release, API tracking **must** be enabled (either
248 `publish=true` or create an `api` directory) and remain enabled
249 * May add/remove APIs within `alpha` cycle, but deprecate/remove cycle is
250 strongly recommended.
AndroidX Core Team5fa61982023-01-13 10:43:41 -0500251 * May use
Ian Baker186108e2023-11-20 06:54:36 -0800252 [experimental APIs](/docs/api_guidelines/index.md#experimental-api)
AndroidX Core Team5fa61982023-01-13 10:43:41 -0500253 across same-version group boundaries
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000254* Testing
AndroidX Core Teambaf089a2023-10-09 07:45:09 -0700255 * Ensure the library is testable. Follow the guideline on
Ian Baker186108e2023-11-20 06:54:36 -0800256 [go/androidx/testability](/docs/testability.md)
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000257 * All changes **should** be accompanied by a `Test:` stanza
258 * All pre-submit and post-submit tests are passing
259 * Flaky or failing tests **must** be suppressed or fixed within one day
260 (if affecting pre-submit) or three days (if affecting post-submit)
261
262### Beta {#beta}
263
264Beta releases are ready for production use but may contain bugs. They are
265expected to be functionally stable and have highly-stable, feature-complete API
alanve048d1c2021-02-11 08:46:57 -0800266surface. All APIs should have been reviewed by API Council at this stage. Tests
267should have 100% coverage of public API surface and translations must be 100%
268complete.
269
270While beta represents API Freeze, it does not necessarily mean APIs are locked
271down permanently. A limited number of exceptions may be granted by API Council
272in cases where ship-blocking mistakes or significant user experience issues can
273be addressed with minimal changes to the API surface. Exceptions **will not** be
274granted for new features, non-trivial API changes, significant refactorings, or
275any changes likely to introduce additional functional instability. Requests for
276exceptions **must** be accompanied by a justification explaining why the change
AndroidX Core Team0db91f02021-05-06 22:45:18 +0000277cannot be made in a future minor version. This policy does not apply to
AndroidX Core Team8322ab12024-04-11 14:27:28 -0700278additions of experimental `@RequiresOptIn` APIs or changes to `@RequiresOptIn`
279APIs.
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000280
AndroidX Core Teamee9c1aa2021-04-06 17:29:05 +0000281#### Checklist for moving to `beta01` {#beta-checklist}
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000282
283* API surface
284 * Entire API surface has been reviewed by API Council
285 * All APIs from alpha undergoing deprecate/remove cycle must be removed
alanv5e4feac2022-07-13 09:55:38 -0700286 * The final removal of a `@Deprecated` API should occur in alpha, not
287 in beta
AndroidX Core Team5fa61982023-01-13 10:43:41 -0500288 * Must not use
Ian Baker186108e2023-11-20 06:54:36 -0800289 [experimental APIs](/docs/api_guidelines#experimental-api)
alanv5e4feac2022-07-13 09:55:38 -0700290 across same-version group boundaries
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000291* Testing
292 * All public APIs are tested
293 * All pre-submit and post-submit tests are enabled (e.g. all suppressions
294 are removed) and passing
alanv5e4feac2022-07-13 09:55:38 -0700295* Use of experimental Kotlin features (e.g. `@OptIn`) must be audited for
296 stability
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000297* All dependencies are `beta`, `rc`, or stable
298* Be able to answer the question "How will developers test their apps against
299 your library?"
300 * Ideally, this is an integration app with automated tests that cover the
301 main features of the library and/or a `-testing` artifact as seen in
302 other Jetpack libraries
303
304#### Within the `betaXX` cycle
305
AndroidX Core Teamb73968c2023-03-30 10:06:49 -0700306* Workflow
307 * Development happens in `androidx-main` or, in extremely limited cases,
308 changes are cherry-picked to a `-release` branch
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000309* API surface
alanve54cc242021-02-11 13:49:33 -0800310 * May not add, remove, or change APIs unless granted an exception by API
311 Council following the beta API change exception request process
AndroidX Core Team0db91f02021-05-06 22:45:18 +0000312 * Must go through the full `@Deprecate` and hard-removal cycle in
313 separate `beta` releases for any exception-approved API removals or
314 changes
alanv5e4feac2022-07-13 09:55:38 -0700315 * May not remove `@RequiresOptIn` annotations from experimental APIs, as
316 this would amount to an API addition
317 * **May** add new `@RequiresOptIn` APIs and change existing experimental
AndroidX Core Team0db91f02021-05-06 22:45:18 +0000318 APIs
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000319
320### RC {#rc}
321
322Release candidates are expected to be nearly-identical to the final release, but
323may contain critical last-minute fixes for issues found during integration
324testing.
325
326#### Checklist for moving to `rc01`
327
328* All previous checklists still apply
329* Release branch, e.g. `androidx-<group_id>-release`, is created
330* API surface
331 * Any API changes from `beta` cycle are reviewed by API Council
alanv5e4feac2022-07-13 09:55:38 -0700332* No **known** `P0` or `P1` (ship-blocking) issues
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000333* All dependencies are `rc` or stable
334
335#### Within the `rcXX` cycle
336
AndroidX Core Teamb73968c2023-03-30 10:06:49 -0700337* Changes are cherry-picked to a `-release` branch
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000338* Ship-blocking bug fixes only
339* All changes must have corresponding tests
340* No API changes allowed
341
342### Stable {#stable}
343
344Final releases are well-tested, both by internal tests and external clients, and
345their API surface is reviewed and finalized. While APIs may be deprecated and
346removed in future versions, any APIs added at this stage must remain for at
347least a year.
348
349#### Checklist for moving to stable
350
351* Identical to a previously released `rcXX` (note that this means any bugs
352 that result in a new release candidate will necessarily delay your stable
353 release by a minimum of two weeks)
354* No changes of any kind allowed
355* All dependencies are stable
356
357## Updating your version {#update}
358
359A few notes about version updates:
360
AndroidX Core Team408c27b2020-12-15 15:57:00 +0000361- The version of your library listed in `androidx-main` should *always* be
AndroidX Core Team8322ab12024-04-11 14:27:28 -0700362 higher than the version publicly available on Google Maven. This allows us
AndroidX Core Team408c27b2020-12-15 15:57:00 +0000363 to do proper version tracking and API tracking.
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000364- Version increments must be done before the CL cutoff date (aka the build cut
365 date).
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000366- **Increments to the next stability suffix** (like `alpha` to `beta`) should
AndroidX Core Team8322ab12024-04-11 14:27:28 -0700367 be handled by the library owner
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000368- Version increments in release branches will need to follow the guide
Ian Baker186108e2023-11-20 06:54:36 -0800369 [How to update your version on a release branch](/docs/release_branches.md#update-your-version)
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000370- When you're ready for `rc01`, the increment to `rc01` should be done in
AndroidX Core Team408c27b2020-12-15 15:57:00 +0000371 `androidx-main` and then your release branch should be snapped to that
AndroidX Core Team5fa61982023-01-13 10:43:41 -0500372 build. See the guide
Ian Baker186108e2023-11-20 06:54:36 -0800373 [Snap your release branch](/docs/release_branches.md#snap)
AndroidX Core Team5fa61982023-01-13 10:43:41 -0500374 on how to do this. After the release branch is snapped to that build, you
375 will need to update your version in `androidx-main` to `alpha01` of the next
AndroidX Core Team408c27b2020-12-15 15:57:00 +0000376 minor (or major) version.
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000377
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000378### How to update your version
379
AndroidX Core Team8322ab12024-04-11 14:27:28 -07003801. Update the version listed in `libraryversions.toml`
AndroidX Core Team95cd3da2021-01-14 11:47:43 -05003811. If your library is a `beta` or `rc01` version, run `./gradlew
382 <your-lib>:updateApi`. This will create an API txt file for the new version
AndroidX Core Team21ccf652022-04-01 14:53:07 +0000383 of your library. For other versions, this step is not required
AndroidX Core Team2e416b22020-12-03 22:58:07 +00003841. Verify changes with `./gradlew checkApi verifyDependencyVersions`.
3851. Commit these change as one commit.
3861. Upload these changes to Gerrit for review.
387
388An example of a version bump can be found here:
389[aosp/833800](https://android-review.googlesource.com/c/platform/frameworks/support/+/833800)
390
391## `-ktx` Modules {#ktx}
392
Ian Baker186108e2023-11-20 06:54:36 -0800393[Kotlin extension libraries](/docs/api_guidelines/index.md#module-ktx)
AndroidX Core Team5fa61982023-01-13 10:43:41 -0500394(`-ktx`) follow the same versioning requirements as other libraries, but with
395one exception: they must match the version of the Java libraries that they
396extend.
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000397
AndroidX Core Team21ccf652022-04-01 14:53:07 +0000398For example, let's say you are developing a Java library
399`androidx.foo:foo-bar:1.1.0-alpha01` and you want to add a Kotlin extension
400library `androidx.foo:foo-bar-ktx`. Your new `androidx.foo:foo-bar-ktx` library
401will start at version `1.1.0-alpha01` instead of `1.0.0-alpha01`.
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000402
403If your `androidx.foo:foo-bar` module was in version `1.0.0-alpha06`, then the
AndroidX Core Team21ccf652022-04-01 14:53:07 +0000404Kotlin extension module would start in version `1.0.0-alpha06`.
alanv842f5e02022-10-11 07:25:45 -0700405
406## FAQ
407
408### When does an alpha ship?
409
410For public releases, an alpha ships when the library lead believes it is ready.
411Generally, these occur during the batched bi-weekly (every 2 weeks) release
412because all tip-of-tree dependencies will need to be released too.
413
alanv842f5e02022-10-11 07:25:45 -0700414### Can alpha work (ex. for the next Minor release) occur in the primary development branch during beta API lockdown?
415
AndroidX Core Team76f65452024-01-02 11:39:57 -0800416Generally, no. This is by design. Focus should be spent on improving the Beta
417version and adding documentation/samples/blog posts for usage!
418
419In limited cases, the
420[`@RequiresOptIn`](/docs/api_guidelines/index.md#experimental-api)
421meta-annotation may be used to extend development of a feature beyond the alpha
422cycle. When doing so, extreme care must be taken to avoid destabilizing the rest
423of the library.
alanv842f5e02022-10-11 07:25:45 -0700424
425### Is there an API freeze window between alpha and beta while API surface is reviewed and tests are added, but before the beta is released?
426
427Yes. If any new APIs are added in this window, the beta release will be blocked
428until API review is complete and addressed.
429
430### How often can a beta release?
431
AndroidX Core Team5fa61982023-01-13 10:43:41 -0500432As often as needed; however, releases outside of the bi-weekly (every 2 weeks)
alanv842f5e02022-10-11 07:25:45 -0700433release will need to get approval from the TPM (natnaelbelay@).