All posts

Getting started with Optimus UI in Angular 22

Aug 21, 2026 6 min read
Share

On 29 June 2026 the PrimeNG repository was archived. PrimeTek folded PrimeNG, PrimeReact and PrimeVue into a single product called PrimeUI, with a licence that is no longer plain MIT. A few weeks later a group of volunteers forked the last MIT release and shipped it under a new name: Optimus UI.

This post does two things. First, it states precisely what changed on the PrimeNG side, because the one-line version going round — “PrimeNG went closed source” — is wrong in ways that matter. Then it installs Optimus UI in an Angular 22 app, renders a component, themes it, and walks the migration schematic for an existing PrimeNG codebase.

What actually changed with PrimeNG

The announcement lives at primeui.dev/nextchapter. The short version:

ThingStatus
PrimeNG v21 and earlierMIT, forever. The change is not retroactive.
PrimeNG v22+PrimeUI licence. Same for PrimeReact 11 and PrimeVue 5.
Community tierFree, but eligibility-gated and re-confirmed annually.
Commercial Suite$599 per developer perpetual, including one year of updates.
From 2027$799 per developer. $399/dev/yr to keep updates flowing after the first year.
PRO-only componentsScheduler, Text Editor, Task Board, Charts.

The Community tier is free for organisations under all of these: under $1M revenue, fewer than five developers, fewer than ten employees, and under $3M raised. The core component set is not paywalled — the PRO components listed above are new additions, not things that were taken away.

So “PrimeNG is now paid” is not accurate. What is accurate: the version you upgrade to next carries licence terms you have to read, and every version you already ship stays MIT no matter what happens later. That second half is the whole basis for the fork.

What Optimus UI is

Optimus UI is PrimeNG v21 — the final MIT release — renamed. The rename is a trademark necessity, not a technical decision: the p- element selectors and the pi- icon classes are kept exactly as they were. It is stewarded by OpenNG, the same group that took over ngneat, and its LICENSE.md is verbatim MIT carrying both copyright lines — (c) 2026 OpenNG and (c) 2016-2026 PrimeTek.

Optimus UI is not affiliated with, endorsed by, or supported by PrimeTek. It is a community fork operating under the MIT grant of the code it forked.

The philosophy page is unusually direct about scope. The commitments: MIT with no second tier, a release cadence that tracks Angular majors, bugs before features, no telemetry and no licence keys. The explicit non-goals matter just as much — no commercial support or SLA, no templates or blocks, no theme designer. If any of those were the reason you paid attention to PrimeNG, the fork is not offering to replace them.

Prerequisites

An Angular 22 project, and @angular/cdk — Optimus depends on it and does not bundle it.

Optimus UIAngular
v222
v121

v1 is kept alive under the v1-lts dist-tag, so an Angular 21 app is not stranded.

Step 1 — Install

The schematic does the wiring:

ng add @openng/optimus-ui --theme=Aura

--theme takes any of the four presets — Lara, Aura, Material, Nora. --skip-install and --project=<name> behave the way they do in every other Angular schematic.

Manually, if you’d rather see each step:

npm install @openng/optimus-ui @openng/optimus-ui-themes

Step 2 — Provide it

Configuration goes through a single provider function from @openng/optimus-ui/config:

import { ApplicationConfig } from '@angular/core';
import { provideOptimus } from '@openng/optimus-ui/config';
import Aura from '@openng/optimus-ui-themes/aura';

export const appConfig: ApplicationConfig = {
	providers: [provideOptimus({ theme: { preset: Aura } })]
};

That’s the whole bootstrap. Anyone who has configured PrimeNG v17+ will recognise the shape — it’s providePrimeNG with a different name.

Step 3 — Your first component

Imports are per-component and per-entry-point, so tree-shaking works without any module ceremony:

import { Component } from '@angular/core';
import { Button } from '@openng/optimus-ui/button';

@Component({
	selector: 'app-demo',
	imports: [Button],
	templateUrl: './demo.html'
})
export class Demo {}
<p-button label="Check" icon="pi pi-check" />

Note the template. The selector is still p-button, the icon is still pi pi-check. That is the entire point of the fork: your templates do not change, because the API surface is the same one PrimeNG v21 shipped. The docs describe v1 as “a rename rather than a rewrite” and claim full API compatibility with PrimeNG v21 — worth verifying against your own component usage rather than taking on faith, but it lines up with what the migration schematic actually does.

Step 4 — Theming

Four presets ship in @openng/optimus-ui-themes. Beyond swapping one in, the theming model is inherited wholesale from PrimeNG v21: styled mode with design tokens, unstyled mode when you want to bring your own CSS entirely, and Pass Through for reaching into a component’s internal elements without forking it. RTL and ripple are there too.

Tailwind is optional. If you want the two to cooperate, @openng/optimus-ui-tailwindcss supports both Tailwind v3 and v4.

The rest of the family, so the package names aren’t a surprise later: @openng/optimus-ui-styled, -styles, -locale, -motion, -utils, and @openng/icons.

Migrating an existing PrimeNG app

There is a schematic, and it targets v21 specifically:

ng update primeng@21
npm install @openng/optimus-ui@1
ng generate @openng/optimus-ui@1:migrate-from-primeng

Get to PrimeNG v21 first. The schematic checks, and aborts if you’re on something else unless you pass --force — which you should not, because the rewrite rules are written against v21’s API surface. Once it completes, ng update to Optimus v2 for Angular 22.

Divergence starts after v1. Everything from v2 onward is the fork’s own road, so the further you get from the fork point, the less “same API as PrimeNG” will hold.

Pitfalls

  • Migrate from v21, not v22. If you already upgraded to PrimeNG v22 you have to come back down before the schematic will run cleanly.
  • @angular/cdk is a hard peer dependency. It isn’t bundled, and a fresh app won’t have it.
  • GitHub shows the licence as NOASSERTION. The file is verbatim MIT — GitHub’s detector trips on the dual copyright header. Read LICENSE.md rather than the sidebar badge.
  • The contributor graph is inherited git history. The top names are PrimeTek staff, because the fork carries 22,000 upstream commits. It says nothing about who maintains the fork today.
  • The name collides. “Optimus UI” is also an LG Android skin. Search for @openng/optimus-ui.
  • No commercial support, by design. If an SLA is a procurement requirement, this is the wrong choice and the project says so itself.

Should you use it

As of August 2026 the numbers are modest and honest: 570 stars, roughly 6,200 npm downloads a week, v1.0.0 on 3 August and v2.0.0 on 18 August, with v1-lts maintained alongside. That is a young project run by a small volunteer team, and the docs site is at least dogfooding itself — it’s an Angular SSR app built on Optimus, prerendered at build time.

The honest framing is that this is a continuity option, not an upgrade. If you have a large PrimeNG v21 codebase and want to stay MIT without rewriting templates, it is the shortest path that exists. If you’re starting fresh, weigh it against Angular Material — Google-maintained and the safest long-term bet — or NG-ZORRO or Taiga UI. And if your organisation clears the Community tier thresholds, staying on PrimeNG is still free.

Wrap-up

The licensing story is calmer than the headlines suggested: nothing you already shipped changed, and the new terms are free for small teams. The fork exists for everyone else, and its pitch is deliberately narrow — keep the v21 API, keep MIT, ship bugfixes on Angular’s cadence, promise nothing more.

Docs at optimus.openng.org, install guide at /installation, source at openng-org/optimus-ui. Read primeui.dev/nextchapter before you decide either way.