Versioning and deprecation
How OGE UI numbers its releases, what an upgrade inside a major may change, how a deprecation reaches you before anything is removed, and which versions still get fixes. The same policy covers the Angular packages, the React packages and the framework-free engines.
Version numbers
- One version for the whole suite. Every
@oge-ui/*package — Angular, React, engines, locales — is released together with the same number, and the packages depend on each other at that exact version. Keep all of them on one version; a mixed install pulls in two copies of@oge-ui/coreand@oge-ui/behavior. - Small, frequent patch releases. The 1.x line ships as
1.1.1,1.1.2,1.1.3, … — new components and new members arrive in these releases too, instead of waiting for a minor. The compatibility rules below are what such a release promises. - The docs site is always the latest release (v1.1.3). The 0.13 line stays readable as a frozen copy at v0-13.ogeui.com; there is no per-patch archive.
# every @oge-ui package releases together — keep them on one version
npm install @oge-ui/grid@1.1.3 @oge-ui/inputs@1.1.3
# a mixed install shows up as two copies of the shared engines
npm ls @oge-ui/core @oge-ui/behaviorWhat a release may contain
| Change | Within 1.x | Only in a major (2.0) |
|---|---|---|
| Bug and security fixes | Yes — every release | — |
| New components, packages, inputs, outputs, props, methods | Yes | — |
| New message keys (with English defaults) | Yes — a partial catalog keeps working | — |
| A changed default or behaviour | Rarely — listed under Migration notes with the setting that restores it | Yes |
| Deprecating a member | Yes — announced, still working | — |
| Removing or renaming an export, input, prop or message key | No | Yes, after a deprecation |
| Dropping a supported Angular, React or Node major | No | Yes |
Behaviour changes inside 1.x are rare and never silent: each one is listed under Migration notes / behaviour changes in that release of the changelog, with the one-line setting that restores the old behaviour (1.1.2: columnHidingMode="hide", adaptiveMode stays 'none' unless you opt in).
Deprecations
A member is deprecated before it is removed, never removed directly:
| Channel | What you see |
|---|---|
TSDoc @deprecated | Your editor strikes the member through and names the replacement. |
| Dev-mode console warning | Once per key, for deprecated message keys that are still honoured ( [oge] the "…" message is deprecated… ). Production builds stay silent. |
| Changelog | The release that deprecates it says so, with the replacement. |
| API reference | The member stays documented until it is removed. |
// @oge-ui/behavior — OgeGridMessages (excerpt)
rowCountAnnouncement: string;
/**
* @deprecated Put the singular into `rowCountAnnouncement` as an ICU plural
* branch. Still honoured for exactly one row (with a dev-mode warning)
* until the next minor.
*/
rowCountOneAnnouncement?: string;A deprecated member keeps working for at least one minor release and is removed no earlier than the release after that. Every member deprecated so far still works in v1.1.3:
| Deprecated | Since | Use instead |
|---|---|---|
rowCountOneAnnouncement (grid, tree list messages) | 1.1.2 | An ICU one {…} branch in rowCountAnnouncement |
rowsSuffix (grid, tree list messages) | 1.1.2 | pagerInfo |
validationSummaryTitleOne (forms messages) | 1.1.2 | An ICU one {…} branch in validationSummaryTitle |
OGE_PIVOT_FIELD_DRAG_TYPE , OgePivotDragLike | 1.1.2 | Nothing — field chips use a pointer drag; kept so imports compile |
buildSearchHighlightHtml ( @oge-ui/core ) | 0.13.1 | buildSearchHighlightSegments — real text nodes and <mark> elements |
Supported versions
| OGE | Angular | React | Node (tooling) | Status |
|---|---|---|---|---|
| 1.x | 22 – 23 | 18 – 19 | ≥ 22.22 | Supported — fixes land on the latest 1.1.x |
| 0.13.x | 22 | — | ≥ 22.22 | Security fixes only, until 2027-04-01 |
| < 0.13 | — | — | — | End of life — upgrade (migration notes in the changelog) |
- Fixes, security fixes included, ship as a patch of the latest release; older 1.x patches are not back-ported to. Report vulnerabilities as described in SECURITY.md.
- Peer ranges are declared, not implied: Angular packages accept
@angular/core >=22.0.0 <24.0.0, React packagesreact ^18.0.0 || ^19.0.0. A new framework major is added to the range once the suite passes on it; dropping one is a major-only change. - Browsers: the last two versions of Chrome, Edge, Firefox and Safari, plus iOS Safari and Chrome for Android (
.browserslistrc).
How the promise is checked
| Gate | Fails when |
|---|---|
api-check | A public signature of @oge-ui/core or @oge-ui/behavior changes without an updated API report (API Extractor). |
package-check | A package breaks a resolution mode ( publint , Are the Types Wrong). |
size-check | An entry point grows by more than 10 % gzip over its baseline. |
license-boundary-check | An MIT package depends on, or imports, a commercial one. |
docs-tools:parity | The Angular and React API tables of a family stop matching without a recorded reason. |
Decision records
Changes to the platform strategy are written down as architecture decision records before they ship:
- ADR 0001 — Multi-framework strategy — one framework-free engine, an Angular and a React render layer
- ADR 0002 — Framework-aware docs — one docs site with a global Angular / React switch
- ADR 0003 — Commercial engine packages — per-family engine packages, and no runtime licence check