<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Manuel Szecsenyi</title>
    <description>The latest articles on DEV Community by Manuel Szecsenyi (@manuelszecsenyi).</description>
    <link>https://dev.to/manuelszecsenyi</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4077553%2F5e7d6f15-7295-468c-8593-0bea0732c02f.webp</url>
      <title>DEV Community: Manuel Szecsenyi</title>
      <link>https://dev.to/manuelszecsenyi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/manuelszecsenyi"/>
    <language>en</language>
    <item>
      <title>PrimeNG's license changed - my take on the options for teams</title>
      <dc:creator>Manuel Szecsenyi</dc:creator>
      <pubDate>Tue, 18 Aug 2026 08:20:44 +0000</pubDate>
      <link>https://dev.to/ipt/primengs-license-changed-my-take-on-the-options-for-teams-d3c</link>
      <guid>https://dev.to/ipt/primengs-license-changed-my-take-on-the-options-for-teams-d3c</guid>
      <description>&lt;p&gt;PrimeNG, one of the bigger component libraries, recently changed their &lt;a href="https://primeui.dev/nextchapter" rel="noopener noreferrer"&gt;licensing model&lt;/a&gt;. This meant overnight the &lt;a href="https://github.com/primefaces/primeng" rel="noopener noreferrer"&gt;repository&lt;/a&gt; was archived and bugfixes are gated behind a community license you have to apply for. Medium to large software development teams now have to decide whether to continue with PrimeNG and pay the price or switch.&lt;/p&gt;

&lt;p&gt;I've talked to some colleagues in the field and came across different answers on how they continue. In this post I want to share these insights and my personal take.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pay the license
&lt;/h3&gt;

&lt;p&gt;One team I've talked to decided to bite the bullet, pay, and move on. If you have the budget and need to keep up the velocity up, you're probably best off with this solution. This way you won't have any overhead from migrating away, and can use your team's existing know-how with the framework. Also, Primetek announced development of more components:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Additional components are in active development and will be released as they become production-ready:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DataGrid&lt;/li&gt;
&lt;li&gt;Gantt&lt;/li&gt;
&lt;li&gt;Diagram&lt;/li&gt;
&lt;li&gt;PDF Viewer&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;So if you have such a feature on the roadmap planned, it might be worth sticking around. However, we do not know how these will look and if they will fit your use case.&lt;/p&gt;

&lt;h3&gt;
  
  
  Manual migration
&lt;/h3&gt;

&lt;p&gt;Another option is to migrate manually, component by component. This gives you full control over the result and lets you fix any inconsistencies with your design system along the way, but it's also the most time-consuming path. Depending on how many PrimeNG components you use and how deeply they're woven into your codebase, this can easily take several weeks. If that timeline sounds too long, there's a way to speed it up.&lt;/p&gt;

&lt;h3&gt;
  
  
  Migration with AI
&lt;/h3&gt;

&lt;p&gt;Migrate using AI, letting an agent rewrite PrimeNG components into the target library, or drop the dependency completely. This should be faster than doing it by hand, but I wouldn't expect wonders. I have not tried this approach yet, but I'm skeptical that this holds up well in practice. From what I've seen, agents aren't yet great at producing pixel-perfect components or fully respecting an existing design system. It might get you a usable first draft, but I expect several more days of manual fine-tuning afterward.&lt;/p&gt;

&lt;p&gt;The gap likely grows if you're also switching frameworks rather than just versions: inputs, Tailwind support, and passthrough don't map cleanly between libraries. Styling that relies on PrimeNG's component inputs might need to become hacky custom CSS in something like Material, and vice versa.&lt;/p&gt;

&lt;p&gt;Take it as a hypothesis worth testing rather than a conclusion.&lt;/p&gt;

&lt;h3&gt;
  
  
  Migrate to the Fork
&lt;/h3&gt;

&lt;p&gt;Meet &lt;a href="https://github.com/openng-org/optimus-ui" rel="noopener noreferrer"&gt;Optimus UI&lt;/a&gt;. The &lt;a href="https://www.openng.org/" rel="noopener noreferrer"&gt;openng collective&lt;/a&gt; started a fork and migrated all open issues. Given that they just released their first version and have a migration tool, I decided that I would like to try it out on our project. We know that we have to migrate away in the long run, so there should be nothing to lose when switching to the maintained open-source library.&lt;/p&gt;

&lt;h2&gt;
  
  
  Migrating to OptimusUI
&lt;/h2&gt;

&lt;p&gt;As mentioned there is a &lt;a href="https://optimus.openng.org/migration/primeng" rel="noopener noreferrer"&gt;migration tool&lt;/a&gt; that you need to run and should do the job easily. &lt;/p&gt;

&lt;p&gt;First update to the latest version of PrimeNG&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ng update primeng@21
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then you install optimus-ui and run their migration tool&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @openng/optimus-ui
ng generate @openng/optimus-ui:migrate-from-primeng
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You then get a list of references that might need your review. In our case this looked like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The following 10 references in 4 files could not be migrated automatically and need manual review:
      /src/app/app.config.ts:91  // TODO https://primeng.org/configuration#csp
      /src/app/core/layout/components/navigation/navigation.component.ts:12  PRIMENG_TRANSLATIONS,
      /src/app/core/layout/components/navigation/navigation.component.ts:38  private readonly primeNGConfig = inject(Optimus);
      /src/app/core/layout/components/navigation/navigation.component.ts:69  this.primeNGConfig.setTranslation(PRIMENG_TRANSLATIONS[lang]);
      /src/app/core/translation/translation.model.ts:9  export const PRIMENG_TRANSLATIONS: Record&amp;lt;AppLanguage, object&amp;gt; = {
      /src/app/shared/components/field-error/form-field-message.component.ts:14  type PrimeNGMessageSeverity =
      /src/app/shared/components/field-error/form-field-message.component.ts:21  const MessageTypeToPrimeNGMessageSeverity: {
      /src/app/shared/components/field-error/form-field-message.component.ts:22  [type in MessageType]: PrimeNGMessageSeverity;
      /src/app/shared/components/field-error/form-field-message.component.ts:62  protected readonly messageSeverity = computed&amp;lt;PrimeNGMessageSeverity&amp;gt;(
      /src/app/shared/components/field-error/form-field-message.component.ts:63  () =&amp;gt; MessageTypeToPrimeNGMessageSeverity[this.messageType()],

    Migration done, but 10 references in 4 files still need manual review. Scroll up to the list above — the CREATE/UPDATE lines that follow only cover what was migrated for you.                                                                                                            
    Manual migration tables: https://www.openng.org/migration/primeng
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see, the things found are just comments, constants, or components that contain the name "PrimeNG" and need renaming. You could argue that in a project that uses mainly technology-agnostic naming, nothing should have been found.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resolution
&lt;/h2&gt;

&lt;p&gt;Migration to Optimus UI was fast and done within a few minutes. I also did a visual comparison of the before and after, went through our most important flows, and did not find any problems. Our test suite also ran through without any issues.&lt;/p&gt;

&lt;p&gt;From my point of view, whatever your team decides, I'd recommend at least trying out Optimus UI in a branch. The switch is cheap to test and easy to revert if something doesn't fit. And if you already know you want out of PrimeNG's commercial license long-term, doing it now while the fork is fresh might make the transition easier.&lt;/p&gt;

&lt;p&gt;Are you also using PrimeNG? What is your team doing? I would be curious to find out more.&lt;/p&gt;

</description>
      <category>primeng</category>
      <category>angular</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
