<?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: Hadil Ben Abdallah</title>
    <description>The latest articles on DEV Community by Hadil Ben Abdallah (@hadil).</description>
    <link>https://dev.to/hadil</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%2F1209000%2Fb29d37d8-2efe-4391-9796-a6f8a483f1bd.png</url>
      <title>DEV Community: Hadil Ben Abdallah</title>
      <link>https://dev.to/hadil</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hadil"/>
    <language>en</language>
    <item>
      <title>I Removed Passwords From My App. Here’s What the Login Flow Looks Like Now</title>
      <dc:creator>Hadil Ben Abdallah</dc:creator>
      <pubDate>Wed, 14 Oct 2026 13:13:55 +0000</pubDate>
      <link>https://dev.to/hadil/i-removed-passwords-from-my-app-heres-what-the-login-flow-looks-like-now-51k9</link>
      <guid>https://dev.to/hadil/i-removed-passwords-from-my-app-heres-what-the-login-flow-looks-like-now-51k9</guid>
      <description>&lt;p&gt;Most applications eventually face login problems that have little to do with their core purpose.&lt;/p&gt;

&lt;p&gt;Users forget passwords, reuse credentials, and struggle with account recovery. Meanwhile, developers must consider credential security, brute-force protection, and session management.&lt;/p&gt;

&lt;p&gt;This is the reason why I started looking into &lt;strong&gt;passwordless authentication&lt;/strong&gt; and how passkeys can potentially alter the login experience.&lt;/p&gt;

&lt;p&gt;The idea is simple: users should be able to prove their identity without typing a conventional password every time they sign in.&lt;/p&gt;

&lt;p&gt;Passkeys use public-key cryptography through standards such as WebAuthn. Users authenticate with a compatible device or security key, while the identity provider verifies the authentication and completes the login flow.&lt;/p&gt;

&lt;p&gt;I was curious to find out what implications it has for developers: how the login procedure would change, what configuration the developers have to do, and which responsibilities remain with the app.&lt;/p&gt;

&lt;p&gt;To answer these questions, I will explore the technology of passkey authentication and review Skycloak's managed Keycloak solution.&lt;/p&gt;




&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;Passwordless authentication enables users to log in to their accounts without typing in a traditional password. With passkeys, the browser and the user's authenticator handle a cryptographic challenge, and the identity provider verifies the result.&lt;/p&gt;

&lt;p&gt;Here are the important points for developers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The traditional password step is replaced with passkeys.&lt;/strong&gt; When users authenticate using the passkey, they must use a suitable device or security key.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WebAuthn enables public-key authentication.&lt;/strong&gt; The authenticator uses a private key to respond to a challenge, and the identity provider verifies the response using the registered public key.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Identity providers manage authentication.&lt;/strong&gt; Keycloak supports passkeys, while &lt;a href="https://skycloak.io/" rel="noopener noreferrer"&gt;Skycloak&lt;/a&gt; offers a managed Keycloak solution with a passkey setup provided.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;As usual, recovery must be taken care of.&lt;/strong&gt; One must not forget that the users could end up losing their devices or switching browsers and want to register a passkey.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Passwordless doesn't automatically mean MFA.&lt;/strong&gt; Whether additional authentication factors are required depends on the configured authentication policy. A passkey can also satisfy multiple authentication-factor requirements in supported flows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The main benefit is a simpler sign-in experience with strong phishing resistance when passkeys are correctly implemented. The trade-off is that developers still need to manage registration, recovery, device compatibility, and session security carefully.&lt;/p&gt;




&lt;h2&gt;
  
  
  Passwords Were Only the Beginning of the Problem
&lt;/h2&gt;

&lt;p&gt;A login form looks simple from the outside. A user enters their credentials, the server verifies them, and the application starts a session. The complexity appears when something goes wrong.&lt;/p&gt;

&lt;p&gt;Users forget passwords, attackers try leaked credentials, and account recovery can become a security weakness if it's poorly designed.&lt;/p&gt;

&lt;p&gt;Developers must also protect stored passwords, limit repeated login attempts, and make sure reset links can't be abused.&lt;/p&gt;

&lt;p&gt;For a growing application, these responsibilities add ongoing security work that competes with other product priorities.&lt;/p&gt;

&lt;p&gt;This is where passwordless authentication becomes useful. Passkeys remove the need to remember and type a reusable password, reducing exposure to common password-related attacks.&lt;/p&gt;

&lt;p&gt;They don't eliminate every authentication risk, though. Account recovery, session security, authorization, and fallback methods still need careful design. The goal is to simplify sign-in without compromising the security of the application.&lt;/p&gt;




&lt;h2&gt;
  
  
  How Passwordless Authentication Works
&lt;/h2&gt;

&lt;p&gt;Passwordless authentication describes a login experience that doesn't require the user to enter a conventional password. There are several ways to achieve this, but passkeys are a useful starting point because they combine a straightforward user experience with public-key cryptography.&lt;/p&gt;

&lt;h3&gt;
  
  
  Passkeys: Prove Your Identity Without Typing a Password
&lt;/h3&gt;

&lt;p&gt;When a user registers a passkey, their authenticator creates a public/private key pair. The private key is protected by the authenticator or passkey provider, while the identity provider stores the corresponding public-key credential.&lt;/p&gt;

&lt;p&gt;During sign-in, the identity provider sends a challenge. The authenticator responds using the private key, and the identity provider verifies the response. If authentication succeeds, the user can continue into the application.&lt;/p&gt;

&lt;p&gt;The browser handles this interaction through &lt;strong&gt;WebAuthn&lt;/strong&gt;, a web standard for public-key authentication. &lt;/p&gt;

&lt;p&gt;Depending on the device, users may confirm their identity with Face ID, Touch ID, Windows Hello, a device PIN, or a compatible security key. Their biometric data isn't sent to the application as part of the WebAuthn exchange.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                   ┌──────────────────────────────┐
                   │       Sign in / Register     │
                   │                              │
                   │  Enter username or email     │
                   │  Choose Register             │
                   └──────────────┬───────────────┘
                                  │
                                  ▼
                   ┌──────────────────────────────┐
                   │          Register            │
                   │                              │
                   │  Username: hadil             │
                   │  Email: hadil@example.com    │
                   │                              │
                   │       [ Register ]           │
                   └──────────────┬───────────────┘
                                  │
                                  ▼
                   ┌──────────────────────────────┐
                   │      Choose Setup Method     │
                   │                              │
                   │      [ Setup Password ]      │
                   │             OR               │
                   │      [ Setup Passkey ]       │
                   └──────────────┬───────────────┘
                                  │
                 ┌────────────────┴────────────────┐
                 │                                 │
                 ▼                                 ▼
    ┌────────────────────────┐       ┌────────────────────────┐
    │     Setup Password     │       │      Setup Passkey     │
    └────────────┬───────────┘       └────────────┬───────────┘
                 │                                 │
                 ▼                                 ▼
    ┌────────────────────────┐       ┌────────────────────────┐
    │ Enter a new password   │       │ Register a passkey     │
    │ Confirm the password   │       │ with your device       │
    │                        │       │                        │
    │     [ Register ]       │       │     [ Continue ]       │
    └────────────┬───────────┘       └────────────┬───────────┘
                 │                                 │
                 │                                 ▼
                 │                    ┌────────────────────────┐
                 │                    │  Choose authenticator  │
                 │                    │                        │
                 │                    │  • Windows Hello       │
                 │                    │  • Touch ID / Face ID  │
                 │                    │  • Security key        │
                 │                    └────────────┬───────────┘
                 │                                 │
                 │                                 ▼
                 │                    ┌────────────────────────┐
                 │                    │ Confirm registration   │
                 │                    │ with device PIN,       │
                 │                    │ fingerprint or face    │
                 │                    └────────────┬───────────┘
                 │                                 │
                 └────────────────┬────────────────┘
                                  │
                                  ▼
                   ┌──────────────────────────────┐
                   │    Registration Complete     │
                   │                              │
                   │  User can sign in using the  │
                   │  configured authentication   │
                   │  method.                     │
                   └──────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;em&gt;This is a conceptual registration flow. The available authentication methods and registration steps depend on the application's identity provider and configured authentication flow.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;For developers, passkeys still require configuration: users need a way to register credentials, the identity provider must accept them, and the application must establish a secure session after authentication.&lt;/p&gt;
&lt;h3&gt;
  
  
  Magic Links: A Different Way to Skip Passwords
&lt;/h3&gt;

&lt;p&gt;Magic links offer another passwordless approach. The user enters an email address, receives a login link, and follows it to authenticate. The link typically contains a time-limited or one-time token that must be validated securely.&lt;/p&gt;

&lt;p&gt;This can make onboarding straightforward because users don't have to create or remember a password. However, the experience depends on email delivery and on the security of the user's email account. Developers must also protect against token reuse, link leakage, and unsafe redirect handling.&lt;/p&gt;
&lt;h3&gt;
  
  
  Where Does Keycloak Fit Into the Flow?
&lt;/h3&gt;

&lt;p&gt;Keycloak can manage authentication, user credentials, and the login flows that applications use through standard identity protocols. With passwordless authentication configured, it can verify a registered passkey and complete the authentication flow for the application.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;              ┌─────────────────────────────┐
              │            User             │
              │                             │
              │      Clicks "Sign in"       │
              └──────────────┬──────────────┘
                             │
                             ▼
              ┌─────────────────────────────┐
              │       Web Application       │
              │                             │
              │  React / Next.js / other    │
              │  application                │
              └──────────────┬──────────────┘
                             │
                             │ Redirects for login
                             ▼
              ┌─────────────────────────────┐
              │          Keycloak           │
              │                             │
              │  Identity and authentication│
              │  Handles the configured     │
              │  login flow                 │
              └──────────────┬──────────────┘
                             │
                 ┌───────────┴───────────┐
                 │                       │
                 ▼                       ▼
       ┌───────────────────┐   ┌───────────────────┐
       │ Password          │   │ Passkey           │
       │ authentication    │   │ authentication    │
       │                   │   │                   │
       │ Enter credentials │   │ Use device        │
       │                   │   │ authenticator     │
       └─────────┬─────────┘   └─────────┬─────────┘
                 │                       │
                 └───────────┬───────────┘
                             │
                             ▼
             ┌───────────────────────────────┐
             │   Keycloak Verifies Login     │
             │                               │
             │ Applies configured policies   │
             │ and completes authentication  │
             └───────────────┬───────────────┘
                             │
                             ▼
              ┌─────────────────────────────┐
              │       OIDC Response         │
              │                             │
              │  Application receives the   │
              │  authorization code and     │
              │  completes the OIDC flow    │
              └──────────────┬──────────────┘
                             │
                             ▼
              ┌─────────────────────────────┐
              │       Web Application       │
              │                             │
              │  Establishes its session    │
              │  and checks authorization   │
              └──────────────┬──────────────┘
                             │
                             ▼
              ┌─────────────────────────────┐
              │     Protected Resource      │
              │                             │
              │       Access granted        │
              └─────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Developers can use an identity provider to manage the authentication process without having to build every part of credential registration and verification themselves. The application still needs to integrate correctly with the identity provider and handle its own authenticated sessions and authorization.&lt;/p&gt;


&lt;h2&gt;
  
  
  Passkeys vs. Passwords vs. MFA: What Changes?
&lt;/h2&gt;

&lt;p&gt;These terms often appear together in authentication discussions, but they describe different things. Understanding the distinction helps you choose the right login flow for your application.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;th&gt;What the user does&lt;/th&gt;
&lt;th&gt;What it provides&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Password-based login&lt;/td&gt;
&lt;td&gt;Enters a username and password&lt;/td&gt;
&lt;td&gt;Authentication using a memorized secret&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Passwordless passkey login&lt;/td&gt;
&lt;td&gt;Uses a registered passkey, often with a device unlock or security key&lt;/td&gt;
&lt;td&gt;Authentication using public-key cryptography without entering a password&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-factor authentication (MFA)&lt;/td&gt;
&lt;td&gt;Completes multiple authentication factors according to the configured policy&lt;/td&gt;
&lt;td&gt;An additional layer of account protection&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A passkey can replace a password as the primary authentication method, while MFA requires multiple authentication factors according to the configured policy. The two can also work together: passkeys can support passwordless login or be incorporated into a multi-factor flow.&lt;/p&gt;

&lt;p&gt;Passkeys offer strong phishing resistance because WebAuthn credentials are associated with the website's identity. A credential registered for one website can't simply be reused on an unrelated fake domain.&lt;/p&gt;

&lt;p&gt;For developers, the right approach depends on the application's security requirements, its users' devices, and the available account recovery options.&lt;/p&gt;


&lt;h2&gt;
  
  
  Where Skycloak Comes In
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://skycloak.io/" rel="noopener noreferrer"&gt;Skycloak&lt;/a&gt; provides managed Keycloak, allowing developers to use Keycloak's identity and authentication capabilities without managing the underlying identity infrastructure themselves.&lt;/p&gt;

&lt;p&gt;It includes a &lt;a href="https://skycloak.io/docs/tutorials/implementing-magic-links/" rel="noopener noreferrer"&gt;passkey configuration recipe&lt;/a&gt; for enabling &lt;a href="https://skycloak.io/features/passwordless/" rel="noopener noreferrer"&gt;passwordless&lt;/a&gt; registration and creating a dedicated &lt;code&gt;browser-passkey&lt;/code&gt; authentication flow. The documented setup also describes a password-based fallback for users who haven't registered a passkey.&lt;/p&gt;

&lt;p&gt;This configuration provides a starting point for exploring passkey authentication with Keycloak.&lt;/p&gt;


&lt;h2&gt;
  
  
  Using Skycloak for Passwordless Authentication With Passkeys
&lt;/h2&gt;

&lt;p&gt;Passkeys change how users authenticate, but an application still needs an identity provider to manage registration, verify authentication, and handle the login flow. Skycloak provides managed Keycloak and a preconfigured Passkeys recipe that helps developers set up this flow without building a custom WebAuthn authenticator.&lt;/p&gt;
&lt;h3&gt;
  
  
  What the Skycloak Passkeys Recipe Configures
&lt;/h3&gt;

&lt;p&gt;Skycloak's Passkeys recipe applies a passkey configuration to a selected Keycloak realm. It handles three main parts of the setup:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Passkey registration:&lt;/strong&gt; Enables the &lt;code&gt;webauthn-register-passwordless&lt;/code&gt; required action so users can register a passkey.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A dedicated authentication flow:&lt;/strong&gt; Creates a &lt;code&gt;browser-passkey&lt;/code&gt; flow that identifies the user first and then prompts them to authenticate with a passkey.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fallback authentication:&lt;/strong&gt; Keeps password authentication and conditional OTP available for users who haven't registered a passkey, according to the configured flow.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The recipe leaves the existing &lt;code&gt;browser&lt;/code&gt; flow untouched. It also provides an option to require passkey registration for existing users, so developers can choose when to enforce the change across a realm.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F77kiutbr4g0qpjis4guo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F77kiutbr4g0qpjis4guo.png" alt="Skycloak Recipes page showing the available Passkeys configuration for a Keycloak realm" width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;
Skycloak's Recipes section includes a Passkeys configuration that can be applied to a selected realm
&amp;nbsp;
&lt;h3&gt;
  
  
  Prepare Your Development Environment
&lt;/h3&gt;

&lt;p&gt;Start with a dedicated realm for your test application. Keeping the setup separate makes it easier to configure the authentication flow and test registration and sign-in without affecting other applications or users.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn7xsjkeqjarf1xt1i0s0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn7xsjkeqjarf1xt1i0s0.png" alt="Skycloak dashboard showing the first-app realm" width="800" height="757"&gt;&lt;/a&gt;&lt;/p&gt;
I created my first-app realm in the Skycloak dashboard
&amp;nbsp;

&lt;p&gt;You'll need the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Identity provider:&lt;/strong&gt; A Skycloak-managed Keycloak environment with a development realm.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Application:&lt;/strong&gt; A small React or Next.js application with an OpenID Connect (OIDC) integration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Browser and authenticator:&lt;/strong&gt; A WebAuthn-compatible browser and a supported authenticator, such as Windows Hello, Touch ID, or a security key.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test account:&lt;/strong&gt; A dedicated user account for trying passkey registration and sign-in.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Connect the Application Through OIDC
&lt;/h3&gt;

&lt;p&gt;The application needs an OIDC client in Keycloak so it can redirect users to the identity provider for authentication and receive the appropriate authentication response.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fel2eue6bytrmq5otedlz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fel2eue6bytrmq5otedlz.png" alt="Keycloak Create client screen with OpenID Connect selected" width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;
Creating an OpenID Connect client in Keycloak is an early step in connecting the application to its identity provider
&amp;nbsp;

&lt;p&gt;Configure the client's redirect URIs and other settings to match your application. Skycloak's &lt;a href="https://skycloak.io/docs/tutorials/first-application-setup/" rel="noopener noreferrer"&gt;first application setup guide&lt;/a&gt; provides guidance for creating the client.&lt;/p&gt;

&lt;p&gt;Your application will also need the relevant issuer URL and client ID for its OIDC integration. Keep client secrets out of browser-side code, and use HTTPS in production.&lt;/p&gt;
&lt;h3&gt;
  
  
  Configure and Test Passkey Authentication
&lt;/h3&gt;

&lt;p&gt;With the realm and OIDC client in place, follow Skycloak's &lt;a href="https://skycloak.io/docs/tutorials/implementing-magic-links/" rel="noopener noreferrer"&gt;Passkey configuration guide&lt;/a&gt; to apply the recipe and understand the resulting authentication flow.&lt;/p&gt;

&lt;p&gt;Work through these steps:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Apply the Passkeys recipe.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Select your development realm and follow the documented instructions to enable passkey registration and create the &lt;code&gt;browser-passkey&lt;/code&gt; flow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Connect your application.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Configure the application's OIDC integration with the correct issuer URL, client ID, and redirect URI. The application should use the identity provider's authentication flow and handle the OIDC response according to its integration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Register a passkey.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sign in with your test account and follow the configured registration flow. The exact screens depend on the realm's configuration and the user's authentication state.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Test the sign-in flow.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Try signing in with the registered passkey using a compatible browser and authenticator. Also check the configured fallback for users who haven't registered a passkey.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Check recovery and failure scenarios.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Test what happens when a user cancels the browser prompt, has no registered passkey, or loses access to their authenticator. Confirm that the available fallback and recovery options work as intended.&lt;/p&gt;
&lt;h3&gt;
  
  
  What Developers Still Need to Handle
&lt;/h3&gt;

&lt;p&gt;The recipe configures the identity-provider side of passkey authentication, but it doesn't remove the application's integration responsibilities. Developers still need to handle OIDC correctly, establish and protect application sessions, enforce authorization, and configure redirect URIs securely.&lt;/p&gt;

&lt;p&gt;Before using the flow in production, test it across the browsers and devices your users rely on, and decide whether passkey registration should remain optional or become a requirement for the realm.&lt;/p&gt;


&lt;h2&gt;
  
  
  Edge Cases to Test Before Shipping
&lt;/h2&gt;

&lt;p&gt;A passkey login that works once isn't enough for production. Developers need to consider recovery, device compatibility, and authentication failures before making passwordless authentication the default.&lt;/p&gt;

&lt;p&gt;Account recovery is a priority. Users may lose a device or lose access to their authenticator. Provide a secure recovery process that helps legitimate users regain access without creating an easy route for attackers.&lt;/p&gt;

&lt;p&gt;Test different browsers, operating systems, and authenticators relevant to your audience. Also check what happens when users cancel the passkey prompt, haven't registered a passkey, or try to access a protected page without an authenticated session.&lt;/p&gt;

&lt;p&gt;Finally, remember that passkeys don't replace authorization checks, secure session handling, or session expiration policies. Authentication verifies a user's identity; the application still determines what they can access.&lt;/p&gt;

&lt;p&gt;Before shipping, use this checklist:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] New users can register a passkey successfully.&lt;/li&gt;
&lt;li&gt;[ ] Returning users can sign in with a registered passkey.&lt;/li&gt;
&lt;li&gt;[ ] Users have a documented, secure account recovery process.&lt;/li&gt;
&lt;li&gt;[ ] Unsupported or cancelled authentication attempts are handled gracefully.&lt;/li&gt;
&lt;li&gt;[ ] Unauthenticated users cannot access protected pages.&lt;/li&gt;
&lt;li&gt;[ ] Redirect URLs, sessions, and identity-provider settings are configured securely.&lt;/li&gt;
&lt;li&gt;[ ] Relevant browser and device combinations have been tested.&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;
&lt;h3&gt;
  
  
  What is passwordless authentication?
&lt;/h3&gt;

&lt;p&gt;→ Passwordless authentication allows users to sign in without entering a conventional password. It can use passkeys, security keys, magic links, or other password-free methods. Passkeys use public-key cryptography and can provide phishing-resistant authentication when correctly implemented.&lt;/p&gt;
&lt;h3&gt;
  
  
  How do passkeys work without a password?
&lt;/h3&gt;

&lt;p&gt;→ A passkey uses a public/private key pair associated with the relying party. During authentication, the authenticator uses the private key to respond to a challenge, and the identity provider verifies the response with the registered public key. The user doesn't need to enter a conventional password.&lt;/p&gt;
&lt;h3&gt;
  
  
  Are passkeys the same as MFA?
&lt;/h3&gt;

&lt;p&gt;→ No. Passwordless authentication describes how a user signs in without a conventional password. MFA requires multiple authentication factors according to the configured policy. A passkey can be used for passwordless login or incorporated into a multi-factor authentication flow.&lt;/p&gt;
&lt;h3&gt;
  
  
  What happens if a user loses their passkey?
&lt;/h3&gt;

&lt;p&gt;→ The user needs a supported recovery path, such as another registered passkey or a secure account recovery process. The appropriate approach depends on the application's identity configuration. Developers should plan recovery before making passkeys the only available authentication method.&lt;/p&gt;
&lt;h3&gt;
  
  
  Is passwordless authentication more secure than passwords?
&lt;/h3&gt;

&lt;p&gt;→ Passkeys can offer important security advantages over passwords, including resistance to common phishing attacks and the absence of a reusable password that can be stolen and replayed. The overall security of the application still depends on account recovery, session management, authorization, and correct implementation.&lt;/p&gt;


&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Passwordless authentication can simplify sign-in and reduce reliance on conventional passwords. &lt;/p&gt;

&lt;p&gt;Passkeys offer a phishing-resistant approach, but a production-ready implementation still needs secure registration, account recovery, device compatibility, session handling, and authorization.&lt;/p&gt;

&lt;p&gt;Managed Keycloak can reduce the burden of operating identity infrastructure. &lt;/p&gt;

&lt;p&gt;Skycloak's passkey configuration gives developers a starting point for exploring this approach, while OIDC connects the identity provider to the application.&lt;/p&gt;

&lt;p&gt;The goal isn't just to remove a password field. It's to make authentication easier for users without compromising security.&lt;/p&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Thanks for reading! 🙏🏻 &lt;br&gt; I hope you found this useful ✅ &lt;br&gt; Please react and follow for more 😍 &lt;br&gt; Made with 💙 by &lt;a href="https://dev.to/hadil"&gt;Hadil Ben Abdallah&lt;/a&gt;
&lt;/th&gt;
&lt;th&gt;
&lt;a href="https://www.linkedin.com/in/hadil-ben-abdallah/" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu48q29oef3l4a6eow30h.png" alt="LinkedIn" width="40" height="40"&gt;&lt;/a&gt; &lt;a href="https://github.com/Hadil-Ben-Abdallah" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhuvszgj6eun7xfvnwv51.png" alt="GitHub" width="50" height="50"&gt;&lt;/a&gt; &lt;a href="https://x.com/hadilbnabdallah" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F53x550t83v5ner74xkxo.jpg" alt="Twitter" width="40" height="40"&gt;&lt;/a&gt;
&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;div class="ltag__user ltag__user__id__1209000"&gt;
    &lt;a href="/hadil" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1209000%2Fb29d37d8-2efe-4391-9796-a6f8a483f1bd.png" alt="hadil image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/hadil"&gt;Hadil Ben Abdallah&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/hadil"&gt;Software Engineer • Technical Writer (300K+ readers &amp;amp; 25K+ followers) • Trusted by 20+ startups and tech companies worldwide
I turn brands into websites people 💙 to use&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>programming</category>
      <category>security</category>
      <category>webdev</category>
      <category>development</category>
    </item>
    <item>
      <title>Your Marketing Site Has 40 Scripts. Which Ones Are Actually Worth Keeping?</title>
      <dc:creator>Hadil Ben Abdallah</dc:creator>
      <pubDate>Tue, 13 Oct 2026 09:09:59 +0000</pubDate>
      <link>https://dev.to/yassersoliman/your-marketing-site-has-40-scripts-which-ones-are-actually-worth-keeping-1kp</link>
      <guid>https://dev.to/yassersoliman/your-marketing-site-has-40-scripts-which-ones-are-actually-worth-keeping-1kp</guid>
      <description>&lt;p&gt;Third-party scripts are easy to accumulate on a marketing website. A site might start with GA4 for analytics, a cookie banner, and a chat widget.&lt;/p&gt;

&lt;p&gt;A year or two later, the list can look very different.&lt;/p&gt;

&lt;p&gt;There’s a tag manager, heatmaps, session recordings, A/B testing, ad pixels, a CRM integration, a chatbot, a scheduling tool, a consent platform, embedded videos, social widgets, product analytics, and other tools.&lt;/p&gt;

&lt;p&gt;Each one had a reason to exist.&lt;/p&gt;

&lt;p&gt;The problem is that the browser doesn't care why you added it.&lt;/p&gt;

&lt;p&gt;It has to download, parse, and execute that code on a real visitor's device. Some third-party scripts consume CPU, compete for network resources, delay other work, or add work to the main thread. Chrome's performance guidance specifically calls out third-party code as a significant source of page-load and JavaScript costs.&lt;/p&gt;

&lt;p&gt;And that creates a problem that has very little to do with whether your marketing team &lt;em&gt;likes&lt;/em&gt; a particular tool.&lt;/p&gt;

&lt;p&gt;The question is whether the tool still earns its place on the website.&lt;/p&gt;




&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;Keep a third-party script when it has a clear business purpose, an identifiable owner, useful data or functionality, and a cost that makes sense for the pages where it runs.&lt;/p&gt;

&lt;p&gt;Remove it when nobody can explain why it exists, nobody uses the data it collects, another tool already does the same job, or its performance and maintenance cost are greater than its value.&lt;/p&gt;

&lt;p&gt;A practical way to evaluate every script is to ask:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What does this script do?&lt;/li&gt;
&lt;li&gt;Who actually uses what it provides?&lt;/li&gt;
&lt;li&gt;Does it affect leads, conversions, analytics, customer experience, or another measurable business outcome?&lt;/li&gt;
&lt;li&gt;Does another tool already cover the same job?&lt;/li&gt;
&lt;li&gt;Does it need to load on every page?&lt;/li&gt;
&lt;li&gt;What does it cost in performance, privacy, maintenance, and reliability?&lt;/li&gt;
&lt;li&gt;Who owns it?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you cannot answer those questions, the script deserves an audit.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Too Many Third-Party Scripts Become a Problem
&lt;/h2&gt;

&lt;p&gt;Third-party code is common on modern marketing websites. Analytics platforms, advertising tools, chat systems, consent management, testing platforms, embedded content, and other services often depend on JavaScript loaded from an external domain.&lt;/p&gt;

&lt;p&gt;That doesn't automatically make them bad.&lt;/p&gt;

&lt;p&gt;A script that sends important conversion data to your analytics platform can be worth its cost. A consent-management platform may be essential for how your site handles tracking. A scheduling widget may directly support your sales process.&lt;/p&gt;

&lt;p&gt;The problem starts when the list grows without anyone reviewing it.&lt;/p&gt;

&lt;p&gt;A marketer adds a new tool for a campaign. A developer installs its snippet. Another team adds a heatmap tool six months later. A redesign introduces a second analytics implementation. An agency adds its own tracking script. The campaign ends, but the script stays.&lt;/p&gt;

&lt;p&gt;Nothing looks broken.&lt;/p&gt;

&lt;p&gt;The website still loads. The forms still work. The analytics dashboard still has numbers in it.&lt;/p&gt;

&lt;p&gt;Meanwhile, the browser is doing more work every time someone visits the site.&lt;/p&gt;

&lt;p&gt;Chrome's Lighthouse documentation notes that third-party scripts can significantly affect page performance, including the amount of work performed on the browser's main thread.&lt;/p&gt;

&lt;p&gt;That matters even more on marketing websites because the third-party script list often grows through small, reasonable decisions rather than one obviously bad technical choice.&lt;/p&gt;

&lt;p&gt;The result is &lt;strong&gt;script bloat&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And script bloat is difficult to spot when you look at each tool separately.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to Find Every Third-Party Script on Your Website
&lt;/h2&gt;

&lt;p&gt;Before deciding what stays and what goes, you need a complete inventory.&lt;/p&gt;

&lt;p&gt;This sounds simple until you actually do it.&lt;/p&gt;

&lt;p&gt;A script can be added directly to a page, injected through Google Tag Manager, loaded by a WordPress plugin, included by a Webflow integration, or introduced by another third-party tool. Looking at the page source alone may give you an incomplete picture.&lt;/p&gt;

&lt;p&gt;For a proper audit, I would check the website from several angles.&lt;/p&gt;

&lt;h3&gt;
  
  
  Start with the browser
&lt;/h3&gt;

&lt;p&gt;Open Chrome DevTools and go to &lt;strong&gt;Network&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Reload the page with the Network panel open, then filter by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;JS&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Fetch/XHR&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Img&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Doc&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The JavaScript filter is the obvious starting point, but don't stop there. A third-party tool may load JavaScript and then make additional requests through XHR or fetch.&lt;/p&gt;

&lt;p&gt;Look at the domains making those requests.&lt;/p&gt;

&lt;p&gt;You might find something you recognize immediately:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;www.googletagmanager.com
www.google-analytics.com
connect.facebook.net
snap.licdn.com
static.hotjar.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;You may also find domains that mean nothing to you.&lt;/p&gt;

&lt;p&gt;Those deserve investigation.&lt;/p&gt;

&lt;p&gt;The goal at this stage isn't to decide whether a script is good or bad. You're building the inventory first.&lt;/p&gt;
&lt;h3&gt;
  
  
  Check your tag manager
&lt;/h3&gt;

&lt;p&gt;If the site uses Google Tag Manager, open the container and review every tag.&lt;/p&gt;

&lt;p&gt;Pay attention to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;tags that are still active&lt;/li&gt;
&lt;li&gt;tags with unclear names&lt;/li&gt;
&lt;li&gt;old campaign tags&lt;/li&gt;
&lt;li&gt;duplicate analytics tags&lt;/li&gt;
&lt;li&gt;tags firing on every page&lt;/li&gt;
&lt;li&gt;tags that were created for a temporary campaign&lt;/li&gt;
&lt;li&gt;tags owned by former employees or agencies&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Check your CMS and plugins
&lt;/h3&gt;

&lt;p&gt;If the website runs on WordPress or another CMS with integrations and plugins, check those too.&lt;/p&gt;

&lt;p&gt;A plugin may inject tracking code without anyone adding a script manually.&lt;/p&gt;

&lt;p&gt;This is one reason script audits should include the systems responsible for &lt;strong&gt;adding&lt;/strong&gt; code, not just the code itself.&lt;/p&gt;

&lt;p&gt;You may discover that the same service is being loaded through two different paths.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GA4 is configured directly in the CMS&lt;/li&gt;
&lt;li&gt;another GA4 implementation exists in GTM&lt;/li&gt;
&lt;li&gt;a plugin adds another tracking library&lt;/li&gt;
&lt;li&gt;a custom script sends additional events&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result can be duplicate data and unnecessary browser work at the same time.&lt;/p&gt;


&lt;h2&gt;
  
  
  Measure the Cost of Third-Party Scripts
&lt;/h2&gt;

&lt;p&gt;Once you have the inventory, measure the actual impact.&lt;/p&gt;

&lt;p&gt;This is where Chrome DevTools and Lighthouse become useful. Core Web Vitals can also help you understand how performance issues affect the actual experience of visitors.&lt;/p&gt;

&lt;p&gt;Lighthouse has a dedicated third-party summary that helps identify third-party resources and the amount of main-thread work associated with them.&lt;/p&gt;

&lt;p&gt;You can also use Chrome DevTools to inspect individual requests and understand what happens when the page loads.&lt;/p&gt;

&lt;p&gt;Look at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;request count&lt;/li&gt;
&lt;li&gt;transferred size&lt;/li&gt;
&lt;li&gt;resource size&lt;/li&gt;
&lt;li&gt;loading time&lt;/li&gt;
&lt;li&gt;JavaScript execution&lt;/li&gt;
&lt;li&gt;main-thread activity&lt;/li&gt;
&lt;li&gt;additional network requests&lt;/li&gt;
&lt;li&gt;when the resource starts loading&lt;/li&gt;
&lt;li&gt;whether it blocks or delays important work&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Don't obsess over one number.&lt;/p&gt;

&lt;p&gt;A 200 KB script isn't automatically worse than a 50 KB script. The smaller script could trigger several additional requests or perform expensive JavaScript work after it loads.&lt;/p&gt;

&lt;p&gt;Likewise, a script that takes a little time to load may still provide significant business value.&lt;/p&gt;

&lt;p&gt;The broader impact of website speed also matters when evaluating third-party code, especially on marketing sites where performance directly affects the user experience.&lt;/p&gt;

&lt;p&gt;You're looking for the &lt;strong&gt;cost-to-value ratio&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  Look for Duplicate Functionality
&lt;/h2&gt;

&lt;p&gt;One of the easiest wins in a script audit is finding tools that overlap.&lt;/p&gt;

&lt;p&gt;A growing marketing stack can accumulate several tools that solve almost the same problem.&lt;/p&gt;

&lt;p&gt;For example, you might have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GA4 for analytics&lt;/li&gt;
&lt;li&gt;another product analytics platform&lt;/li&gt;
&lt;li&gt;a heatmap tool&lt;/li&gt;
&lt;li&gt;a session-recording tool&lt;/li&gt;
&lt;li&gt;a CRO platform&lt;/li&gt;
&lt;li&gt;a separate event-tracking solution&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They aren't identical, but there may be significant overlap.&lt;/p&gt;

&lt;p&gt;The same thing can happen with tracking.&lt;/p&gt;

&lt;p&gt;You might find multiple systems tracking:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;page views&lt;/li&gt;
&lt;li&gt;form submissions&lt;/li&gt;
&lt;li&gt;CTA clicks&lt;/li&gt;
&lt;li&gt;video plays&lt;/li&gt;
&lt;li&gt;conversions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That creates two problems.&lt;/p&gt;

&lt;p&gt;First, you're paying for tools that may not all be necessary.&lt;/p&gt;

&lt;p&gt;Second, your team can end up with several versions of the same event and different numbers in different dashboards.&lt;/p&gt;

&lt;p&gt;That kind of inconsistency can make analytics harder to trust, especially when multiple tracking systems are collecting similar data.&lt;/p&gt;

&lt;p&gt;The technical cleanup can be easy.&lt;/p&gt;

&lt;p&gt;The organizational cleanup is usually harder.&lt;/p&gt;

&lt;p&gt;Someone needs to decide which system is the source of truth for each type of data.&lt;/p&gt;


&lt;h2&gt;
  
  
  Do Third-Party Scripts Need to Load on Every Page?
&lt;/h2&gt;

&lt;p&gt;This is one of the highest-value questions in the entire audit.&lt;/p&gt;

&lt;p&gt;A tool can be useful without needing site-wide access.&lt;/p&gt;

&lt;p&gt;Consider a scheduling widget.&lt;/p&gt;

&lt;p&gt;If its only purpose is to let visitors book a call, loading it on every blog article may not make sense.&lt;/p&gt;

&lt;p&gt;The same applies to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;calculators&lt;/li&gt;
&lt;li&gt;interactive demos&lt;/li&gt;
&lt;li&gt;chat tools&lt;/li&gt;
&lt;li&gt;review widgets&lt;/li&gt;
&lt;li&gt;embedded videos&lt;/li&gt;
&lt;li&gt;campaign-specific tracking&lt;/li&gt;
&lt;li&gt;product-specific functionality&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A simple rule is useful here:&lt;/p&gt;

&lt;p&gt;If a script only supports one type of page, try to load it only where that functionality is needed.&lt;/p&gt;

&lt;p&gt;This can reduce unnecessary requests and JavaScript execution on pages that don't benefit from the tool.&lt;/p&gt;

&lt;p&gt;It also makes the website easier to reason about.&lt;/p&gt;

&lt;p&gt;When someone investigates a slow blog post six months from now, they won't have to wonder why it is loading a collection of sales and product widgets that have nothing to do with the article.&lt;/p&gt;


&lt;h2&gt;
  
  
  A Script Audit Should End With a Decision
&lt;/h2&gt;

&lt;p&gt;Once you've collected the data, every script should have a clear status.&lt;/p&gt;

&lt;p&gt;I like using five:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Keep&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The script provides meaningful business value, and its cost is justified.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Optimize&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The tool is valuable, but its loading behavior, implementation, or scope can be improved.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Restrict&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The tool is useful only on certain pages, for certain users, or after a specific interaction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Replace&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The business needs the functionality, but another implementation may provide a better balance of functionality, reliability, and performance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Remove&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Nobody needs it, nobody owns it, or its value doesn't justify keeping it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjzixo7acabnvokz7bhvy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjzixo7acabnvokz7bhvy.png" alt="Each script should have a clear status, a reason, an owner, and an appropriate place in your user journey" width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That final category is often smaller than people expect.&lt;/p&gt;

&lt;p&gt;The goal of a good audit isn't to delete half the website.&lt;/p&gt;

&lt;p&gt;It's to make sure every piece of third-party code has a reason, an owner, and an appropriate place in the user journey.&lt;/p&gt;


&lt;h2&gt;
  
  
  Consent Changes the Loading Strategy
&lt;/h2&gt;

&lt;p&gt;Privacy and consent requirements add another layer to script management.&lt;/p&gt;

&lt;p&gt;Not every tracking or marketing script should necessarily load in the same way for every visitor.&lt;/p&gt;

&lt;p&gt;Depending on the jurisdiction, consent configuration, and purpose of the technology, some third-party scripts may need to wait until the appropriate consent has been given. Google's &lt;a href="https://developers.google.com/analytics/devguides/collection/ga4" rel="noopener noreferrer"&gt;Consent Mode documentation&lt;/a&gt; explains how Google tags can adjust their behavior based on a user's consent choices.&lt;/p&gt;

&lt;p&gt;That means your audit should document:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;which scripts are strictly necessary&lt;/li&gt;
&lt;li&gt;which require consent&lt;/li&gt;
&lt;li&gt;what happens when consent is denied&lt;/li&gt;
&lt;li&gt;whether the consent platform actually controls the scripts&lt;/li&gt;
&lt;li&gt;whether tags can fire before the expected consent state&lt;/li&gt;
&lt;li&gt;whether the implementation matches your organization's privacy requirements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is another reason you shouldn't simply copy a list of scripts from one website to another.&lt;/p&gt;

&lt;p&gt;The technical implementation and the privacy requirements need to be considered together.&lt;/p&gt;

&lt;p&gt;A consent banner that exists visually while tracking scripts continue firing before the appropriate consent state isn't solving the underlying problem.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Goal Isn't Fewer Scripts. It's a Website You Can Explain.
&lt;/h2&gt;

&lt;p&gt;A marketing website can have dozens of integrations and still be well managed.&lt;/p&gt;

&lt;p&gt;The problem isn't the number sitting in your inventory.&lt;/p&gt;

&lt;p&gt;The problem is when nobody can explain what those scripts do, why they load, who owns them, or what would happen if they disappeared.&lt;/p&gt;

&lt;p&gt;That's when your marketing stack starts becoming technical debt.&lt;/p&gt;

&lt;p&gt;A good WebOps process gives every integration a purpose and a place.&lt;/p&gt;

&lt;p&gt;It also gives the team a way to challenge old decisions.&lt;/p&gt;

&lt;p&gt;A tool that made perfect sense two years ago may not make sense today. A campaign may have ended. A new platform may have replaced an old one. A feature may have moved into another part of the stack.&lt;/p&gt;

&lt;p&gt;The website should evolve with those changes.&lt;/p&gt;

&lt;p&gt;And that brings us to the simplest rule I use for third-party scripts:&lt;/p&gt;

&lt;p&gt;If you can't explain the value, the owner, the scope, and the cost, it's time to investigate why the script is still there.&lt;/p&gt;


&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;
&lt;h3&gt;
  
  
  How many third-party scripts should a marketing website have?
&lt;/h3&gt;

&lt;p&gt;→ There is no universal number that defines a healthy website.&lt;/p&gt;

&lt;p&gt;A site with 10 scripts can have serious performance or tracking problems, while another site with 30 or 40 can be well managed.&lt;/p&gt;

&lt;p&gt;What matters is whether each script has a clear purpose, an owner, an appropriate loading scope, and a reasonable technical cost.&lt;/p&gt;

&lt;p&gt;Focus on understanding and controlling the script stack instead of chasing a specific number.&lt;/p&gt;
&lt;h3&gt;
  
  
  Do third-party scripts slow down a website?
&lt;/h3&gt;

&lt;p&gt;→ They can. Third-party scripts can add network requests, download JavaScript, consume CPU, execute code on the main thread, and trigger additional resources.&lt;/p&gt;

&lt;p&gt;The actual impact depends on the service, how it is implemented, when it loads, and what it does after loading.&lt;/p&gt;

&lt;p&gt;Tools such as Chrome DevTools and Lighthouse can help you identify which third-party resources are contributing to the work performed by the browser.&lt;/p&gt;
&lt;h3&gt;
  
  
  Should I remove Google Tag Manager to improve website performance?
&lt;/h3&gt;

&lt;p&gt;→ Not automatically. Google Tag Manager is a container that can load many different tags, so the performance impact depends heavily on what you put inside it.&lt;/p&gt;

&lt;p&gt;Removing GTM while leaving the underlying tracking requirements unresolved may simply move the problem somewhere else.&lt;/p&gt;

&lt;p&gt;Audit the tags inside the container first. Remove unused tags, eliminate duplicate tracking, restrict tags to relevant pages, and review how non-critical tags are loaded.&lt;/p&gt;
&lt;h3&gt;
  
  
  Should every marketing script load on every page?
&lt;/h3&gt;

&lt;p&gt;→ No. A script should generally load wherever its functionality or measurement is actually needed.&lt;/p&gt;

&lt;p&gt;A scheduling tool may only be necessary on pages where visitors can book a meeting. A product demo widget may only belong on product pages. A campaign-specific tracking script may only be relevant during a particular campaign.&lt;/p&gt;

&lt;p&gt;Reducing unnecessary site-wide loading can improve performance while keeping the functionality your marketing team actually needs.&lt;/p&gt;
&lt;h3&gt;
  
  
  How often should I audit third-party scripts?
&lt;/h3&gt;

&lt;p&gt;→ For many B2B SaaS websites, a quarterly review is a sensible starting point.&lt;/p&gt;

&lt;p&gt;You should also review the script inventory after major website changes, migrations, new marketing tools, tracking architecture changes, or campaigns that introduce temporary integrations.&lt;/p&gt;

&lt;p&gt;The exact frequency depends on how quickly the website and marketing stack change.&lt;/p&gt;


&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Having less scripts in your marketing site shouldn’t be just a goal in itself. Your site must utilize a technology stack that your marketing team is familiar with and can justify. &lt;/p&gt;

&lt;p&gt;Each and every third-party script must justify its right to exist through efficiency of its business function, prevail scope, and the known owner. &lt;/p&gt;

&lt;p&gt;Next time you find dozens of third-party requests present in DevTools, don’t ask yourself how to get rid of them. Instead, try to find out which requests actually has the right to exist.&lt;/p&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Thanks for reading! 🙏🏻 &lt;br&gt; I hope you found this useful ✅ &lt;br&gt; Please react and follow for more 😍 &lt;br&gt; Made with 💙 by &lt;a href="https://dev.to/hadil"&gt;Hadil Ben Abdallah&lt;/a&gt;
&lt;/th&gt;
&lt;th&gt;
&lt;a href="https://www.linkedin.com/in/hadil-ben-abdallah/" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu48q29oef3l4a6eow30h.png" alt="LinkedIn" width="40" height="40"&gt;&lt;/a&gt; &lt;a href="https://github.com/Hadil-Ben-Abdallah" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhuvszgj6eun7xfvnwv51.png" alt="GitHub" width="50" height="50"&gt;&lt;/a&gt; &lt;a href="https://x.com/hadilbnabdallah" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F53x550t83v5ner74xkxo.jpg" alt="Twitter" width="40" height="40"&gt;&lt;/a&gt;
&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;div class="ltag__user ltag__user__id__1209000"&gt;
    &lt;a href="/hadil" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1209000%2Fb29d37d8-2efe-4391-9796-a6f8a483f1bd.png" alt="hadil image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/hadil"&gt;Hadil Ben Abdallah&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/hadil"&gt;Software Engineer • Technical Writer (300K+ readers &amp;amp; 25K+ followers) • Trusted by 20+ startups and tech companies worldwide
I turn brands into websites people 💙 to use&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>performance</category>
    </item>
    <item>
      <title>You’re a Real Python Developer Only If...</title>
      <dc:creator>Hadil Ben Abdallah</dc:creator>
      <pubDate>Mon, 12 Oct 2026 13:15:32 +0000</pubDate>
      <link>https://dev.to/hadil/youre-a-real-python-developer-only-if-94e</link>
      <guid>https://dev.to/hadil/youre-a-real-python-developer-only-if-94e</guid>
      <description>&lt;p&gt;A few months ago, I published &lt;a href="https://dev.to/hadil/youre-a-real-javascript-developer-only-if-294c"&gt;You're a Real JavaScript Developer Only If...&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It was supposed to be a little post for fun.&lt;/p&gt;

&lt;p&gt;You know, just a few things JavaScript developers could laugh about before going back to fighting their bugs 😅&lt;/p&gt;

&lt;p&gt;But the community loved it, and the comments made me realize that developers have an incredible talent for turning their daily struggles into comedy.&lt;/p&gt;

&lt;p&gt;Then &lt;a class="mentioned-user" href="https://dev.to/sylwia-lask"&gt;@sylwia-lask&lt;/a&gt; published her own take, &lt;a href="https://dev.to/sylwia-lask/youre-a-real-software-developer-only-if-2mo8"&gt;You're a Real Software Developer Only If…&lt;/a&gt; and surprised me how much fun this kind of post can be.&lt;/p&gt;

&lt;p&gt;So I kept the fun going.&lt;/p&gt;

&lt;p&gt;I published &lt;a href="https://dev.to/hadil/youre-a-real-typescript-developer-only-if-1d9o"&gt;You're a Real TypeScript Developer Only If...&lt;/a&gt;, and now I'm back for another round with Python.&lt;/p&gt;

&lt;p&gt;Well, Python developers have a very special relationship with whitespace 😂&lt;/p&gt;

&lt;p&gt;They also have virtual environments, mysterious package conflicts, notebooks full of experiments, and that script that was supposed to take five minutes, but it became an entire project.&lt;/p&gt;

&lt;p&gt;So, Python developers, this one's for you.&lt;/p&gt;

&lt;p&gt;You're a real Python developer only if...&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvcfuri5bwo6ap0t90042.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvcfuri5bwo6ap0t90042.png" alt="Python developer girl" width="800" height="801"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🤏🏻 You forgot one tiny indentation
&lt;/h2&gt;

&lt;p&gt;Your code was almost perfect.&lt;/p&gt;

&lt;p&gt;Almost.&lt;/p&gt;

&lt;p&gt;Then Python reminded you that indentation is not just a formatting preference.&lt;/p&gt;

&lt;p&gt;It's the difference between a working program and a confusing afternoon.&lt;/p&gt;




&lt;h2&gt;
  
  
  📦 You installed a package and broke everything
&lt;/h2&gt;

&lt;p&gt;Everything was working perfectly.&lt;/p&gt;

&lt;p&gt;Then you ran:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;some-package
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Suddenly, another package needs a different version.&lt;/p&gt;

&lt;p&gt;Your project has trust issues.&lt;/p&gt;

&lt;p&gt;And you're asking what brought you here.&lt;/p&gt;


&lt;h2&gt;
  
  
  🧪 You created a virtual environment...
&lt;/h2&gt;

&lt;p&gt;...and forgot to activate it.&lt;/p&gt;

&lt;p&gt;You installed all your dependencies.&lt;/p&gt;

&lt;p&gt;You ran your script.&lt;/p&gt;

&lt;p&gt;And Python told you the module doesn't exist.&lt;/p&gt;

&lt;p&gt;You installed it again.&lt;/p&gt;

&lt;p&gt;Same problem.&lt;/p&gt;

&lt;p&gt;Then you realized you were using the wrong environment.&lt;/p&gt;


&lt;h2&gt;
  
  
  🐼 You imported pandas just to open a CSV file
&lt;/h2&gt;

&lt;p&gt;At first, it was a simple CSV.&lt;/p&gt;

&lt;p&gt;A few rows. A few columns. Nothing complicated.&lt;/p&gt;

&lt;p&gt;Then you started cleaning the data, filtering records, grouping results, and creating charts.&lt;/p&gt;

&lt;p&gt;Three hours later, you're building an entire data analysis pipeline.&lt;/p&gt;

&lt;p&gt;And you're having a great time.&lt;/p&gt;


&lt;h2&gt;
  
  
  🤔 You wrote a list comprehension and felt unstoppable
&lt;/h2&gt;

&lt;p&gt;You started with a simple loop.&lt;/p&gt;

&lt;p&gt;Then you discovered list comprehensions.&lt;/p&gt;

&lt;p&gt;Now everything looks like this:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;squares&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;You could have written three lines, but this fits on one.&lt;/p&gt;

&lt;p&gt;And that makes it better.&lt;/p&gt;


&lt;h2&gt;
  
  
  🐞 You used &lt;code&gt;print()&lt;/code&gt; to debug everything
&lt;/h2&gt;

&lt;p&gt;You could have used a debugger.&lt;/p&gt;

&lt;p&gt;You could have added proper logging.&lt;/p&gt;

&lt;p&gt;You could have investigated the issue systematically.&lt;/p&gt;

&lt;p&gt;Instead:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;HERE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;WHY IS THIS NONE?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;And somehow, you found the bug.&lt;/p&gt;


&lt;h2&gt;
  
  
  📓 Your Jupyter notebook became a crime scene
&lt;/h2&gt;

&lt;p&gt;You have cells numbered &lt;code&gt;[1]&lt;/code&gt;, &lt;code&gt;[7]&lt;/code&gt;, &lt;code&gt;[14]&lt;/code&gt;, and &lt;code&gt;[39]&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Some cells have been run five times.&lt;/p&gt;

&lt;p&gt;Others haven't been touched since the day before.&lt;/p&gt;

&lt;p&gt;One variable contains the result of an experiment you no longer remember.&lt;/p&gt;

&lt;p&gt;And restarting the kernel feels like playing Russian roulette with your entire afternoon.&lt;/p&gt;


&lt;h2&gt;
  
  
  🧠 You discovered that &lt;code&gt;is&lt;/code&gt; and &lt;code&gt;==&lt;/code&gt; are not the same thing
&lt;/h2&gt;

&lt;p&gt;You thought they did the same job.&lt;/p&gt;

&lt;p&gt;Then someone explained object identity versus equality.&lt;/p&gt;

&lt;p&gt;You nodded.&lt;/p&gt;

&lt;p&gt;You understood the explanation.&lt;/p&gt;

&lt;p&gt;You closed the article.&lt;/p&gt;

&lt;p&gt;And six months later, you still pause for a few moments whenever you write one of them.&lt;/p&gt;

&lt;p&gt;Just to be safe.&lt;/p&gt;


&lt;h2&gt;
  
  
  🐛 You caught a bug caused by &lt;code&gt;None&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Everything looked reasonable. The function ran. The variable existed.&lt;/p&gt;

&lt;p&gt;But you were trying to perform an operation on &lt;code&gt;None&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;And the error message was basically Python saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"You gave me nothing. What exactly did you expect?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Fair enough.&lt;/p&gt;


&lt;h2&gt;
  
  
  🔄 You turned a simple script into a reusable module
&lt;/h2&gt;

&lt;p&gt;You needed to rename a few files.&lt;/p&gt;

&lt;p&gt;So you wrote a quick script.&lt;/p&gt;

&lt;p&gt;Then you added arguments.&lt;/p&gt;

&lt;p&gt;Then error handling.&lt;/p&gt;

&lt;p&gt;Then logging.&lt;/p&gt;

&lt;p&gt;Then a configuration file.&lt;/p&gt;

&lt;p&gt;Then a README.&lt;/p&gt;

&lt;p&gt;At some point, you stopped calling it a script.&lt;/p&gt;

&lt;p&gt;It's a tool now.&lt;/p&gt;

&lt;p&gt;And you're considering publishing it on GitHub.&lt;/p&gt;


&lt;h2&gt;
  
  
  📚 You read the documentation and still had questions
&lt;/h2&gt;

&lt;p&gt;Python has excellent documentation.&lt;/p&gt;

&lt;p&gt;You know this and you appreciate it.&lt;/p&gt;

&lt;p&gt;But sometimes you just want to know why a three-line example works in the tutorial and fails in your project.&lt;/p&gt;

&lt;p&gt;So you open another tab. Then another.&lt;/p&gt;

&lt;p&gt;And somehow, you're reading a discussion about a completely different problem.&lt;/p&gt;

&lt;p&gt;That's programming.&lt;/p&gt;


&lt;h2&gt;
  
  
  🧹 You ran a formatter and discovered how much you needed it
&lt;/h2&gt;

&lt;p&gt;Your code worked. &lt;/p&gt;

&lt;p&gt;Your variable names made sense to you.&lt;/p&gt;

&lt;p&gt;Your spacing was... creative.&lt;/p&gt;

&lt;p&gt;Then you ran Black.&lt;/p&gt;

&lt;p&gt;You didn't change the logic.&lt;/p&gt;

&lt;p&gt;But you feel more professional already.&lt;/p&gt;


&lt;h2&gt;
  
  
  🚀 You wrote a Python script that worked locally...
&lt;/h2&gt;

&lt;p&gt;...then discovered the server had a different Python version.&lt;/p&gt;

&lt;p&gt;Or a missing dependency.&lt;/p&gt;

&lt;p&gt;Or a different environment variable.&lt;/p&gt;

&lt;p&gt;Or permissions you didn't know existed.&lt;/p&gt;

&lt;p&gt;Your little script was supposed to automate a boring task.&lt;/p&gt;

&lt;p&gt;Now you're learning deployment.&lt;/p&gt;

&lt;p&gt;Character development comes in many forms.&lt;/p&gt;


&lt;h2&gt;
  
  
  🧩 You used &lt;code&gt;try/except&lt;/code&gt; because you didn't want to see the error
&lt;/h2&gt;

&lt;p&gt;You had an exception.&lt;/p&gt;

&lt;p&gt;You didn't understand it.&lt;/p&gt;

&lt;p&gt;So you wrote:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;do_the_thing&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;pass&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Problem solved!&lt;/p&gt;

&lt;p&gt;Well, technically, the error disappeared.&lt;/p&gt;

&lt;p&gt;The actual problem is still in the shadows.&lt;/p&gt;

&lt;p&gt;And future-you is going to have some questions.&lt;/p&gt;


&lt;h2&gt;
  
  
  💛 You started learning Python because it looked simple
&lt;/h2&gt;

&lt;p&gt;The syntax was clean.&lt;/p&gt;

&lt;p&gt;The examples were easy to follow.&lt;/p&gt;

&lt;p&gt;You could write something useful without spending half your day configuring a project.&lt;/p&gt;

&lt;p&gt;You thought, "This language is so friendly!"&lt;/p&gt;

&lt;p&gt;Then you met asynchronous programming, dependency management, packaging, decorators, and type hints.&lt;/p&gt;

&lt;p&gt;Python is still friendly.&lt;/p&gt;

&lt;p&gt;It just has a few rooms you haven't explored yet.&lt;/p&gt;


&lt;h2&gt;
  
  
  ☕ You said, "I'll automate this little task"
&lt;/h2&gt;

&lt;p&gt;You were doing something repetitive.&lt;/p&gt;

&lt;p&gt;Surely, writing a script would save time.&lt;/p&gt;

&lt;p&gt;So you spent two hours automating a task that takes five minutes.&lt;/p&gt;

&lt;p&gt;Was it worth it?&lt;/p&gt;

&lt;p&gt;Absolutely.&lt;/p&gt;

&lt;p&gt;Will you admit how long it took?&lt;/p&gt;

&lt;p&gt;Absolutely not.&lt;/p&gt;


&lt;h2&gt;
  
  
  🐍 The Python Developer Paradox
&lt;/h2&gt;

&lt;p&gt;Here's the funny part.&lt;/p&gt;

&lt;p&gt;You can spend an entire afternoon fighting with dependencies, wondering why your notebook has forgotten every variable, or trying to understand an error that looks completely unrelated to your code.&lt;/p&gt;

&lt;p&gt;And the next day you open Python again.&lt;/p&gt;

&lt;p&gt;Because you know how much you can build with it.&lt;/p&gt;

&lt;p&gt;Python always has another interesting project waiting for you.&lt;/p&gt;


&lt;h2&gt;
  
  
  💬 Your Turn!
&lt;/h2&gt;

&lt;p&gt;Python developers, although this list ended up being longer than I expected, but I know it still is missing some classics.&lt;/p&gt;

&lt;p&gt;What's the most &lt;em&gt;"Python developer"&lt;/em&gt; thing you've ever done?&lt;/p&gt;

&lt;p&gt;Tell me your stories in the comments 😄&lt;/p&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Thanks for reading! 🙏🏻 &lt;br&gt; I hope you found this useful ✅ &lt;br&gt; Please react and follow for more 😍 &lt;br&gt; Made with 💙 by &lt;a href="https://dev.to/hadil"&gt;Hadil Ben Abdallah&lt;/a&gt;
&lt;/th&gt;
&lt;th&gt;
&lt;a href="https://www.linkedin.com/in/hadil-ben-abdallah/" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu48q29oef3l4a6eow30h.png" alt="LinkedIn" width="40" height="40"&gt;&lt;/a&gt; &lt;a href="https://github.com/Hadil-Ben-Abdallah" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhuvszgj6eun7xfvnwv51.png" alt="GitHub" width="50" height="50"&gt;&lt;/a&gt; &lt;a href="https://x.com/hadilbnabdallah" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F53x550t83v5ner74xkxo.jpg" alt="Twitter" width="40" height="40"&gt;&lt;/a&gt;
&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;div class="ltag__user ltag__user__id__1209000"&gt;
    &lt;a href="/hadil" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1209000%2Fb29d37d8-2efe-4391-9796-a6f8a483f1bd.png" alt="hadil image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/hadil"&gt;Hadil Ben Abdallah&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/hadil"&gt;Software Engineer • Technical Writer (300K+ readers &amp;amp; 25K+ followers) • Trusted by 20+ startups and tech companies worldwide
I turn brands into websites people 💙 to use&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>python</category>
      <category>programming</category>
      <category>discuss</category>
      <category>ruby</category>
    </item>
    <item>
      <title>5 Best AI Gateways</title>
      <dc:creator>Hadil Ben Abdallah</dc:creator>
      <pubDate>Mon, 12 Oct 2026 09:05:21 +0000</pubDate>
      <link>https://dev.to/hadil/5-best-ai-gateways-1o72</link>
      <guid>https://dev.to/hadil/5-best-ai-gateways-1o72</guid>
      <description>&lt;p&gt;Choosing between the &lt;strong&gt;best AI gateways&lt;/strong&gt; is not just about getting a way to call an LLM.&lt;/p&gt;

&lt;p&gt;In real deployments, teams face more than one model vendor. Models can change over time. Traffic is not steady. Token prices keep going up. Agent style workflows can get hard to manage. A gateway lets engineers manage these moving parts in one spot, instead of writing provider-specific code across the app.&lt;/p&gt;

&lt;p&gt;Still, not every gateway is meant for the same job. Some tools focus on a smooth developer setup and quick onboarding. Others aim for wide provider support and more control over choices. A few run close to the edge. Others are built for large scale production use, where throughput and enterprise needs matter.&lt;/p&gt;

&lt;p&gt;This write-up compares &lt;strong&gt;five AI gateways&lt;/strong&gt;: Bifrost, Cloudflare AI Gateway, Vercel AI Gateway, LiteLLM, and OpenRouter.&lt;/p&gt;

&lt;p&gt;We will cover what counts for live use. That includes speed, provider access, reliability, routing, logs and tracing, cost limits, deployment options, and how simple it is to hook the gateway into your code.&lt;/p&gt;




&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;AI gateways are an important part of the modern AI stack, but the &lt;strong&gt;best AI gateway&lt;/strong&gt; for your application depends on where you host it and what you need from the gateway.&lt;/p&gt;

&lt;p&gt;Below is a short review of five gateways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.getmaxim.ai/bifrost" rel="noopener noreferrer"&gt;Bifrost&lt;/a&gt;&lt;/strong&gt;: Built for real production use. It is &lt;a href="https://getmax.im/github/bifrost" rel="noopener noreferrer"&gt;open source&lt;/a&gt;. It handles routing and failover. It also brings governance and observability. It includes MCP and agent features too. You can deploy it for teams that want enterprise setups.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.cloudflare.com/developer-platform/products/ai-gateway/" rel="noopener noreferrer"&gt;Cloudflare AI Gateway&lt;/a&gt;&lt;/strong&gt;: This one runs on Cloudflare’s edge. It supports routing across providers. It adds analytics, caching, and retry logic. It also ties into the rest of Cloudflare’s platform.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://vercel.com/ai-gateway" rel="noopener noreferrer"&gt;Vercel AI Gateway&lt;/a&gt;&lt;/strong&gt;: This is a managed choice. The focus is on easy setup. It targets teams building with modern web tools and AI SDKs. The goal is quick integration.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.litellm.ai/" rel="noopener noreferrer"&gt;LiteLLM&lt;/a&gt;&lt;/strong&gt;: It is &lt;a href="https://github.com/BerriAI/litellm" rel="noopener noreferrer"&gt;open source&lt;/a&gt; and written in Python. It covers many model providers. It offers an OpenAI-style interface. That helps if you want one client style while you switch between providers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://openrouter.ai/" rel="noopener noreferrer"&gt;OpenRouter&lt;/a&gt;&lt;/strong&gt;: This is a hosted API gateway. It routes models for you. It lets developers use a wide set of models and providers. You access them through one API.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the end, the gap between these tools is control. Some help you reach many models fast. Others give you more control over how requests route, how the system runs, how it stays reliable, and how you can see what is happening in production.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is an AI Gateway (And Why Does It Matter in Production)?
&lt;/h2&gt;

&lt;p&gt;An &lt;strong&gt;AI gateway&lt;/strong&gt; is a layer that could be added between your app and the AI models or providers it uses.&lt;/p&gt;

&lt;p&gt;Instead of connecting your application separately to OpenAI, Anthropic, Google, AWS, and other providers, an AI gateway can give your application a unified interface for sending requests and managing what happens around those requests.&lt;/p&gt;

&lt;p&gt;Depending on the platform, an AI gateway can provide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Unified APIs&lt;/strong&gt; that reduce provider-specific integration work&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model routing&lt;/strong&gt; across different providers and models&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automatic retries and failover&lt;/strong&gt; when a provider has an issue&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Observability&lt;/strong&gt; for requests, latency, errors, tokens, and usage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Caching&lt;/strong&gt; to reduce repeated model calls and costs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rate limits and budgets&lt;/strong&gt; for controlling AI usage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Access controls&lt;/strong&gt; for teams, applications, or users&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP and agent support&lt;/strong&gt; for more complex AI workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This matters more as your AI app gets bigger.&lt;/p&gt;

&lt;p&gt;A prototype might call one model directly from a single application. A production system can end up depending on several models, multiple providers, different environments, and thousands of requests per minute.&lt;/p&gt;

&lt;p&gt;Without a centralized gateway, provider configuration and reliability logic can spread across the application codebase. Changing models, handling provider failures, tracking costs, or introducing usage policies can then require changes in several places.&lt;/p&gt;

&lt;p&gt;A gateway gives your engineering team a clear place to manage these issues. Your app code can stay focused on the product.&lt;/p&gt;




&lt;h2&gt;
  
  
  How We Evaluated These AI Gateways
&lt;/h2&gt;

&lt;p&gt;This comparison is about where AI gateways land in real work settings. It is not only about the feature list on a sales page.&lt;/p&gt;

&lt;p&gt;The main criteria are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Performance and scalability&lt;/li&gt;
&lt;li&gt;Model and provider coverage&lt;/li&gt;
&lt;li&gt;Routing and failover&lt;/li&gt;
&lt;li&gt;Observability and cost control&lt;/li&gt;
&lt;li&gt;Ease of integration&lt;/li&gt;
&lt;li&gt;Deployment and infrastructure flexibility&lt;/li&gt;
&lt;li&gt;Open-source availability and enterprise capabilities&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Quick Comparison: The 5 Best AI Gateways
&lt;/h2&gt;

&lt;p&gt;This comparison of the &lt;strong&gt;best AI gateways&lt;/strong&gt; highlights the differences in deployment, provider access, performance, and pricing. Use it to narrow down the options that best fit your production requirements.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;AI Gateway&lt;/th&gt;
&lt;th&gt;Runtime / Model&lt;/th&gt;
&lt;th&gt;Open Source&lt;/th&gt;
&lt;th&gt;Key Strength&lt;/th&gt;
&lt;th&gt;Pricing Model&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bifrost&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Go&lt;/td&gt;
&lt;td&gt;✓ Apache 2.0 core&lt;/td&gt;
&lt;td&gt;Performance, routing, reliability, governance&lt;/td&gt;
&lt;td&gt;Free self-hosted; Enterprise custom&lt;/td&gt;
&lt;td&gt;High-traffic production AI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cloudflare AI Gateway&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cloudflare Edge&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;td&gt;Edge integration, analytics, caching&lt;/td&gt;
&lt;td&gt;Free core; usage-based Cloudflare costs&lt;/td&gt;
&lt;td&gt;Cloudflare-based applications&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Vercel AI Gateway&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Managed&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;td&gt;Developer experience, routing, web integration&lt;/td&gt;
&lt;td&gt;Free tier; paid plans&lt;/td&gt;
&lt;td&gt;Vercel and frontend-heavy teams&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;LiteLLM&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;Provider coverage and flexibility&lt;/td&gt;
&lt;td&gt;Free self-hosted; managed options&lt;/td&gt;
&lt;td&gt;Multi-provider and Python teams&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OpenRouter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Managed&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;td&gt;Large model catalog and unified API&lt;/td&gt;
&lt;td&gt;Usage-based&lt;/td&gt;
&lt;td&gt;Developers needing broad model access&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;It gets easier to tell them apart when you compare real production flow. Look at how each gateway manages live traffic. Also check how it handles provider setup. Finally, review what they do around AI request routing and supporting infrastructure.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Bifrost (by Maxim AI)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fon973ppiukyl9lhuaqcl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fon973ppiukyl9lhuaqcl.png" alt="Bifrost AI Gateway for production AI workloads, model routing, MCP, agents, and enterprise infrastructure" width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bifrost&lt;/strong&gt; is an &lt;a href="https://getmax.im/github/bifrost" rel="noopener noreferrer"&gt;open-source&lt;/a&gt; AI gateway and control plane built for production AI infrastructure. It gives engineering and platform teams a single interface for routing requests across models and providers while handling reliability, governance, observability, and cost controls from the same layer.&lt;/p&gt;

&lt;p&gt;Bifrost is designed for environments where the gateway itself becomes an important part of the production request path. It supports &lt;strong&gt;10,000+ models across 25+ providers&lt;/strong&gt;, and provides an OpenAI-compatible API, so existing applications can connect by changing the API base URL.&lt;/p&gt;

&lt;p&gt;It also goes beyond traditional LLM routing. Bifrost can govern &lt;strong&gt;LLM requests&lt;/strong&gt;, &lt;strong&gt;MCP tool calls&lt;/strong&gt;, and &lt;strong&gt;AI agent traffic&lt;/strong&gt; through the same gateway, with enterprise capabilities for identity, access control, security, and deployment inside the customer's own infrastructure.&lt;/p&gt;

&lt;h3&gt;
  
  
  Production Performance and Reliability
&lt;/h3&gt;

&lt;p&gt;An AI gateway adds another layer to every request, so its own performance can have a direct effect on the application using it.&lt;/p&gt;

&lt;p&gt;Bifrost is built in Go with the request path optimized for low overhead. Its architecture keeps configuration in memory, pools and warms memory at startup, and maintains provider connections so requests do not repeatedly pay connection or database costs.&lt;/p&gt;

&lt;p&gt;In a benchmark on AWS EC2 with 500 concurrent users over 60-second runs (&lt;a href="https://www.getmaxim.ai/resources/benchmarks" rel="noopener noreferrer"&gt;benchmark results&lt;/a&gt;), Bifrost delivered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;424 requests/second&lt;/strong&gt; versus 44.84 requests/second for LiteLLM&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;804 ms P50 latency&lt;/strong&gt; versus 38.65 seconds&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;1.68 seconds P99 latency&lt;/strong&gt; versus 90.72 seconds&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;120 MB memory usage&lt;/strong&gt; versus 372 MB&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;100% success rate&lt;/strong&gt; versus 88.78%&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Actual performance depends on infrastructure, workload, provider latency, and configuration, so it is worth testing with your own traffic.&lt;/p&gt;

&lt;p&gt;For larger production deployments, Bifrost Enterprise adds cluster mode, adaptive load balancing, circuit breakers, automatic failover, and zero-downtime deployments.&lt;/p&gt;

&lt;h3&gt;
  
  
  Routing, Governance, and AI Traffic Control
&lt;/h3&gt;

&lt;p&gt;Bifrost provides a unified gateway for model and provider routing, with support for weighted load balancing, retries, and automatic fallback.&lt;/p&gt;

&lt;p&gt;Teams can route requests across different models and providers while keeping application integrations behind a single API. Governance controls can then be applied to that traffic without requiring each application team to implement the same rules independently.&lt;/p&gt;

&lt;p&gt;Core capabilities include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Routing across 10,000+ models and 25+ providers&lt;/li&gt;
&lt;li&gt;Weighted load balancing and provider failover&lt;/li&gt;
&lt;li&gt;Budgets and rate limits through virtual keys&lt;/li&gt;
&lt;li&gt;Semantic caching for repeated requests&lt;/li&gt;
&lt;li&gt;Prometheus metrics and OpenTelemetry tracing&lt;/li&gt;
&lt;li&gt;Integrations with platforms such as Datadog, Kafka, BigQuery, Pub/Sub, and Splunk&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bifrost also supports &lt;a href="https://www.getmaxim.ai/mcp-gateway" rel="noopener noreferrer"&gt;MCP Gateway&lt;/a&gt; capabilities, allowing models and agents to discover and call tools through the same infrastructure. Tool filtering, authentication, agent mode, and MCP server functionality extend the gateway beyond conventional model routing.&lt;/p&gt;

&lt;p&gt;For large tool environments, &lt;a href="https://docs.getbifrost.ai/mcp/code-mode" rel="noopener noreferrer"&gt;MCP Code Mode&lt;/a&gt; lets the model orchestrate tools through sandboxed code instead of carrying every tool definition inside the prompt. Code Mode cuts input tokens by up to &lt;strong&gt;92.8%&lt;/strong&gt; across large tool sets.&lt;/p&gt;

&lt;h3&gt;
  
  
  Deployment and Enterprise Control
&lt;/h3&gt;

&lt;p&gt;Bifrost is designed for organizations that need control over where their AI infrastructure runs and where their data stays.&lt;/p&gt;

&lt;p&gt;The gateway can run as a single binary across environments including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Virtual machines&lt;/li&gt;
&lt;li&gt;Kubernetes&lt;/li&gt;
&lt;li&gt;Private cloud&lt;/li&gt;
&lt;li&gt;VPC infrastructure&lt;/li&gt;
&lt;li&gt;On-premises environments&lt;/li&gt;
&lt;li&gt;Air-gapped networks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The open-source core is licensed under &lt;strong&gt;Apache 2.0&lt;/strong&gt;, while &lt;a href="https://www.getmaxim.ai/enterprise" rel="noopener noreferrer"&gt;Bifrost Enterprise&lt;/a&gt; adds capabilities such as identity-based governance, fine-grained access control, guardrails, signed audit logs, secret management, and high-availability infrastructure.&lt;/p&gt;

&lt;p&gt;Bifrost also includes &lt;a href="https://www.getmaxim.ai/edge" rel="noopener noreferrer"&gt;Bifrost Edge&lt;/a&gt;, which extends gateway control to employee devices.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pricing
&lt;/h3&gt;

&lt;p&gt;Bifrost's open-source version is free forever for self-hosted use under the Apache 2.0 license.&lt;/p&gt;

&lt;p&gt;Bifrost Enterprise uses custom pricing and includes a 14-day free trial.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best for
&lt;/h3&gt;

&lt;p&gt;Bifrost is built for businesses that require high-level performance, scalability, and reliability ability that are crucial to AI deployment. Its primary function is to act as a gateway through which all AI traffic goes through the system in a guided and secure manner. Bifrost combines its LLM, MCP, and Agents gateways into a single platform. It covers industries subject to regulations and strict business needs, including air-gapped deployment, VPC isolation, and on premises infrastructure. It offers complete control over data, access, and execution, as well as huge security capabilities.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://getmax.im/bifrosty" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Explore Bifrost&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Cloudflare AI Gateway
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxcew0ajx8ieltgw0zmb2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxcew0ajx8ieltgw0zmb2.png" alt="Cloudflare AI Gateway as a centralized layer for managing AI requests" width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cloudflare AI Gateway&lt;/strong&gt; provides a centralized layer for managing AI requests across different model providers while keeping those requests within the Cloudflare ecosystem. It is designed for teams that want more control over AI traffic without building a separate gateway layer from scratch.&lt;/p&gt;

&lt;p&gt;The gateway works as a proxy between applications and AI providers, giving teams a consistent endpoint for sending requests while adding capabilities such as &lt;strong&gt;caching&lt;/strong&gt;, &lt;strong&gt;rate limiting&lt;/strong&gt;, &lt;strong&gt;retries&lt;/strong&gt;, &lt;strong&gt;logging&lt;/strong&gt;, and &lt;strong&gt;analytics&lt;/strong&gt;. This can make it easier to monitor AI usage and manage production traffic as applications scale.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pricing
&lt;/h3&gt;

&lt;p&gt;Cloudflare AI Gateway has a free gateway layer, while the underlying AI provider usage and other Cloudflare services can incur their own costs. Pricing therefore depends largely on the Cloudflare products being used and the volume of AI traffic generated.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best for
&lt;/h3&gt;

&lt;p&gt;Cloudflare AI Gateway is best for teams already using Cloudflare infrastructure that want centralized AI traffic management, observability, caching, and control without introducing a separate AI gateway stack.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.cloudflare.com/developer-platform/products/ai-gateway/" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Explore Cloudflare AI Gateway&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Vercel AI Gateway
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkxlnu3jw2wizriz4wlj5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkxlnu3jw2wizriz4wlj5.png" alt="Vercel AI Gateway for unified AI model access, routing, and application development" width="799" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vercel AI Gateway&lt;/strong&gt; is built for teams that are developing &lt;strong&gt;AI-powered web applications&lt;/strong&gt; and want a simple way to connect their applications to multiple model providers.&lt;/p&gt;

&lt;p&gt;The gateway provides a unified interface for model access while handling infrastructure concerns such as &lt;strong&gt;provider routing&lt;/strong&gt;, &lt;strong&gt;failover&lt;/strong&gt;, and &lt;strong&gt;model selection&lt;/strong&gt;. This can reduce the amount of provider-specific logic developers need to maintain inside their applications.&lt;/p&gt;

&lt;p&gt;Its biggest appeal is the developer experience. Teams already building with Vercel, Next.js, and the AI SDK can adopt an AI gateway without introducing a large amount of additional infrastructure to their stack.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pricing
&lt;/h3&gt;

&lt;p&gt;Vercel AI Gateway offers a free way to get started, with additional Vercel plans and usage-related costs depending on the deployment and services a team uses. BYOK configurations can also use provider pricing directly without additional token markup from Vercel.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best for
&lt;/h3&gt;

&lt;p&gt;Vercel AI Gateway is best for frontend and full-stack teams building AI applications with Vercel that prioritize developer experience, fast integration, and straightforward access to multiple AI models.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://vercel.com/ai-gateway" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Explore Vercel AI Gateway&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  4. LiteLLM
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb5hb50f6x2lsz1zpc1kx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb5hb50f6x2lsz1zpc1kx.png" alt="LiteLLM gateway for multi-provider AI model routing and OpenAI-compatible APIs" width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LiteLLM&lt;/strong&gt; is one of the most widely used &lt;a href="https://github.com/BerriAI/litellm" rel="noopener noreferrer"&gt;open-source&lt;/a&gt; AI gateways for teams that want a common interface across different model providers. Built around Python, it provides an OpenAI-compatible API that lets applications connect to hundreds of models and providers without implementing separate integrations for each one.&lt;/p&gt;

&lt;p&gt;Its biggest advantage is flexibility. LiteLLM supports a broad range of providers and gives developers tools for &lt;strong&gt;model routing&lt;/strong&gt;, &lt;strong&gt;fallbacks&lt;/strong&gt;, &lt;strong&gt;load balancing&lt;/strong&gt;, &lt;strong&gt;retries&lt;/strong&gt;, &lt;strong&gt;spend tracking&lt;/strong&gt;, &lt;strong&gt;rate limits&lt;/strong&gt;, and &lt;strong&gt;observability&lt;/strong&gt;. That makes it useful for teams experimenting with different models or building applications that need to switch providers without rewriting their application logic.&lt;/p&gt;

&lt;p&gt;LiteLLM can be deployed as a self-hosted proxy, making it attractive to engineering teams that want control over their AI infrastructure. It also offers managed cloud options for teams that do not want to operate the gateway themselves.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pricing
&lt;/h3&gt;

&lt;p&gt;LiteLLM's open-source gateway can be self-hosted for free, with infrastructure and model-provider costs remaining the main expenses. Managed and cloud offerings have separate pricing based on the services and usage involved.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best for
&lt;/h3&gt;

&lt;p&gt;LiteLLM is best for developers and engineering teams that need broad model and provider coverage, flexible routing, and an open-source AI gateway they can customize and self-host.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.litellm.ai/" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Explore LiteLLM&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  5. OpenRouter
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F93vvg5pd9wz140bt87kg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F93vvg5pd9wz140bt87kg.png" alt="OpenRouter AI gateway for accessing multiple AI models through a unified API" width="800" height="368"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OpenRouter&lt;/strong&gt; takes a different approach to the &lt;strong&gt;AI gateway&lt;/strong&gt; problem by providing a unified API for accessing a large catalog of AI models from different providers. Developers can use one API and switch between models without building separate integrations for every provider.&lt;/p&gt;

&lt;p&gt;This makes OpenRouter useful when model choice is a major part of the development workflow. Teams can compare models, experiment with different providers, and route requests through a common interface while keeping the application integration relatively simple.&lt;/p&gt;

&lt;p&gt;OpenRouter also provides features such as &lt;strong&gt;model routing&lt;/strong&gt;, &lt;strong&gt;provider selection&lt;/strong&gt;, &lt;strong&gt;usage tracking&lt;/strong&gt;, and &lt;strong&gt;fallbacks&lt;/strong&gt;, depending on the configuration and models being used. For developers who want fast access to a broad model ecosystem without operating their own gateway infrastructure, that simplicity can be a major advantage.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pricing
&lt;/h3&gt;

&lt;p&gt;OpenRouter generally charges based on model usage, with pricing determined by the underlying models and providers. Some models may also be available at no cost, while paid models follow their respective usage rates.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best for
&lt;/h3&gt;

&lt;p&gt;OpenRouter is best for developers and AI teams that want a single API for accessing and experimenting with a large selection of models without managing multiple provider integrations themselves.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://openrouter.ai/" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Explore OpenRouter&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  How to Choose the Right AI Gateway
&lt;/h2&gt;

&lt;p&gt;Choosing an AI gateway is not about looking for the one that offers the most features. It's about understanding your application's needs as it develops.&lt;/p&gt;

&lt;p&gt;Here’s what to consider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;How many models and vendors do I need to work with?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your application relies on different providers, look for broad provider coverage, a uniform API, and consistent behavior across models. A gateway that simplifies switching providers can save significant engineering time as your application grows.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;How critical are speed and dependability?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For customer-facing AI applications, gateway overhead and provider failures can directly affect the user experience. Look for fast request processing, automatic retries, availability-aware routing, and high availability. Bifrost is worth evaluating when low latency, throughput, and production reliability are priorities.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Do I want an open-source or a hosted solution?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An open-source gateway gives your team more control over deployment, customization, and infrastructure, but your team is responsible for operating it. A hosted gateway reduces maintenance and can simplify onboarding. Choose based on your team's infrastructure capabilities, security requirements, and need for operational control.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;How do I keep track of AI costs?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As AI usage grows across applications and teams, costs can become harder to track. Look for budgets, rate limits, usage reports, and analytics that help you understand spending by model, provider, application, or team. Bifrost is worth considering when centralized cost controls and usage visibility are important.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Where will the gateway be implemented?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Consider your deployment requirements before choosing a gateway. A hosted service may suit teams that want minimal infrastructure work, while organizations with strict data-control requirements may need a private-cloud, VPC, on-premises, or air-gapped deployment. Bifrost supports these deployment models, making it a relevant option for enterprises that need greater control over their AI infrastructure.&lt;/p&gt;

&lt;p&gt;A gateway that works perfectly for an early-stage application may not be the right choice once traffic, model usage, and operational requirements increase. Evaluating those constraints early makes the decision easier.&lt;/p&gt;




&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is an AI gateway used for?
&lt;/h3&gt;

&lt;p&gt;→ An AI gateway provides a centralized layer between an application and the AI models or providers it uses. When evaluating the &lt;strong&gt;best AI gateways&lt;/strong&gt;, look for capabilities such as model routing, authentication, retries, monitoring, rate limiting, and cost management.&lt;/p&gt;

&lt;p&gt;This becomes more valuable as an application grows and starts using multiple models or providers. A centralized layer can keep provider-specific logic out of individual applications and give engineering teams a consistent way to manage AI traffic.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the difference between an AI gateway and an API gateway?
&lt;/h3&gt;

&lt;p&gt;→ An API gateway is designed to manage traffic between applications and backend services, handling concerns such as authentication, routing, rate limiting, and request policies.&lt;/p&gt;

&lt;p&gt;An AI gateway applies similar principles to AI workloads, but adds capabilities specific to model traffic. These can include model selection, provider routing, token and usage tracking, AI-specific fallbacks, prompt-related controls, and support for different model providers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Should I use an open-source or managed AI gateway?
&lt;/h3&gt;

&lt;p&gt;→ The right choice depends on how much infrastructure control your team needs and how much operational work it wants to take on.&lt;/p&gt;

&lt;p&gt;Open-source gateways can provide greater control over deployment, configuration, customization, and data handling. They can be a good fit for teams with strong infrastructure capabilities or strict security requirements.&lt;/p&gt;

&lt;p&gt;Managed gateways reduce the operational burden because the provider handles much of the underlying infrastructure. They can be attractive to teams that want to integrate multiple AI providers quickly without maintaining another production service.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can an AI gateway reduce AI costs?
&lt;/h3&gt;

&lt;p&gt;→ An AI gateway can help reduce and control AI spending, but it does not automatically make model usage cheaper.&lt;/p&gt;

&lt;p&gt;Cost savings can come from capabilities such as model routing, caching, rate limits, budgets, and usage tracking. For example, an application can route simpler requests to lower-cost models, cache repeated requests, or enforce spending limits for individual teams or applications.&lt;/p&gt;

&lt;p&gt;The actual savings depend on how the gateway is configured and how AI traffic is managed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do I need an AI gateway if my application only uses one AI provider?
&lt;/h3&gt;

&lt;p&gt;→ Not necessarily. A small application using one provider may not need the additional infrastructure or operational layer.&lt;/p&gt;

&lt;p&gt;An AI gateway can still be useful when the application needs centralized observability, rate limiting, cost controls, security policies, or a clean way to introduce additional models later. The decision should be based on the operational requirements of the application rather than simply the number of providers being used.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;AI gateways are a core part of the architecture of production AI applications. As the number of models, providers, agents, and AI tools a team uses increases, managing each integration separately gets harder.&lt;/p&gt;

&lt;p&gt;The five platforms in this guide address that challenge in different ways, but &lt;strong&gt;Bifrost is my top pick for production and enterprise AI workloads&lt;/strong&gt;. Its combination of performance, reliability, routing, governance, and flexible deployment makes it a strong option for teams that need control over their AI infrastructure.&lt;/p&gt;

&lt;p&gt;Bifrost unifies LLM gateway, MCP gateway, and agent capabilities in one platform. It also supports self-hosted, VPC, on-premises, and air-gapped deployments, which makes it a strong fit for enterprises with demanding security, governance, and infrastructure requirements.&lt;/p&gt;

&lt;p&gt;The other gateways have clear use cases, too. &lt;strong&gt;Cloudflare AI Gateway&lt;/strong&gt; is a natural fit for teams already using Cloudflare. &lt;strong&gt;Vercel AI Gateway&lt;/strong&gt; suits teams building with Vercel and Next.js. &lt;strong&gt;LiteLLM&lt;/strong&gt; is a flexible option for Python teams that want an open-source gateway, while &lt;strong&gt;OpenRouter&lt;/strong&gt; is useful for developers who want broad model access through one API.&lt;/p&gt;

&lt;p&gt;When comparing the &lt;strong&gt;best AI gateways&lt;/strong&gt;, consider performance, reliability, model access, observability, cost controls, security, and deployment requirements. For teams running mission-critical AI workloads, Bifrost stands out as the leading choice in this comparison because it combines these production needs with enterprise governance and infrastructure flexibility.&lt;/p&gt;

&lt;p&gt;For a simple application, a lightweight managed solution will do. For a larger AI platform that handles heavy production traffic, model routing, agent workflows, and enterprise policies, the gateway becomes an essential part of the architecture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose the AI gateway based on the problems you need to solve. If production performance, reliability, governance, and deployment control are your priorities, Bifrost is the first option I'd evaluate.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Teams evaluating AI gateways can &lt;a href="https://getmaxim.ai/bifrost/book-a-demo" rel="noopener noreferrer"&gt;request a Bifrost demo&lt;/a&gt; or &lt;a href="https://github.com/maximhq/bifrost" rel="noopener noreferrer"&gt;review the open-source repository&lt;/a&gt;.&lt;/p&gt;




&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Thanks for reading! 🙏🏻 &lt;br&gt; I hope you found this useful ✅ &lt;br&gt; Please react and follow for more 😍 &lt;br&gt; Made with 💙 by &lt;a href="https://dev.to/hadil"&gt;Hadil Ben Abdallah&lt;/a&gt;
&lt;/th&gt;
&lt;th&gt;
&lt;a href="https://www.linkedin.com/in/hadil-ben-abdallah/" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu48q29oef3l4a6eow30h.png" alt="LinkedIn" width="40" height="40"&gt;&lt;/a&gt; &lt;a href="https://github.com/Hadil-Ben-Abdallah" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhuvszgj6eun7xfvnwv51.png" alt="GitHub" width="50" height="50"&gt;&lt;/a&gt; &lt;a href="https://x.com/hadilbnabdallah" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F53x550t83v5ner74xkxo.jpg" alt="Twitter" width="40" height="40"&gt;&lt;/a&gt;
&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;div class="ltag__user ltag__user__id__1209000"&gt;
    &lt;a href="/hadil" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1209000%2Fb29d37d8-2efe-4391-9796-a6f8a483f1bd.png" alt="hadil image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/hadil"&gt;Hadil Ben Abdallah&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/hadil"&gt;Software Engineer • Technical Writer (300K+ readers &amp;amp; 25K+ followers) • Trusted by 20+ startups and tech companies worldwide
I turn brands into websites people 💙 to use&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>ai</category>
      <category>llm</category>
      <category>python</category>
      <category>programming</category>
    </item>
    <item>
      <title>Your Code Editor Says More About You Than You Think</title>
      <dc:creator>Hadil Ben Abdallah</dc:creator>
      <pubDate>Thu, 01 Oct 2026 08:47:31 +0000</pubDate>
      <link>https://dev.to/hadil/your-code-editor-says-more-about-you-than-you-think-2jfd</link>
      <guid>https://dev.to/hadil/your-code-editor-says-more-about-you-than-you-think-2jfd</guid>
      <description>&lt;p&gt;You might think that your code editor is just a tool you're using to write code, but I think it's a personality type, a lifestyle choice...&lt;/p&gt;

&lt;p&gt;If you disagree, you might be using Notepad. And in that case, I think you need help 😄&lt;/p&gt;

&lt;p&gt;Let's see which one you're using.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. VS Code
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fynvpj76vhdhwd5teyzam.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fynvpj76vhdhwd5teyzam.jpg" alt="VS Code meme" width="639" height="541"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I think this is the king of the modern dev jungle. &lt;/p&gt;

&lt;p&gt;If you use VS Code, you're the kind of person who walks into a coffee shop, orders something complicated, and still finds time to install ten new extensions before the drink is ready.&lt;/p&gt;

&lt;p&gt;VS Code users love control. You want customization, but in a click-to-install kind of way. Your workspace has 17 tabs open, GitHub Copilot is writing half your code, and you're still Googling how to center a div.&lt;/p&gt;

&lt;p&gt;You don't have one theme. You have a rotating mood board of themes you switch depending on the project, the weather, and your emotional state.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. IntelliJ
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbuyvhw1o4c4l822cba79.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbuyvhw1o4c4l822cba79.png" alt="IntelliJ meme" width="800" height="819"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you're rolling with IntelliJ or anything from JetBrains, congratulations 🥳 You are a serious developer. &lt;/p&gt;

&lt;p&gt;You write Java, Kotlin, C#, Python, or something else that somehow requires 14 plugins and a dedicated settings file.&lt;/p&gt;

&lt;p&gt;You believe in static typing, design patterns, and paying for software.&lt;/p&gt;

&lt;p&gt;You don't just commit code, you architect it. And every time someone suggests using a lightweight editor, you just laugh. &lt;/p&gt;




&lt;h2&gt;
  
  
  3. Cursor
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fozxfjbcoss9n0i92bu0w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fozxfjbcoss9n0i92bu0w.png" alt="Cursor meme" width="537" height="492"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you use Cursor, you've decided that writing code yourself is becoming optional.&lt;/p&gt;

&lt;p&gt;You type a sentence, watch AI change 17 files, and then spend 10 minutes trying to figure out what it did.&lt;/p&gt;

&lt;p&gt;You probably have strong opinions about models, context windows, agents, and which AI is currently "cooking".&lt;/p&gt;

&lt;p&gt;You don't just debug anymore. You ask the AI why your code is broken, watch it confidently make things worse, and then ask it to fix the fix.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Vim
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fou21q8m9srsxumzy42oi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fou21q8m9srsxumzy42oi.png" alt="Vim meme" width="500" height="487"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you use Vim, I respect you. I also fear you. You operate purely from muscle memory, like a martial artist who's trained in complete darkness.&lt;/p&gt;

&lt;p&gt;You don't use a mouse because it's too slow. Your entire coding experience is basically an extreme sport. You once spent 3 hours configuring your &lt;code&gt;.vimrc&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;Sure, nobody taught you Vim. You were summoned by it. And let's be honest, part of you loves that other people can't figure it out. &lt;/p&gt;

&lt;p&gt;And you still have to explain to someone how to exit Vim at least once a year.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Zed
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fobexy25mv22nzigzg6ax.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fobexy25mv22nzigzg6ax.png" alt="Zed meme" width="800" height="1187"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you use Zed, you probably looked at every other editor and thought, "This is way too much".&lt;/p&gt;

&lt;p&gt;You want your editor fast. Really fast. You don't need 47 extensions, 12 panels, or a sidebar telling you things you didn't ask for.&lt;/p&gt;

&lt;p&gt;You open Zed, start typing, and wonder why everyone else is apparently okay with their editor taking 30 seconds to wake up.&lt;/p&gt;

&lt;p&gt;You're probably the kind of developer who says, "I just want to write code".&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Emacs
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv8xwhaeoiffo4hme7dmf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv8xwhaeoiffo4hme7dmf.png" alt="Emacs meme" width="612" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you use Emacs, you don't code; you create art. &lt;/p&gt;

&lt;p&gt;You've probably written your own Emacs extensions in Lisp. You don't just open files. You open entire ecosystems. &lt;/p&gt;

&lt;p&gt;Need a calendar? 👉🏻 Emacs.&lt;br&gt;
Need email? 👉🏻 Emacs.&lt;br&gt;
Need to order lunch? There's probably a package for that too.&lt;/p&gt;

&lt;p&gt;You're the kind of person who hears, just use a GUI, and responds with 300 lines of ELISP. &lt;/p&gt;


&lt;h2&gt;
  
  
  7. Eclipse
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi0g0gyt2uxa22awpsjnd.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi0g0gyt2uxa22awpsjnd.jpeg" alt="Eclipse meme" width="800" height="981"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you're still using Eclipse in 2026, stop it. You didn't start with Eclipse. Eclipse started with you. You probably had to use it in school or because the lead developer at your company refuses to upgrade anything that still technically works.&lt;/p&gt;

&lt;p&gt;You have patience. You have strength. You waited 5 minutes for it to open, and you stayed anyway. You are a hero.&lt;/p&gt;


&lt;h2&gt;
  
  
  8. Notepad
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvdvlufroz4hcdvbdwxw6.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvdvlufroz4hcdvbdwxw6.jpg" alt="Notepad meme" width="800" height="557"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Notepad users, I don't know who hurt you, but we're here for you. &lt;/p&gt;

&lt;p&gt;If you're writing full applications in Notepad, you either work for the government or you're punished.&lt;/p&gt;

&lt;p&gt;Syntax highlighting? Never heard of her.&lt;br&gt;
Autocomplete? That's what your memory is for.&lt;/p&gt;

&lt;p&gt;I don't have anything else to say about it.&lt;/p&gt;


&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Your IDE doesn't define you as a developer. It just says a lot about how you like to work.&lt;/p&gt;

&lt;p&gt;Some of us want a lightweight editor with a few extensions. &lt;br&gt;
Some want a full IDE that analyzes everything. &lt;br&gt;
Some want nothing but a terminal.&lt;/p&gt;

&lt;p&gt;And that's fine.&lt;/p&gt;

&lt;p&gt;It's not about which editor is “best”. It's about how much time you spend customizing it instead of actually writing code 😅&lt;/p&gt;

&lt;p&gt;💬 So, what are you using? Tell me your editor, and I'll try to guess your developer personality.&lt;br&gt;
And if you're still out here using Dreamweaver or Notepad, just give us a sign; we're here to help 😂&lt;/p&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Thanks for reading! 🙏🏻 &lt;br&gt; I hope you found this useful ✅ &lt;br&gt; Please react and follow for more 😍 &lt;br&gt; Made with 💙 by &lt;a href="https://dev.to/hadil"&gt;Hadil Ben Abdallah&lt;/a&gt;
&lt;/th&gt;
&lt;th&gt;
&lt;a href="https://www.linkedin.com/in/hadil-ben-abdallah/" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu48q29oef3l4a6eow30h.png" alt="LinkedIn" width="40" height="40"&gt;&lt;/a&gt; &lt;a href="https://github.com/Hadil-Ben-Abdallah" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhuvszgj6eun7xfvnwv51.png" alt="GitHub" width="50" height="50"&gt;&lt;/a&gt; &lt;a href="https://x.com/hadilbnabdallah" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F53x550t83v5ner74xkxo.jpg" alt="Twitter" width="40" height="40"&gt;&lt;/a&gt;
&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;div class="ltag__user ltag__user__id__1209000"&gt;
    &lt;a href="/hadil" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1209000%2Fb29d37d8-2efe-4391-9796-a6f8a483f1bd.png" alt="hadil image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/hadil"&gt;Hadil Ben Abdallah&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/hadil"&gt;Software Engineer • Technical Writer (300K+ readers &amp;amp; 25K+ followers) • Trusted by 20+ startups and tech companies worldwide
I turn brands into websites people 💙 to use&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>coding</category>
      <category>vscode</category>
      <category>java</category>
      <category>python</category>
    </item>
    <item>
      <title>Top 5 AI Governance Tools for Enterprises in 2026: A Practical Comparison</title>
      <dc:creator>Hadil Ben Abdallah</dc:creator>
      <pubDate>Mon, 28 Sep 2026 09:11:53 +0000</pubDate>
      <link>https://dev.to/hadil/top-5-ai-governance-tools-for-enterprises-in-2026-a-practical-comparison-kah</link>
      <guid>https://dev.to/hadil/top-5-ai-governance-tools-for-enterprises-in-2026-a-practical-comparison-kah</guid>
      <description>&lt;p&gt;AI is becoming part of almost every layer of an enterprise.&lt;/p&gt;

&lt;p&gt;Employees are using AI assistants. Developers are connecting coding agents to internal systems. Applications are calling multiple models behind the scenes. Agents can now invoke tools, access data, and take actions with very little human involvement.&lt;/p&gt;

&lt;p&gt;That creates a governance problem that goes far beyond choosing a model.&lt;/p&gt;

&lt;p&gt;Who can use which AI system? What data can it access? Which models and tools are approved? How are AI risks assessed? Can security teams see what is happening across the organization? And when something goes wrong, is there an audit trail showing what happened?&lt;/p&gt;

&lt;p&gt;This is where &lt;strong&gt;AI governance tools&lt;/strong&gt; come in.&lt;/p&gt;

&lt;p&gt;Modern enterprise AI governance platforms can help organizations manage AI inventories, assess risk, enforce policies, monitor usage, maintain compliance evidence, and establish accountability across AI systems. The exact approach varies significantly between products, though. Some focus heavily on governance workflows and risk management, and others bring governance directly into AI traffic, model access, agents, and tools.&lt;/p&gt;

&lt;p&gt;This guide compares &lt;strong&gt;five AI governance tools for enterprises in 2026&lt;/strong&gt;, looking at the capabilities that matter when AI moves from experimentation into production.&lt;/p&gt;




&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;If you need a quick overview before diving into the details, here’s what this comparison focuses on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://getmax.im/bifrosty" rel="noopener noreferrer"&gt;Bifrost&lt;/a&gt;&lt;/strong&gt;: A runtime-focused approach to AI governance, giving enterprises control over model requests, MCP tools, agents, access, budgets, guardrails, and auditability across AI traffic.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.ibm.com/products/watsonx-governance" rel="noopener noreferrer"&gt;IBM watsonx.governance&lt;/a&gt;&lt;/strong&gt;: Focuses on AI lifecycle governance, helping enterprises manage AI inventory, risk, compliance, policies, monitoring, and accountability.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.microsoft.com/en-us/security/business/microsoft-purview" rel="noopener noreferrer"&gt;Microsoft Purview&lt;/a&gt;&lt;/strong&gt;: Brings AI governance into Microsoft's broader data security and compliance ecosystem, with strong capabilities around sensitive data, AI applications, auditing, and Microsoft 365 environments.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.credo.ai/" rel="noopener noreferrer"&gt;Credo AI&lt;/a&gt;&lt;/strong&gt;: Provides a dedicated AI governance platform for managing AI systems, risks, policies, regulatory requirements, and emerging agent and MCP governance needs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.holisticai.com/" rel="noopener noreferrer"&gt;Holistic AI&lt;/a&gt;&lt;/strong&gt;: Takes an end-to-end governance approach covering AI discovery, risk assessment, testing, compliance, monitoring, and policy enforcement.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The main takeaway is that AI governance is much broader than simply approving AI models. Enterprises may need visibility, risk management, compliance, data protection, identity controls, runtime enforcement, and auditability working together.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Are AI Governance Tools?
&lt;/h2&gt;

&lt;p&gt;AI governance tools are software platforms that help organizations control, monitor, assess, and document how artificial intelligence is used across the enterprise.&lt;/p&gt;

&lt;p&gt;That can include everything from maintaining an inventory of AI systems and evaluating their risks to managing policies, tracking compliance requirements, monitoring model usage, and creating audit evidence.&lt;/p&gt;

&lt;p&gt;A useful way to think about AI governance is to split it into several connected questions:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What AI do we have?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Organizations need visibility into the models, applications, agents, AI-powered features, vendors, and tools being used across the business.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What are we allowed to do with it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Policies define which models, data sources, applications, users, and AI capabilities are acceptable for different teams and use cases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What could go wrong?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Risk management looks at issues such as sensitive data exposure, unreliable outputs, security risks, regulatory obligations, model behavior, third-party dependencies, and inappropriate AI usage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can we prove what happened?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Audit logs, assessments, approvals, monitoring, and evidence help security, compliance, and governance teams demonstrate how AI systems are being managed.&lt;/p&gt;

&lt;p&gt;Frameworks such as the &lt;strong&gt;NIST AI Risk Management Framework&lt;/strong&gt; organize AI risk management around activities including governing, mapping, measuring, and managing risks. ISO/IEC 42001 takes a broader management-system approach, providing requirements for establishing and continually improving an organization's AI management system.&lt;/p&gt;

&lt;p&gt;But there’s an important distinction for enterprise AI infrastructure.&lt;/p&gt;

&lt;p&gt;A governance platform can tell an organization that a particular model, application, or use case has a certain risk level. A runtime governance layer can also enforce controls &lt;strong&gt;when AI traffic is flowing&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  How We Evaluated These AI Governance Tools
&lt;/h2&gt;

&lt;p&gt;There is no single feature that makes an AI governance tool suitable for every enterprise.&lt;/p&gt;

&lt;p&gt;A company managing a few internal models has very different requirements from a financial institution running hundreds of AI applications, multiple model providers, autonomous agents, and strict compliance controls.&lt;/p&gt;

&lt;p&gt;For this comparison, the focus is on &lt;strong&gt;practical enterprise governance&lt;/strong&gt;, with attention to the following areas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI Visibility and Inventory&lt;/li&gt;
&lt;li&gt;Risk Management and Compliance&lt;/li&gt;
&lt;li&gt;Policy Enforcement&lt;/li&gt;
&lt;li&gt;Security and Access Control&lt;/li&gt;
&lt;li&gt;Observability and Auditability&lt;/li&gt;
&lt;li&gt;Enterprise Deployment&lt;/li&gt;
&lt;li&gt;Operational Fit&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Quick Comparison: Top 5 AI Governance Tools
&lt;/h2&gt;

&lt;p&gt;AI governance covers a wide range of problems, so these platforms do not all approach it from the same direction.&lt;/p&gt;

&lt;p&gt;Here’s a high-level comparison of the five tools covered in this guide:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;AI Governance Tool&lt;/th&gt;
&lt;th&gt;Main Focus&lt;/th&gt;
&lt;th&gt;Open-Source Version&lt;/th&gt;
&lt;th&gt;Enterprise Strength&lt;/th&gt;
&lt;th&gt;Pricing&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bifrost by Maxim AI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Runtime AI governance and infrastructure&lt;/td&gt;
&lt;td&gt;✔ (Apache 2.0 core)&lt;/td&gt;
&lt;td&gt;VPC, on-prem, air-gapped, self-hosted&lt;/td&gt;
&lt;td&gt;Free OSS; Enterprise custom pricing&lt;/td&gt;
&lt;td&gt;Enterprises needing governance enforced directly across AI traffic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;IBM watsonx.governance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AI lifecycle governance&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;Cloud and enterprise deployments&lt;/td&gt;
&lt;td&gt;From $3,500/month for Risk &amp;amp; Compliance Basic&lt;/td&gt;
&lt;td&gt;Organizations managing AI risk and governance across the lifecycle&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Microsoft Purview&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Data security, compliance, and AI governance&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;Deep Microsoft 365/Azure integration&lt;/td&gt;
&lt;td&gt;From $12/user/month&lt;/td&gt;
&lt;td&gt;Microsoft-centric organizations governing AI and sensitive data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Credo AI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AI governance and responsible AI&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;Enterprise integrations and governance workflows&lt;/td&gt;
&lt;td&gt;Custom pricing&lt;/td&gt;
&lt;td&gt;Enterprises building structured AI governance and regulatory programs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Holistic AI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AI discovery, risk, testing, compliance, and policy enforcement&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;Enterprise-focused platform&lt;/td&gt;
&lt;td&gt;Custom pricing&lt;/td&gt;
&lt;td&gt;Organizations seeking end-to-end AI risk and compliance governance&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The differences become much clearer once you look at how each platform handles governance in practice.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Bifrost by Maxim AI
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdshn3afy0lc02ev9ut3w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdshn3afy0lc02ev9ut3w.png" alt="Bifrost AI Gateway for enterprise AI governance, runtime AI traffic control, MCP governance, and AI agent security" width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bifrost approaches &lt;strong&gt;enterprise AI governance&lt;/strong&gt; from the infrastructure layer, using a centralized control plane in front of AI traffic.&lt;/p&gt;

&lt;p&gt;Here, “AI traffic” refers to requests and interactions involving models, AI agents, MCP tools, and AI applications that pass through the organization's infrastructure.&lt;/p&gt;

&lt;p&gt;The Gateway governs model requests, MCP tool calls, and agent activity.&lt;/p&gt;

&lt;p&gt;The platform is built for enterprises that want to run AI inside their own infrastructure. Bifrost supports deployment on virtual machines, Kubernetes, private cloud, VPC environments, on-premises infrastructure, and air-gapped networks. Its &lt;a href="https://getmax.im/github/bifrost" rel="noopener noreferrer"&gt;open-source&lt;/a&gt; core is licensed under Apache 2.0, while the enterprise tier adds capabilities aimed at high-availability, identity, security, and compliance requirements.&lt;/p&gt;

&lt;h3&gt;
  
  
  Governance Across Models, MCP Tools, and Agents
&lt;/h3&gt;

&lt;p&gt;One of Bifrost's main differences is the scope of traffic it can govern.&lt;/p&gt;

&lt;p&gt;The Gateway can sit in front of model providers while also handling MCP traffic and agent workflows. &lt;a href="https://docs.getbifrost.ai/features/governance/virtual-keys" rel="noopener noreferrer"&gt;Virtual keys&lt;/a&gt; can carry budgets, rate limits, and access rules, while MCP policies can control which tools are available to different clients or users. Enterprise features add identity-based governance, access profiles, guardrails, audit logs, and integrations with identity providers such as Okta, Microsoft Entra, Keycloak, Zitadel, and Google Workspace.&lt;/p&gt;

&lt;p&gt;Bifrost also supports &lt;a href="https://docs.getbifrost.ai/mcp/code-mode" rel="noopener noreferrer"&gt;MCP Code Mode&lt;/a&gt;, where large tool definitions can be replaced by a code-based orchestration approach. According to Maxim's published information, this can reduce input-token usage by up to 92.8% across large tool sets. Developers can explore the implementation and contribute through the &lt;a href="https://getmax.im/github/bifrost" rel="noopener noreferrer"&gt;Bifrost GitHub repository&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Runtime Performance and Overhead
&lt;/h3&gt;

&lt;p&gt;Governance controls eventually become part of the request path, so performance matters.&lt;/p&gt;

&lt;p&gt;Bifrost is built in Go and is designed around low gateway overhead, high throughput, and predictable resource usage. Maxim's published benchmark, run on AWS EC2 with 500 concurrent users and 60-second runs, reports &lt;strong&gt;424 requests/second&lt;/strong&gt; for Bifrost versus &lt;strong&gt;44.84 requests/second&lt;/strong&gt; for LiteLLM, along with lower reported P50 and P99 latency, lower memory usage, and a higher success rate in that test. &lt;/p&gt;

&lt;p&gt;These results come from Maxim AI's published benchmark under the stated test conditions and should not be interpreted as a universal performance comparison. Actual results can vary depending on infrastructure, workload, model providers, network conditions, configuration, and concurrency.&lt;/p&gt;

&lt;p&gt;The same published benchmark also reports around &lt;strong&gt;11 microseconds&lt;/strong&gt; of gateway overhead at &lt;strong&gt;5,000 requests/second&lt;/strong&gt; on a single instance, with a 100% success rate in that test.&lt;/p&gt;

&lt;h3&gt;
  
  
  Extending Governance to Employee Devices
&lt;/h3&gt;

&lt;p&gt;A centralized gateway can only govern traffic that actually reaches it.&lt;/p&gt;

&lt;p&gt;That creates a problem with &lt;strong&gt;shadow AI&lt;/strong&gt;. Employees can use tools such as ChatGPT, Claude, Cursor, coding agents, browser-based AI applications, and MCP servers directly from their machines, which can create AI traffic that does not pass through a central gateway.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.getmaxim.ai/edge" rel="noopener noreferrer"&gt;Bifrost Edge&lt;/a&gt; is designed to address that gap. It runs on employee devices and routes AI traffic through the &lt;a href="https://docs.getbifrost.ai/overview" rel="noopener noreferrer"&gt;Bifrost Gateway&lt;/a&gt;. Administrators can inventory supported AI applications and MCP servers, approve or deny them, and apply gateway policies to endpoint traffic. Edge supports macOS, Windows, and Linux, and can be deployed through existing device-management systems.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pricing
&lt;/h3&gt;

&lt;p&gt;Bifrost's open-source version is available under the Apache 2.0 license, while Bifrost Enterprise uses custom pricing. Enterprise includes a 14-day free trial, and Bifrost Edge is priced per endpoint.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best for
&lt;/h3&gt;

&lt;p&gt;Enterprises running mission-critical AI workloads that require best-in-class performance, scalability, and reliability. It serves as a centralized AI gateway to route, govern, and secure all AI traffic across models and environments with ultra-low latency. Bifrost unifies LLM gateway, MCP gateway, and Agents gateway capabilities into a single platform. Designed for regulated industries and strict enterprise requirements, it supports air-gapped deployments, VPC isolation, and on-prem infrastructure. It provides full control over data, access, and execution, along with robust security, policy enforcement, and governance capabilities&lt;/p&gt;

&lt;p&gt;&lt;a href="https://getmax.im/bifrosty" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Explore Bifrost&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  2. IBM watsonx.governance
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbvpyjtcqhoggzkcdtxqe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbvpyjtcqhoggzkcdtxqe.png" alt="IBM watsonx.governance platform for enterprise AI governance, AI risk management, compliance, and lifecycle oversight" width="800" height="313"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;IBM watsonx.governance is designed for organizations that need to manage &lt;strong&gt;AI risk, compliance, policies, and accountability across the AI lifecycle&lt;/strong&gt;. The platform provides visibility into AI systems and supports governance processes that span development, deployment, monitoring, and ongoing risk management.&lt;/p&gt;

&lt;p&gt;Its approach fits enterprises that already have formal risk and compliance processes in place. IBM positions watsonx.governance as an AI governance layer connected with enterprise GRC capabilities, helping teams manage policies, regulatory requirements, AI risks, and governance activities from a centralized environment.&lt;/p&gt;

&lt;p&gt;The platform also supports continuous monitoring, policy enforcement, regulatory alignment, and traceability. That makes it useful for organizations where AI governance needs to connect with existing risk, audit, and compliance operations, not operate as a separate workflow.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pricing
&lt;/h3&gt;

&lt;p&gt;IBM offers a 14-day free trial, with Risk &amp;amp; Compliance plans starting at $3,500/month for Basic and $6,450/month for Advanced. Pricing can vary by deployment, region, and purchasing model.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best for
&lt;/h3&gt;

&lt;p&gt;Large organizations that want AI governance integrated with established risk, compliance, audit, and enterprise governance processes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.ibm.com/products/watsonx-governance" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Explore IBM watsonx.governance&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Microsoft Purview
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F58rkwkdsgtn3wtso88bc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F58rkwkdsgtn3wtso88bc.png" alt="Microsoft Purview for AI governance, data security, compliance, and enterprise AI activity monitoring" width="800" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Microsoft Purview takes an AI governance approach centered heavily on &lt;strong&gt;data security, compliance, and visibility into AI usage&lt;/strong&gt;. This makes it especially relevant for organizations already using Microsoft 365, Azure, Microsoft Entra, and other Microsoft enterprise services.&lt;/p&gt;

&lt;p&gt;Purview's Data Security Posture Management for AI can help organizations discover and understand AI activity, identify data-security risks, and apply existing information protection and compliance controls to AI applications. Microsoft also supports governance and protection for supported AI agents, including Microsoft Copilot and Microsoft Foundry scenarios.&lt;/p&gt;

&lt;p&gt;A major strength here is the connection between AI governance and enterprise data governance. Purview can apply capabilities such as data classification, sensitivity labels, data loss prevention, auditing, and compliance management to supported AI interactions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pricing
&lt;/h3&gt;

&lt;p&gt;Microsoft Purview uses several licensing and consumption models. The Purview Suite is listed from $12/user/month when paid annually, while some capabilities use separate licensing or Azure consumption-based pricing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best for
&lt;/h3&gt;

&lt;p&gt;Organizations already invested in the Microsoft security, compliance, identity, and data ecosystem that want to extend those controls to generative AI and AI agents.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.microsoft.com/en-us/security/business/microsoft-purview" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Explore Microsoft Purview&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Credo AI
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foff4b5cxxkmtz61kij4p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foff4b5cxxkmtz61kij4p.png" alt="Credo AI enterprise governance platform for AI risk management, compliance, AI inventory, and responsible AI" width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Credo AI is a dedicated &lt;strong&gt;enterprise AI governance platform&lt;/strong&gt; focused on helping organizations discover AI systems, assess risk, manage policies, monitor AI usage, and maintain compliance across the AI lifecycle. Its platform includes an AI registry covering models, applications, agents, vendors, and shadow AI.&lt;/p&gt;

&lt;p&gt;The platform also uses a governance knowledge graph that connects regulatory requirements, business context, AI systems, risks, and controls. Credo AI supports policy packs and compliance mappings for frameworks, including the &lt;strong&gt;EU AI Act&lt;/strong&gt;, &lt;strong&gt;NIST AI RMF&lt;/strong&gt;, and &lt;strong&gt;ISO 42001&lt;/strong&gt;, with governance workflows designed to turn those requirements into operational processes.&lt;/p&gt;

&lt;p&gt;Credo AI has also expanded its focus toward agent governance, including agent registries, agent-specific risk assessments, MCP server governance, dependency mapping, continuous monitoring, and policy controls for autonomous AI systems.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pricing
&lt;/h3&gt;

&lt;p&gt;Credo AI does not publish standard platform pricing publicly; enterprise customers need to contact the company for a tailored quote based on their governance requirements and deployment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best for
&lt;/h3&gt;

&lt;p&gt;Enterprises building a dedicated AI governance and responsible AI program, especially teams that need structured risk management, regulatory mapping, AI inventories, and governance workflows across many AI systems.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.credo.ai/" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Explore Credo AI&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Holistic AI
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fim5067n711gndqot9m19.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fim5067n711gndqot9m19.png" alt="Holistic AI governance platform for enterprise AI discovery, risk assessment, testing, compliance, and monitoring" width="799" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Holistic AI takes an end-to-end approach to &lt;strong&gt;enterprise AI governance&lt;/strong&gt;, organizing its platform around three areas: &lt;strong&gt;Identify&lt;/strong&gt;, &lt;strong&gt;Protect&lt;/strong&gt;, and &lt;strong&gt;Enforce&lt;/strong&gt;. The platform is designed to discover AI systems across an organization's cloud, code, SaaS, and vendor environment, then assess risk and apply governance controls.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Identify&lt;/strong&gt; layer focuses on AI discovery and inventory, including models, agents, APIs, pipelines, datasets, and shadow AI. Holistic AI also provides an agent graph to map relationships between agents, tools, models, data, and workflows.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Protect&lt;/strong&gt; layer covers AI risk assessment and testing. Its published capabilities include automated testing for areas such as bias, robustness, privacy, hallucination, toxicity, and security, alongside red-teaming for agentic AI and continuous monitoring after deployment.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Enforce&lt;/strong&gt; layer connects governance policies with compliance workflows and audit evidence. Holistic AI maps controls to frameworks, including the EU AI Act, NIST AI RMF, and ISO/IEC 42001, and its Guardian Agents are designed to monitor AI behavior and apply governance controls based on configured policies and risk thresholds.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pricing
&lt;/h3&gt;

&lt;p&gt;Holistic AI uses an enterprise, custom-quote pricing model and does not publish standard plans or prices publicly. Organizations need to contact its sales team for pricing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best for
&lt;/h3&gt;

&lt;p&gt;Enterprises looking for a broad AI governance lifecycle, from discovering AI systems and assessing their risks to monitoring them and operationalizing compliance controls.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.holisticai.com/" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Explore Holistic AI&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  AI Governance Tools vs. AI Security and Runtime Controls
&lt;/h2&gt;

&lt;p&gt;One of the easiest mistakes when researching &lt;strong&gt;AI governance software&lt;/strong&gt; is treating every product in the market as if it solves the same problem.&lt;/p&gt;

&lt;p&gt;A useful way to think about the landscape is through layers:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Governance Layer&lt;/th&gt;
&lt;th&gt;Typical Questions&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI inventory&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;What AI systems do we have? Who owns them?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Risk &amp;amp; compliance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;What risks exist? Which policies and regulations apply?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI lifecycle governance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Was the system reviewed, approved, tested, and monitored?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data governance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;What data can AI access or expose?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Runtime governance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Which models, tools, and agents can actually be called?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI security&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Can unsafe requests, sensitive data, or malicious activity be detected and blocked?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Endpoint governance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;What happens when employees use AI tools directly from their devices?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Audit &amp;amp; observability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Can the organization prove what happened?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This layered view also helps explain why two products can both legitimately call themselves AI governance platforms while solving very different problems.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to Choose the Right AI Governance Tool
&lt;/h2&gt;

&lt;p&gt;Choosing an &lt;strong&gt;AI governance tool for an enterprise&lt;/strong&gt; is not simply about comparing feature lists. Different platforms operate at different layers of the AI stack, so the right choice depends on what your organization needs to control, how AI is being used, and where governance needs to be enforced.&lt;/p&gt;

&lt;p&gt;Before choosing a platform, work through these five areas:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Define What You Actually Need to Govern
&lt;/h3&gt;

&lt;p&gt;Start by identifying the AI systems and activities that need oversight.&lt;/p&gt;

&lt;p&gt;Make a list of the assets you need to govern, models, applications, agents, data, users, tools, and endpoints, before comparing vendors. This makes it much easier to identify which platforms actually match your environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Separate Governance From Runtime Enforcement
&lt;/h3&gt;

&lt;p&gt;Ask whether you need a system that documents and manages governance policies, or one that can also enforce those policies while AI is being used.&lt;/p&gt;

&lt;p&gt;For organizations running production AI, this distinction is important because having a policy that says "only approved models may be used" is different from having a technical control that can actually enforce that requirement.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Check Compliance, Security, and Data Requirements
&lt;/h3&gt;

&lt;p&gt;Enterprise AI governance is closely connected to security and regulatory requirements. Check whether the platform supports the frameworks and controls relevant to your organization, such as NIST AI RMF, ISO/IEC 42001, GDPR, or the EU AI Act.&lt;/p&gt;

&lt;p&gt;Also look at practical security requirements: SSO, RBAC, audit logs, data protection, guardrails, identity integrations, and secret management.&lt;/p&gt;

&lt;p&gt;If sensitive information cannot leave your environment, deployment architecture becomes equally important. Check whether the platform supports the required cloud, VPC, on-premises, or air-gapped deployment model.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Consider Your Existing Enterprise Stack
&lt;/h3&gt;

&lt;p&gt;An AI governance platform rarely operates alone. It needs to work with the systems your organization already uses for identity, security, observability, compliance, and infrastructure.&lt;/p&gt;

&lt;p&gt;Look for integrations with existing identity providers, SIEM/security platforms, monitoring systems, data platforms, ticketing tools, and cloud infrastructure.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Test It With a Real AI Workflow
&lt;/h3&gt;

&lt;p&gt;A vendor's feature list is not enough. Before making a decision, test the platform against a realistic enterprise workflow.&lt;/p&gt;

&lt;p&gt;For example, take an AI application that calls multiple models and an MCP tool. Then test how the platform handles identity, permissions, sensitive data, policy enforcement, failed requests, budgets, logging, and auditing.&lt;/p&gt;

&lt;p&gt;Also measure operational factors such as performance, scalability, deployment complexity, and administration.&lt;/p&gt;




&lt;h2&gt;
  
  
  Frequently Asked Questions About AI Governance
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is AI governance in simple terms?
&lt;/h3&gt;

&lt;p&gt;→ AI governance is the collection of policies, processes, responsibilities, and technical controls an organization uses to manage how artificial intelligence is developed and used. It covers areas such as AI risk, security, privacy, compliance, accountability, access control, monitoring, and documentation.&lt;br&gt;
Frameworks such as the NIST AI RMF and ISO/IEC 42001 provide structured approaches for managing these risks and responsibilities.&lt;/p&gt;
&lt;h3&gt;
  
  
  Why is AI governance important for enterprises?
&lt;/h3&gt;

&lt;p&gt;→ AI governance becomes important as AI moves from experimentation into production.&lt;br&gt;
An enterprise may have hundreds of AI applications, multiple model providers, internal agents, employee-facing AI tools, and external services. Without clear ownership and controls, it becomes difficult to know which systems exist, what data they access, what risks they introduce, and whether organizational policies are actually being followed.&lt;br&gt;
Good governance gives teams a repeatable way to manage those risks while maintaining visibility as AI adoption grows.&lt;/p&gt;
&lt;h3&gt;
  
  
  What is the difference between AI governance and AI security?
&lt;/h3&gt;

&lt;p&gt;→ They overlap, but they are not identical.&lt;br&gt;
AI governance focuses on policies, accountability, risk management, compliance, ownership, and oversight.&lt;br&gt;
AI security focuses more directly on protecting AI systems, models, data, users, and infrastructure from security threats.&lt;br&gt;
Runtime governance connects some of these areas by enforcing policies during actual AI requests.&lt;/p&gt;
&lt;h3&gt;
  
  
  Can one AI governance platform govern models, agents, and MCP tools?
&lt;/h3&gt;

&lt;p&gt;→ It depends on the platform. &lt;br&gt;
Traditional AI governance platforms may focus on models, applications, risk, policies, and compliance, while newer platforms can also govern agent and MCP activity. The important consideration is whether the platform can actually observe and enforce controls across the AI components your organization uses.&lt;/p&gt;

&lt;p&gt;Bifrost, for example, treats model calls, MCP tool calls, and agent traffic as AI traffic that can pass through the same governance layer. Its MCP capabilities include tool filtering, authentication, and Code Mode.&lt;/p&gt;
&lt;h3&gt;
  
  
  Do enterprises need more than one AI governance tool?
&lt;/h3&gt;

&lt;p&gt;→ Sometimes.&lt;br&gt;
An organization may already have separate platforms for GRC, data security, model monitoring, identity, endpoint management, and runtime AI infrastructure.&lt;br&gt;
The goal does not necessarily need to be replacing all of them with one product. A better approach is to determine which governance responsibilities each existing system handles and identify the gaps between them.&lt;/p&gt;


&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;AI governance is becoming an essential part of building and operating AI at enterprise scale.&lt;/p&gt;

&lt;p&gt;As organizations adopt more models, AI applications, agents, and automated workflows, governance needs to keep pace with that growth. Simply having an internal AI policy is not enough if teams cannot see what AI systems exist, understand their risks, control access, protect sensitive data, and demonstrate what happened when something goes wrong.&lt;/p&gt;

&lt;p&gt;A practical AI governance strategy should connect people, policies, processes, and technology. It should also evolve as the organization's AI footprint changes.&lt;/p&gt;

&lt;p&gt;The right approach will depend on the company's industry, regulatory requirements, AI workloads, existing security infrastructure, and level of AI maturity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ultimately, effective AI governance should make AI adoption more visible, controlled, accountable, and easier to scale responsibly.&lt;/strong&gt;&lt;/p&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Thanks for reading! 🙏🏻 &lt;br&gt; I hope you found this useful ✅ &lt;br&gt; Please react and follow for more 😍 &lt;br&gt; Made with 💙 by &lt;a href="https://dev.to/hadil"&gt;Hadil Ben Abdallah&lt;/a&gt;
&lt;/th&gt;
&lt;th&gt;
&lt;a href="https://www.linkedin.com/in/hadil-ben-abdallah/" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu48q29oef3l4a6eow30h.png" alt="LinkedIn" width="40" height="40"&gt;&lt;/a&gt; &lt;a href="https://github.com/Hadil-Ben-Abdallah" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhuvszgj6eun7xfvnwv51.png" alt="GitHub" width="50" height="50"&gt;&lt;/a&gt; &lt;a href="https://x.com/hadilbnabdallah" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F53x550t83v5ner74xkxo.jpg" alt="Twitter" width="40" height="40"&gt;&lt;/a&gt;
&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;div class="ltag__user ltag__user__id__1209000"&gt;
    &lt;a href="/hadil" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1209000%2Fb29d37d8-2efe-4391-9796-a6f8a483f1bd.png" alt="hadil image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/hadil"&gt;Hadil Ben Abdallah&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/hadil"&gt;Software Engineer • Technical Writer (300K+ readers &amp;amp; 25K+ followers) • Trusted by 20+ startups and tech companies worldwide
I turn brands into websites people 💙 to use&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>ai</category>
      <category>llm</category>
      <category>python</category>
      <category>mcp</category>
    </item>
    <item>
      <title>7 Lies PMs Tell Engineers</title>
      <dc:creator>Hadil Ben Abdallah</dc:creator>
      <pubDate>Wed, 23 Sep 2026 09:04:39 +0000</pubDate>
      <link>https://dev.to/hadil/7-lies-pms-tell-engineers-1nla</link>
      <guid>https://dev.to/hadil/7-lies-pms-tell-engineers-1nla</guid>
      <description>&lt;p&gt;If you work with software engineers long enough, you start noticing something strange.&lt;/p&gt;

&lt;p&gt;PMs have a special talent.&lt;/p&gt;

&lt;p&gt;They can take a sentence that sounds completely harmless and make an engineer's entire afternoon disappear.&lt;/p&gt;

&lt;p&gt;To be fair, most PMs aren't actually trying to lie to engineers.&lt;/p&gt;

&lt;p&gt;Sometimes they genuinely don't know how some things are complicated.&lt;/p&gt;

&lt;p&gt;But after hearing the same sentences over and over again, you start developing a little internal translator.&lt;/p&gt;

&lt;p&gt;So, for fun, here are &lt;strong&gt;7 lies PMs tell engineers&lt;/strong&gt;, according to engineers who have definitely never complained about PMs in Slack.&lt;/p&gt;

&lt;p&gt;Obviously 😄&lt;/p&gt;




&lt;h2&gt;
  
  
  1. “It’s just a tiny update. It should take 15 minutes.”
&lt;/h2&gt;

&lt;p&gt;This one deserves to be number one.&lt;/p&gt;

&lt;p&gt;A PM comes to you with a request from the client.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“They just want one small change on the dashboard. It shouldn't take more than 15 minutes.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You look at the ticket. The requested change is one sentence.&lt;/p&gt;

&lt;p&gt;You look at the code. The requested change is no longer one sentence.&lt;/p&gt;

&lt;p&gt;Maybe that “small” UI change depends on data coming from an API. Maybe the API doesn't return the information you need. Maybe the backend gets its data from another service. Maybe that service has a completely different structure. Maybe changing the backend response will affect three other components.&lt;/p&gt;

&lt;p&gt;And then there is testing.&lt;/p&gt;

&lt;p&gt;And then there is the possibility that nobody knows why the existing code was written that way because the person who wrote it left the company two years ago.&lt;/p&gt;

&lt;p&gt;So, the 15-minute task has become a full day.&lt;/p&gt;

&lt;p&gt;And when you finally explain this, you get:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“But the client said it's very simple.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Of course they did.&lt;/p&gt;

&lt;p&gt;The client doesn't have to open the repository. He just sees a button.&lt;/p&gt;

&lt;p&gt;You see the 14 things that happen after someone clicks the button.&lt;/p&gt;

&lt;p&gt;That's one of the biggest differences between &lt;strong&gt;how clients see software changes and how engineers see them&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is why I think PMs should be allowed to say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I don't know how long this will take. Let me ask the engineer.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  2. “We can add it quickly. It’s basically the same feature.”
&lt;/h2&gt;

&lt;p&gt;This one usually arrives right after the previous one.&lt;/p&gt;

&lt;p&gt;You already have Feature A.&lt;/p&gt;

&lt;p&gt;The client now wants Feature B.&lt;/p&gt;

&lt;p&gt;The PM looks at Feature A and says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“We already have something similar, so we can probably reuse most of it.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sometimes that's true.&lt;/p&gt;

&lt;p&gt;But sometimes “similar” means the two features have the same color and absolutely nothing else in common.&lt;/p&gt;

&lt;p&gt;The problem is that software features can look identical from the outside while being completely different underneath.&lt;/p&gt;

&lt;p&gt;A user might see two forms.&lt;/p&gt;

&lt;p&gt;An engineer might see two completely different validation rules, API endpoints, permissions, database relationships, error states, and edge cases.&lt;/p&gt;

&lt;p&gt;And then we just hear:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Can't we just copy the existing one?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Copying something can take five minutes. Making sure the copied version behaves correctly everywhere can take much longer.&lt;/p&gt;

&lt;p&gt;This is also where engineers sometimes get blamed for “overcomplicating” something.&lt;/p&gt;

&lt;p&gt;But we're not trying to turn a simple button into a distributed system.&lt;/p&gt;

&lt;p&gt;We're trying to avoid discovering next week that the button we copied quietly broke something else.&lt;/p&gt;

&lt;p&gt;Sometimes the feature really is easy.&lt;/p&gt;

&lt;p&gt;Sometimes it only looks easy because the difficult parts are hidden behind the screen.&lt;/p&gt;

&lt;p&gt;And engineers have a slightly unfortunate habit of knowing where those hidden parts are.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. “The client definitely won’t change their mind.”
&lt;/h2&gt;

&lt;p&gt;This sentence should probably come with a warning label.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Don't worry, this is the final requirement.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There is no such thing as a final requirement.&lt;/p&gt;

&lt;p&gt;Okay, that's unfair.&lt;/p&gt;

&lt;p&gt;There probably is.&lt;/p&gt;

&lt;p&gt;I've just never personally met one.&lt;/p&gt;

&lt;p&gt;You finish the implementation. You test it. You deploy it. You finally feel that moment of peace.&lt;/p&gt;

&lt;p&gt;Then the message arrives:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Small feedback from the client…”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The “small feedback” turns out to be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Move this section.&lt;/li&gt;
&lt;li&gt;Add another filter.&lt;/li&gt;
&lt;li&gt;Change how the data is calculated.&lt;/li&gt;
&lt;li&gt;Make it work on mobile.&lt;/li&gt;
&lt;li&gt;Add an export button.&lt;/li&gt;
&lt;li&gt;Also, can we make it available to admins only?&lt;/li&gt;
&lt;li&gt;And the client wants the old behavior back.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At this point, the engineer is staring at the screen wondering whether “final requirement” was ever a real concept or just something PMs say to help everyone sleep at night.&lt;/p&gt;

&lt;p&gt;Of course, requirements can change. That's normal in software development.&lt;/p&gt;

&lt;p&gt;The frustrating part is pretending they won't.&lt;/p&gt;

&lt;p&gt;I'd rather hear:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“This is what the client wants right now, but there may be changes after they see it.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Perfect.&lt;/p&gt;

&lt;p&gt;Now I know what I'm dealing with.&lt;/p&gt;

&lt;p&gt;No false promises. No magical 15-minute estimates. No emotional damage when the “final” version becomes version 2.7.&lt;/p&gt;

&lt;p&gt;And honestly, that's probably the biggest thing engineers want from PMs:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Just tell us what you know, what you don't know, and what might change.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We can work with that.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. “We don't need to worry about edge cases yet.”
&lt;/h2&gt;

&lt;p&gt;This sentence sounds reasonable until the edge case becomes the thing the customer is experiencing.&lt;/p&gt;

&lt;p&gt;You build the feature for the normal situation.&lt;/p&gt;

&lt;p&gt;A user enters a valid email. The API returns the expected data. The user has the correct permissions. The database contains exactly what everyone expected it to contain.&lt;/p&gt;

&lt;p&gt;Great.&lt;/p&gt;

&lt;p&gt;Then someone enters an empty value. Or a name with 200 characters. Or clicks the button twice. Or loses their internet connection at exactly the wrong moment. Or somehow manages to have an account created in 2018 with a data structure that nobody has seen since the dinosaurs walked the Earth.&lt;/p&gt;

&lt;p&gt;And 😢&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“We should probably handle that.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Yes.&lt;/p&gt;

&lt;p&gt;We probably should.&lt;/p&gt;

&lt;p&gt;This is one of those conversations where PMs and engineers can have very different ideas about what “done” means.&lt;/p&gt;

&lt;p&gt;I'm not saying every tiny feature needs six days of testing and a 40-page technical specification.&lt;/p&gt;

&lt;p&gt;There has to be some balance.&lt;/p&gt;

&lt;p&gt;But “we'll deal with edge cases later” has a funny habit of turning into “why did production just explode?”&lt;/p&gt;

&lt;p&gt;And the answer is...&lt;/p&gt;

&lt;p&gt;Because later arrived.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. “We don't need a ticket for this. I'll remember it.”
&lt;/h2&gt;

&lt;p&gt;No. You won't. I won't. Nobody will.&lt;/p&gt;

&lt;p&gt;We're developers. We already have 37 tabs open because we were afraid we'd forget something.&lt;/p&gt;

&lt;p&gt;Please make the ticket.&lt;/p&gt;

&lt;p&gt;The request might sound tiny:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Can you also change the error message?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sure.&lt;/p&gt;

&lt;p&gt;Then someone mentions it during a meeting.&lt;/p&gt;

&lt;p&gt;And it gets mentioned again in Slack.&lt;/p&gt;

&lt;p&gt;And someone says they'll add it to the ticket.&lt;/p&gt;

&lt;p&gt;But days later, everyone remembers that there was something about an error message, but nobody remembers exactly what it was supposed to say.&lt;/p&gt;

&lt;p&gt;And somehow I'm looking at a Slack conversation from Tuesday trying to reconstruct a requirement from four messages and a thumbs-up emoji.&lt;/p&gt;

&lt;p&gt;A ticket doesn't need to be a novel.&lt;/p&gt;

&lt;p&gt;Even something like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Change the login error message from X to Y.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;is enough.&lt;/p&gt;

&lt;p&gt;It gives everyone one place to check.&lt;/p&gt;

&lt;p&gt;It also protects engineers from the classic:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“But we talked about this!”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Tickets aren't just for project managers.&lt;/p&gt;

&lt;p&gt;They're useful for engineers because they give us a written record of what we're actually supposed to build.&lt;/p&gt;

&lt;p&gt;And if the requirement changes later, great.&lt;/p&gt;

&lt;p&gt;Update the ticket.&lt;/p&gt;

&lt;p&gt;Now we have history, and future engineers will thank us.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. “It's urgent.”
&lt;/h2&gt;

&lt;p&gt;The word &lt;strong&gt;urgent&lt;/strong&gt; is possibly the most overused word in software development.&lt;/p&gt;

&lt;p&gt;Everything is urgent.&lt;/p&gt;

&lt;p&gt;At some point, if everything is urgent, nothing is.&lt;/p&gt;

&lt;p&gt;The problem isn't that PMs have urgent requests. Of course they do. Production issues happen. Customers have deadlines. Business priorities change.&lt;/p&gt;

&lt;p&gt;The problem is when every request arrives with the same level of emergency.&lt;/p&gt;

&lt;p&gt;Because engineers don't work in a magical universe where we can put our current task on pause without consequences.&lt;/p&gt;

&lt;p&gt;If I'm halfway through a feature and you give me an urgent request, something has to move.&lt;/p&gt;

&lt;p&gt;Maybe the original feature moves.&lt;/p&gt;

&lt;p&gt;Maybe the urgent request moves.&lt;/p&gt;

&lt;p&gt;Maybe the deadline moves.&lt;/p&gt;

&lt;p&gt;There is always a cost somewhere.&lt;/p&gt;

&lt;p&gt;And this is where a simple question can save us confusion:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Okay, what should I pause to work on this?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If the answer is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Pause the dashboard and fix this first.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Cool. Now I know what matters.&lt;/p&gt;

&lt;p&gt;But if the answer is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Don't pause anything. Just do this too.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then we have discovered that the request isn't actually a priority.&lt;/p&gt;

&lt;p&gt;It's a request for additional hours disguised as a priority.&lt;/p&gt;

&lt;p&gt;And engineers have already received enough magical powers in our job description.&lt;/p&gt;

&lt;p&gt;Please don't add &lt;strong&gt;time manipulation&lt;/strong&gt; to the list.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. “This will be the last change.”
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;“Just one last change.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Every engineer knows this sentence.&lt;/p&gt;

&lt;p&gt;You make the requested change. You send it for review.&lt;/p&gt;

&lt;p&gt;Then:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Looks great! Just one tiny thing…”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You fix the tiny thing.&lt;/p&gt;

&lt;p&gt;Then:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Actually, the client had one more idea.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You fix that too.&lt;/p&gt;

&lt;p&gt;Then:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Can we also…”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;At this point, you stop reading the message and start preparing yourself emotionally.&lt;/p&gt;

&lt;p&gt;The funny thing is that I don't even think PMs say this because they're trying to annoy engineers.&lt;/p&gt;

&lt;p&gt;Sometimes the client really does send one more change.&lt;/p&gt;

&lt;p&gt;Sometimes the PM genuinely thinks it's the final one.&lt;/p&gt;

&lt;p&gt;And sometimes the client has apparently discovered a new feature while looking at the old feature for the first time.&lt;/p&gt;

&lt;p&gt;That's normal.&lt;/p&gt;

&lt;p&gt;People understand software differently once they can see and use it.&lt;/p&gt;

&lt;p&gt;I'm not against changes. I'm against pretending that changes don't have a cost.&lt;/p&gt;

&lt;p&gt;If we're adding another requirement, that's fine. Just tell me.&lt;/p&gt;

&lt;p&gt;If it adds another day, tell me.&lt;/p&gt;

&lt;p&gt;If it changes the original scope, tell me.&lt;/p&gt;

&lt;p&gt;I'll probably complain for approximately 45 seconds and then start coding.&lt;/p&gt;




&lt;h2&gt;
  
  
  So, do PMs actually lie to engineers?
&lt;/h2&gt;

&lt;p&gt;Probably not as much as this article makes it sound.&lt;/p&gt;

&lt;p&gt;Most of these “lies” aren't really lies.&lt;/p&gt;

&lt;p&gt;They're usually a combination of optimistic estimates, incomplete information, client pressure, changing requirements, and two people looking at the same feature from completely different angles.&lt;/p&gt;

&lt;p&gt;And that's probably where a lot of the tension between product managers and software engineers comes from.&lt;/p&gt;

&lt;p&gt;PMs are often thinking about customers, deadlines, business requirements, priorities, and expectations.&lt;/p&gt;

&lt;p&gt;Engineers are thinking about architecture, dependencies, bugs, testing, technical debt, edge cases, and whether touching one innocent-looking function will somehow wake up three other systems.&lt;/p&gt;

&lt;p&gt;Neither side gets the complete picture alone.&lt;/p&gt;

&lt;p&gt;That's why I think the best PM-engineer relationship isn't built on pretending everything is easy.&lt;/p&gt;

&lt;p&gt;It's built on being able to say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I don't know.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;“I don't know how long this will take.”&lt;/p&gt;

&lt;p&gt;“I don't know whether the client will change it.”&lt;/p&gt;

&lt;p&gt;“I don't know if this affects another feature.”&lt;/p&gt;

&lt;p&gt;“I need to ask the engineer.”&lt;/p&gt;

&lt;p&gt;Those sentences are completely fine.&lt;/p&gt;

&lt;p&gt;Actually, they're useful.&lt;/p&gt;

&lt;p&gt;Because the fastest way to make an engineer nervous isn't telling them that something is complicated.&lt;/p&gt;

&lt;p&gt;It's telling them:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Don't worry. It's super easy.” 😂&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Your turn
&lt;/h2&gt;

&lt;p&gt;What is the funniest or most suspicious sentence a PM has ever told you?&lt;/p&gt;

&lt;p&gt;💬 Drop it in the comments.&lt;/p&gt;

&lt;p&gt;And PMs, you're absolutely welcome to defend yourselves 😂&lt;/p&gt;




&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Thanks for reading! 🙏🏻 &lt;br&gt; I hope you found this useful ✅ &lt;br&gt; Please react and follow for more 😍 &lt;br&gt; Made with 💙 by &lt;a href="https://dev.to/hadil"&gt;Hadil Ben Abdallah&lt;/a&gt;
&lt;/th&gt;
&lt;th&gt;
&lt;a href="https://www.linkedin.com/in/hadil-ben-abdallah/" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu48q29oef3l4a6eow30h.png" alt="LinkedIn" width="40" height="40"&gt;&lt;/a&gt; &lt;a href="https://github.com/Hadil-Ben-Abdallah" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhuvszgj6eun7xfvnwv51.png" alt="GitHub" width="50" height="50"&gt;&lt;/a&gt; &lt;a href="https://x.com/hadilbnabdallah" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F53x550t83v5ner74xkxo.jpg" alt="Twitter" width="40" height="40"&gt;&lt;/a&gt;
&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;div class="ltag__user ltag__user__id__1209000"&gt;
    &lt;a href="/hadil" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1209000%2Fb29d37d8-2efe-4391-9796-a6f8a483f1bd.png" alt="hadil image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/hadil"&gt;Hadil Ben Abdallah&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/hadil"&gt;Software Engineer • Technical Writer (300K+ readers &amp;amp; 25K+ followers) • Trusted by 20+ startups and tech companies worldwide
I turn brands into websites people 💙 to use&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>programming</category>
      <category>softwareengineering</category>
      <category>python</category>
      <category>c</category>
    </item>
    <item>
      <title>Stop Watching Coding Tutorials: Learn by Building Real Projects With Hyperskill</title>
      <dc:creator>Hadil Ben Abdallah</dc:creator>
      <pubDate>Wed, 16 Sep 2026 09:05:06 +0000</pubDate>
      <link>https://dev.to/hadil/stop-watching-coding-tutorials-learn-by-building-real-projects-with-hyperskill-3nc6</link>
      <guid>https://dev.to/hadil/stop-watching-coding-tutorials-learn-by-building-real-projects-with-hyperskill-3nc6</guid>
      <description>&lt;p&gt;Learning to code can feel easy at first. You watch a lesson, understand a new concept, solve a few exercises, and you start feeling like you have made progress. Then you open a blank editor and try to build something on your own, and knowing how a loop, API, database, or class works does not feel quite as useful as it did five minutes ago.&lt;/p&gt;

&lt;p&gt;Programming is a practical skill, and at some point, tutorials have to turn into projects, bugs have to turn into debugging sessions, and individual concepts have to come together inside something that works.&lt;/p&gt;

&lt;p&gt;That is the idea behind &lt;strong&gt;Hyperskill&lt;/strong&gt;, a learning platform built around project-based programming education. Its courses put hands-on projects into the learning process, giving learners opportunities to apply new concepts as they progress. &lt;/p&gt;

&lt;p&gt;The platform currently covers areas including Python, Java, Kotlin, Web Development, Backend, Cloud &amp;amp; DevOps, Data Science, AI Engineering, AI coding tools, SQL, and more.&lt;/p&gt;

&lt;p&gt;In this article, we'll look at what you can learn on Hyperskill, how its projects and development tools fit together, and whether a project-based coding platform makes sense for someone trying to build practical programming skills.&lt;/p&gt;




&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://hyperskill.org/?utm_source=jigjoy&amp;amp;utm_medium=devto&amp;amp;utm_campaign=jigjoy_hackathon" rel="noopener noreferrer"&gt;Hyperskill&lt;/a&gt; is a project-based learning platform for programming and software development. Its main idea is that you learn concepts while building projects, so writing and applying code becomes part of the learning process instead of something saved for the end. &lt;/p&gt;

&lt;p&gt;The platform covers programming languages, career paths, AI, data, backend development, and other technical areas, with &lt;strong&gt;400+ hands-on projects and 70+ courses&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Hyperskill was powered by &lt;strong&gt;JetBrains&lt;/strong&gt;, connecting the learning experience with professional development tools. Learners can build projects using JetBrains IDEs, develop skills across multiple areas, and create projects that can become part of their portfolios and be shared on GitHub.&lt;/p&gt;

&lt;p&gt;Here are some of the main things Hyperskill offers:&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;400+ hands-on projects&lt;/strong&gt;&lt;br&gt;
✅ &lt;strong&gt;70+ courses&lt;/strong&gt;&lt;br&gt;
✅ Learning paths for &lt;strong&gt;Python, Java, Kotlin &amp;amp; Android, SQL, Go &amp;amp; C++, Web Development, Backend, Cloud &amp;amp; DevOps, Data Science, AI, and ML&lt;/strong&gt;&lt;br&gt;
✅ &lt;strong&gt;Code-quality feedback&lt;/strong&gt; and adaptive practice&lt;br&gt;
✅ &lt;strong&gt;Certificates&lt;/strong&gt; to document completed learning&lt;br&gt;
✅ Projects that can be &lt;strong&gt;shared on GitHub and used as portfolio pieces&lt;/strong&gt;&lt;br&gt;
✅ Access to professional &lt;strong&gt;JetBrains development tools&lt;/strong&gt;&lt;br&gt;
✅ Learning options for &lt;strong&gt;individual developers and organizations&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The biggest takeaway is that Hyperskill puts &lt;strong&gt;building at the center of learning to code&lt;/strong&gt;. You are not simply working through lessons and applying the knowledge later; the projects give you a place to use what you learn as you progress.&lt;/p&gt;


&lt;h2&gt;
  
  
  Why Building Real Projects Matters When Learning to Code
&lt;/h2&gt;

&lt;p&gt;There is a big difference between being able to explain a programming concept and being able to use it when building software.&lt;/p&gt;

&lt;p&gt;You might understand what an API does, know how a &lt;code&gt;for&lt;/code&gt; loop works, or recognize the difference between a list and a dictionary. That knowledge matters, but software development rarely gives you one isolated problem at a time. A real project might require you to combine several concepts, decide how to structure your code, deal with unexpected input, debug an error, work with external tools, and figure out what to do when your first solution does not work.&lt;/p&gt;

&lt;p&gt;That is where projects become valuable.&lt;/p&gt;

&lt;p&gt;When you build something, the knowledge you just learned has somewhere to go. A lesson about functions becomes part of an application. Database concepts become queries inside a working program. An API lesson becomes an actual integration. You start seeing how individual pieces of programming fit together because you are using them to solve a concrete problem.&lt;/p&gt;

&lt;p&gt;This also changes how you discover what you do and do not understand.&lt;/p&gt;

&lt;p&gt;A concept can feel clear while you are following an explanation. Try using it without someone telling you the next step, though, and the gaps become clear. You may realize that you understand the syntax but struggle with the structure, or that you can follow an example but cannot adapt it to a different requirement.&lt;/p&gt;

&lt;p&gt;That is not a failure. That is useful feedback.&lt;/p&gt;

&lt;p&gt;Building projects gives you more opportunities to encounter those gaps, fix them, and try again.&lt;/p&gt;

&lt;p&gt;And that matters when your goal is to become a developer.&lt;/p&gt;

&lt;p&gt;A portfolio project also gives your learning a visible result. You can look back at something you built, improve it, put it on GitHub, and use it as evidence of what you can do.&lt;/p&gt;


&lt;h2&gt;
  
  
  What Should You Look for in a Coding Skills Platform?
&lt;/h2&gt;

&lt;p&gt;There are plenty of ways to learn programming online, so choosing a platform can become difficult. Two websites can both promise to teach Python or Java while offering completely different learning experiences.&lt;/p&gt;

&lt;p&gt;There are a few things I would look at while choosing a coding skills platform.&lt;/p&gt;
&lt;h3&gt;
  
  
  1. How much actual coding you will do
&lt;/h3&gt;

&lt;p&gt;If most of your time is spent watching explanations and answering multiple-choice questions, you may gain knowledge without getting enough practice applying it. A useful coding platform should give you regular opportunities to write code, make decisions, encounter errors, and work toward something concrete.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. How the learning is structured
&lt;/h3&gt;

&lt;p&gt;A huge library of courses can sound impressive, but having hundreds of disconnected lessons does not make learning easier. Good structure helps you understand what to learn first, what comes next, and how each new skill connects to the bigger picture.&lt;/p&gt;
&lt;h3&gt;
  
  
  3. Are you getting feedback?
&lt;/h3&gt;

&lt;p&gt;When you are learning alone, it is easy to keep repeating the same mistake without realizing it. Code-quality feedback, automated checks, explanations, and targeted practice can help you catch those problems while you are still working on them.&lt;/p&gt;
&lt;h3&gt;
  
  
  4. What you actually build
&lt;/h3&gt;

&lt;p&gt;If you want to become a backend developer, for example, you will eventually need more than syntax exercises. You want experience working with things such as APIs, databases, authentication, frameworks, debugging, and application structure. The projects should reflect the skills you are trying to develop.&lt;/p&gt;
&lt;h3&gt;
  
  
  5. What is the development environment like
&lt;/h3&gt;

&lt;p&gt;Learning in an environment that resembles the tools developers use professionally can make the transition into real development work easier. So in this case, it's very helpful to work directly in a popular IDE.&lt;/p&gt;
&lt;h3&gt;
  
  
  6. What happens after you finish learning something
&lt;/h3&gt;

&lt;p&gt;Can you point to a project? &lt;br&gt;
Can you explain what you built? &lt;br&gt;
Can you show the code to someone else? &lt;br&gt;
Can you continue improving it?&lt;/p&gt;

&lt;p&gt;Those are practical signals that your learning is producing something tangible.&lt;/p&gt;

&lt;p&gt;So, if we use those criteria to evaluate a coding platform, the more important part is not how many courses it has. It is what happens when you sit down and build.&lt;/p&gt;

&lt;p&gt;That brings us to Hyperskill.&lt;/p&gt;


&lt;h2&gt;
  
  
  What Is Hyperskill?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://hyperskill.org/?utm_source=jigjoy&amp;amp;utm_medium=devto&amp;amp;utm_campaign=jigjoy_hackathon" rel="noopener noreferrer"&gt;Hyperskill&lt;/a&gt; is an online learning platform focused on programming and software development, with a strong emphasis on &lt;strong&gt;learning by building projects&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The platform was powered by &lt;strong&gt;JetBrains&lt;/strong&gt;, the company behind development tools such as IntelliJ IDEA and PyCharm. That connection is more than a logo on the homepage: professional JetBrains tools are part of the learning experience, giving learners a chance to practice inside development environments that are familiar to many professional developers.&lt;/p&gt;

&lt;p&gt;Until now, more than &lt;strong&gt;1.2M&lt;/strong&gt; developers have learned on Hyperskill, alongside more than &lt;strong&gt;400&lt;/strong&gt; hands-on projects and &lt;strong&gt;70+&lt;/strong&gt; courses.&lt;/p&gt;

&lt;p&gt;Hyperskill is not built around one narrow programming track. You can start with a language, move toward a career path, explore a technical subject, or develop skills around newer areas such as AI.&lt;/p&gt;

&lt;p&gt;The most interesting part of the Hyperskill approach is how the projects are used while you learn.&lt;/p&gt;

&lt;p&gt;And that's what makes this platform different from a typical online programming course.&lt;/p&gt;


&lt;h2&gt;
  
  
  How Hyperskill’s Project-Based Learning Approach Works
&lt;/h2&gt;

&lt;p&gt;The easiest way to understand Hyperskill is to look at what happens when you start a course.&lt;/p&gt;

&lt;p&gt;You do not have to wait until you finish a long series of lessons before touching a real project. Hyperskill's project-based learning model lets you start applying concepts as you progress, with projects serving as part of the learning process itself. Its Premium page describes this as starting projects from day one and learning what you need along the way.&lt;/p&gt;

&lt;p&gt;That changes the role of practice.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd09m4romkxri1j4aw90e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd09m4romkxri1j4aw90e.png" alt="Move faster in your career with Hyperskill" width="799" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Imagine you are learning Python. You might first encounter variables, conditions, loops, functions, and data structures as individual concepts. As those ideas accumulate, you can use them to build something that has an actual purpose. The project gives those concepts context, and the problems you encounter while building show you where your understanding is solid and where you need more practice.&lt;/p&gt;

&lt;p&gt;This is also why the projects do not feel like a final exam tacked onto the end of a course. The building itself is part of how you learn.&lt;/p&gt;

&lt;p&gt;Programming rarely happens one concept at a time in the real world. Building software means combining things you have learned, figuring out how they interact, and dealing with problems that were not visible in the original lesson.&lt;/p&gt;

&lt;p&gt;A project gives you a place to practice exactly that.&lt;/p&gt;


&lt;h2&gt;
  
  
  Learn by Building 400+ Hands-On Coding Projects
&lt;/h2&gt;

&lt;p&gt;Hyperskill currently offers &lt;strong&gt;400+ hands-on projects&lt;/strong&gt;, giving learners a lot of room to practice beyond short coding exercises. The platform's Premium offering lists 400+ projects alongside features such as certification, adaptive practice, detailed code-quality feedback, and unlimited practice.&lt;/p&gt;

&lt;p&gt;A beginner can start with a relatively small application and gradually move toward projects that require a wider range of programming skills.&lt;/p&gt;

&lt;p&gt;Someone learning Java might work through applications and games while developing their understanding of core programming and object-oriented concepts. A Python learner can move into areas such as web development, databases, data analysis, machine learning, or backend development.&lt;/p&gt;

&lt;p&gt;There are also projects for people moving into newer areas of software development. Hyperskill includes courses covering foundation models, AI agents, AI coding tools, and AI-assisted software development.&lt;/p&gt;

&lt;p&gt;And these projects can have value beyond the moment when you submit them.&lt;/p&gt;

&lt;p&gt;Hyperskill specifically highlights the option to upload projects to &lt;strong&gt;GitHub&lt;/strong&gt; and use them as evidence of practical experience when building a professional portfolio. That makes the project itself more useful than an exercise that disappears as soon as you complete it.&lt;/p&gt;

&lt;p&gt;Of course, completing a project does not automatically make someone job-ready. A portfolio also needs good code, clear explanations, thoughtful project choices, and evidence that you understand what you built. But having actual software to discuss gives you something concrete to work with.&lt;/p&gt;


&lt;h2&gt;
  
  
  What Can You Learn on Hyperskill?
&lt;/h2&gt;

&lt;p&gt;Hyperskill has grown well beyond a platform where you pick one programming language and work through its basics.&lt;/p&gt;

&lt;p&gt;Its current catalog is organized into several areas, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;Java&lt;/li&gt;
&lt;li&gt;Kotlin &amp;amp; Android&lt;/li&gt;
&lt;li&gt;SQL &amp;amp; Databases&lt;/li&gt;
&lt;li&gt;Go &amp;amp; C++&lt;/li&gt;
&lt;li&gt;Web Development&lt;/li&gt;
&lt;li&gt;Backend&lt;/li&gt;
&lt;li&gt;Cloud &amp;amp; DevOps&lt;/li&gt;
&lt;li&gt;Data Science &amp;amp; Analysis&lt;/li&gt;
&lt;li&gt;AI Engineering&lt;/li&gt;
&lt;li&gt;AI Coding Tools&lt;/li&gt;
&lt;li&gt;ML &amp;amp; Math&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The platform offers 70+ courses across these categories.&lt;/p&gt;

&lt;p&gt;You can start with a language if you are still building your programming foundation. Python has courses ranging from fundamentals to backend development, data analysis, algorithms, Django, Flask, and machine learning. Java has paths covering core development, backend development with Spring Boot, full-stack development, and other areas.&lt;/p&gt;

&lt;p&gt;You can also start with a career direction.&lt;/p&gt;

&lt;p&gt;Someone interested in backend development can work with technologies such as Java, Spring Boot, Python, Django, Flask, SQL, and security. A person moving toward data science can study statistics, data preprocessing, visualization, machine learning, SQL, NLP, or data engineering.&lt;/p&gt;

&lt;p&gt;And then there is the growing AI section.&lt;/p&gt;
&lt;h3&gt;
  
  
  Hyperskill Courses and Career Paths: Learn Beyond a Single Programming Language
&lt;/h3&gt;

&lt;p&gt;Learning one programming language is useful, but professional software development usually requires a broader set of skills. A backend developer needs to understand more than Java or Python. A data scientist needs more than Python syntax. Someone building AI applications needs to understand how models, APIs, data, software architecture, and development tools come together.&lt;/p&gt;

&lt;p&gt;Hyperskill's career-oriented categories reflect that reality.&lt;/p&gt;

&lt;p&gt;Alongside individual language tracks, the platform currently includes paths and courses around: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Web Development&lt;/li&gt;
&lt;li&gt;Backend&lt;/li&gt;
&lt;li&gt;Cloud &amp;amp; DevOps&lt;/li&gt;
&lt;li&gt;Data Science &amp;amp; Analysis&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That makes it possible to start from a programming language and move toward a broader technical direction.&lt;/p&gt;

&lt;p&gt;For example, a learner starting with Python can eventually move into Django, Flask, databases, data analysis, machine learning, or backend development. A Java learner can move from language fundamentals toward Spring Boot and backend application development.&lt;/p&gt;

&lt;p&gt;The same pattern appears in AI.&lt;/p&gt;
&lt;h3&gt;
  
  
  Learn AI and Modern Development Skills With Hyperskill
&lt;/h3&gt;

&lt;p&gt;AI is no longer limited to learning how machine learning algorithms work. Developers need to understand how to build applications around foundation models, work with AI coding tools, and integrate AI into existing development workflows.&lt;/p&gt;

&lt;p&gt;Hyperskill's current catalog includes courses such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Introduction to AI Engineering with Python&lt;/li&gt;
&lt;li&gt;AI Agents: Theory and Practice&lt;/li&gt;
&lt;li&gt;Building AI Applications with Foundation Models&lt;/li&gt;
&lt;li&gt;AI Tools for Developers: Master Code Generation &amp;amp; Automation&lt;/li&gt;
&lt;li&gt;Software Development Fundamentals for AI Coding&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The practical focus continues here too. The AI Engineering course includes projects around foundation models, retrieval-augmented generation, AI agents, and deploying AI services, while the AI coding courses focus on using modern AI tools as part of software development.&lt;/p&gt;

&lt;p&gt;That gives developers who already know how to code a way to expand into AI without treating programming and AI as completely separate worlds.&lt;/p&gt;
&lt;h3&gt;
  
  
  Practice Coding With Professional JetBrains Development Tools
&lt;/h3&gt;

&lt;p&gt;There is another part of the learning experience that becomes important once you move beyond basic coding exercises: the environment where you write your code.&lt;/p&gt;

&lt;p&gt;Hyperskill was powered by &lt;strong&gt;JetBrains&lt;/strong&gt;, and its Premium offering lets learners work on projects using JetBrains IDEs. The platform describes these as the same development tools used by engineers at more than &lt;strong&gt;300,000&lt;/strong&gt; companies worldwide.&lt;/p&gt;

&lt;p&gt;Premium includes access to the JetBrains All Products Pack starting from the second month, subject to the eligibility requirements.&lt;/p&gt;

&lt;p&gt;That means learners can practice inside tools such as IntelliJ IDEA and PyCharm while working through their projects.&lt;/p&gt;


&lt;h2&gt;
  
  
  How Hyperskill Adapts Practice to Your Learning Pace
&lt;/h2&gt;

&lt;p&gt;Learning speed is not the same for everyone.&lt;/p&gt;

&lt;p&gt;Some topics click immediately. Others need several attempts before they become comfortable. Hyperskill's Premium offering includes adaptive problems that adjust to the learner's pace, along with unlimited practice, hints, spaced repetition, and detailed code-quality feedback.&lt;/p&gt;

&lt;p&gt;That matters because good practice is not only about doing more exercises. It is also about spending more time where you need it.&lt;/p&gt;

&lt;p&gt;If you already understand one concept, repeatedly solving the same basic problem does little for you. If another concept keeps causing mistakes, additional practice and feedback can help you close that gap.&lt;/p&gt;

&lt;p&gt;This creates a learning loop that makes sense for programming: &lt;br&gt;
&lt;strong&gt;learn a concept → use it → make mistakes → get feedback → practice again → keep building&lt;/strong&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Hyperskill for Teams: Upskilling Developers With Structured Learning
&lt;/h2&gt;

&lt;p&gt;Learning programming is one thing. Keeping an engineering team’s skills up to date is a different challenge.&lt;/p&gt;

&lt;p&gt;A developer might be strong in backend development but need more experience with cloud technologies. Another team member might want to move into AI engineering. Someone else may need to strengthen their Python or SQL skills. Giving everyone the same course does not always make sense when the team's skill levels and responsibilities are different.&lt;/p&gt;

&lt;p&gt;Hyperskill also has a &lt;a href="https://hyperskill.org/for-organizations" rel="noopener noreferrer"&gt;business offering&lt;/a&gt; designed around this problem. The platform gives organizations tools to help employees develop technical skills through structured learning, hands-on projects, and progress tracking.&lt;/p&gt;

&lt;p&gt;The team experience goes beyond giving developers access to a course library. Managers can work with skill development information to understand where employees need more practice and keep an eye on their progress as they move through their learning paths.&lt;/p&gt;

&lt;p&gt;That can make structured upskilling easier to manage, especially for teams that want developers to keep learning while continuing their regular work.&lt;/p&gt;


&lt;h2&gt;
  
  
  Hyperskill vs. Traditional Coding Courses
&lt;/h2&gt;

&lt;p&gt;The biggest difference between Hyperskill and a traditional programming course is when you start building.&lt;/p&gt;

&lt;p&gt;A conventional online course might follow a familiar pattern: watch a lesson, read an explanation, answer a few questions, and continue to the next topic. At the end, you may get a larger assignment that asks you to put everything together.&lt;/p&gt;

&lt;p&gt;Hyperskill puts projects closer to the center of the learning process. You learn concepts, apply them to projects, receive feedback, and continue building as you progress through the course.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Learning approach&lt;/th&gt;
&lt;th&gt;Traditional course&lt;/th&gt;
&lt;th&gt;Hyperskill's project-based approach&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Learning concepts&lt;/td&gt;
&lt;td&gt;Lessons and explanations&lt;/td&gt;
&lt;td&gt;Lessons and explanations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coding practice&lt;/td&gt;
&lt;td&gt;Exercises may accompany lessons&lt;/td&gt;
&lt;td&gt;Projects are integrated into learning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Building software&lt;/td&gt;
&lt;td&gt;Often comes later&lt;/td&gt;
&lt;td&gt;Starts throughout the learning path&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feedback&lt;/td&gt;
&lt;td&gt;Depends on the platform&lt;/td&gt;
&lt;td&gt;Code-quality feedback is available&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Portfolio material&lt;/td&gt;
&lt;td&gt;May require separate projects&lt;/td&gt;
&lt;td&gt;Projects can become portfolio pieces&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Development tools&lt;/td&gt;
&lt;td&gt;Varies by course&lt;/td&gt;
&lt;td&gt;JetBrains development tools are part of the experience&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Progress&lt;/td&gt;
&lt;td&gt;Course completion&lt;/td&gt;
&lt;td&gt;Skills, practice, and project progress&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This does not mean traditional courses have no value. A well-made course can be an excellent way to understand a difficult concept or get introduced to a new technology.&lt;/p&gt;

&lt;p&gt;The difference is what happens after you understand the explanation.&lt;/p&gt;

&lt;p&gt;With a project-based approach, you have to do something with that knowledge. You have to write the code, make decisions, deal with errors, and get the application working. That repeated transition from &lt;strong&gt;learning to building&lt;/strong&gt; is the core of Hyperskill's approach.&lt;/p&gt;


&lt;h2&gt;
  
  
  Who Is Hyperskill Best For?
&lt;/h2&gt;

&lt;p&gt;Hyperskill can make sense for different types of learners, but the platform will be especially useful for people who want their coding education to involve regular hands-on work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Beginners learning their first programming language&lt;/strong&gt; can use structured courses and projects to move from basic concepts toward working applications. The projects give new programmers a concrete reason to use concepts such as variables, loops, functions, data structures, and object-oriented programming.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Developers expanding their existing skills&lt;/strong&gt; can use the platform to move into another language or technical area. Someone comfortable with Python, for example, might want to explore backend development, data science, machine learning, or AI engineering.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Developers building a portfolio&lt;/strong&gt; can benefit from having actual projects attached to their learning journey. Those projects can be uploaded to GitHub and used as examples when showing potential employers what they have built.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Developers moving into AI&lt;/strong&gt; have another reason to look at the platform. Hyperskill includes courses covering AI engineering, AI agents, foundation models, AI coding tools, and related subjects, giving programmers a way to develop modern AI skills through practical work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Engineering teams and organizations&lt;/strong&gt; have a separate use case: structured technical upskilling, skill-gap analysis, and progress tracking across employees.&lt;/p&gt;

&lt;p&gt;It is also worth being realistic about what Hyperskill can and cannot do. Completing a course will not magically turn someone into a professional developer. You still need to think through problems yourself, write code outside guided exercises, work on increasingly difficult projects, and gain experience dealing with software that does not come with instructions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://hyperskill.org/register?next=%2Ftracks&amp;amp;utm_source=jigjoy&amp;amp;utm_medium=devto&amp;amp;utm_campaign=jigjoy_hackathon" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Start Learning and Building Now 🔥&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is Hyperskill?
&lt;/h3&gt;

&lt;p&gt;→ Hyperskill is an online learning platform focused on programming and software development. Its courses use a project-based approach, allowing learners to apply what they learn while building hands-on projects across areas such as Python, Java, Backend, Data Science, AI, and more.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is Hyperskill good for beginners learning to code?
&lt;/h3&gt;

&lt;p&gt;→ Yes. Hyperskill offers structured learning paths and projects that allow beginners to practice programming concepts as they learn them. The project-based format can be useful for learners who want to move beyond watching lessons and start writing code regularly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can you build portfolio projects with Hyperskill?
&lt;/h3&gt;

&lt;p&gt;→ Yes. Hyperskill's projects can give learners concrete work to add to their portfolio and share on GitHub. The value depends on the quality of the project and your ability to explain the code and decisions behind it, but having working projects gives you something tangible to showcase.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the best way to learn coding skills online?
&lt;/h3&gt;

&lt;p&gt;→ There is no single method that works equally well for everyone, but effective programming education usually combines explanations with consistent hands-on practice. Building projects, solving problems, debugging your own code, and receiving useful feedback can help turn programming concepts into practical skills.&lt;/p&gt;

&lt;h3&gt;
  
  
  Should you learn a programming language or build projects first?
&lt;/h3&gt;

&lt;p&gt;→ You need both. Learning programming fundamentals gives you the knowledge required to write code, while projects give you opportunities to apply that knowledge in realistic situations. A strong learning path connects the two so that new concepts quickly become something you can use.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;There is a point in every developer's learning journey where watching another tutorial stops being enough.&lt;/p&gt;

&lt;p&gt;You need to open the editor and build something.&lt;/p&gt;

&lt;p&gt;That is the idea Hyperskill puts at the center of its learning experience. Its courses combine structured learning with hands-on projects, giving learners a place to apply new concepts as they progress. With hundreds of projects, courses across programming languages and career paths, JetBrains development tools, code-quality feedback, certificates, and adaptive practice, the platform covers much more than the basics of learning a programming language.&lt;/p&gt;

&lt;p&gt;The project-based approach also gives learning a visible outcome. You finish with code you have written, problems you have solved, and projects you can continue improving and potentially share as part of your portfolio.&lt;/p&gt;

&lt;p&gt;For developers, that practical side is what makes the approach worth considering.&lt;/p&gt;

&lt;p&gt;You do not learn programming only by knowing what a function, API, database, or machine-learning model does. You become better at development by using those things to build software, running into problems, figuring them out, and doing it again with a little more confidence each time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hyperskill is a place where learning to code and building software happen together.&lt;/strong&gt;&lt;/p&gt;




&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Thanks for reading! 🙏🏻 &lt;br&gt; I hope you found this useful ✅ &lt;br&gt; Please react and follow for more 😍 &lt;br&gt; Made with 💙 by &lt;a href="https://dev.to/hadil"&gt;Hadil Ben Abdallah&lt;/a&gt;
&lt;/th&gt;
&lt;th&gt;
&lt;a href="https://www.linkedin.com/in/hadil-ben-abdallah/" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu48q29oef3l4a6eow30h.png" alt="LinkedIn" width="40" height="40"&gt;&lt;/a&gt; &lt;a href="https://github.com/Hadil-Ben-Abdallah" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhuvszgj6eun7xfvnwv51.png" alt="GitHub" width="50" height="50"&gt;&lt;/a&gt; &lt;a href="https://x.com/hadilbnabdallah" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F53x550t83v5ner74xkxo.jpg" alt="Twitter" width="40" height="40"&gt;&lt;/a&gt;
&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;div class="ltag__user ltag__user__id__1209000"&gt;
    &lt;a href="/hadil" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1209000%2Fb29d37d8-2efe-4391-9796-a6f8a483f1bd.png" alt="hadil image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/hadil"&gt;Hadil Ben Abdallah&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/hadil"&gt;Software Engineer • Technical Writer (300K+ readers &amp;amp; 25K+ followers) • Trusted by 20+ startups and tech companies worldwide
I turn brands into websites people 💙 to use&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>python</category>
      <category>java</category>
      <category>android</category>
      <category>c</category>
    </item>
    <item>
      <title>Nexpath Review: Can an AI Prompt Quality Layer Make AI Coding Safer?</title>
      <dc:creator>Hadil Ben Abdallah</dc:creator>
      <pubDate>Fri, 11 Sep 2026 09:26:59 +0000</pubDate>
      <link>https://dev.to/hadil/nexpath-review-can-an-ai-prompt-quality-layer-make-ai-coding-safer-24</link>
      <guid>https://dev.to/hadil/nexpath-review-can-an-ai-prompt-quality-layer-make-ai-coding-safer-24</guid>
      <description>&lt;p&gt;AI coding tools have made it easy to go from an idea to working code.&lt;/p&gt;

&lt;p&gt;You describe what you want, send the prompt, and a few moments later you have files, components, logic, and sometimes an entire working app.&lt;/p&gt;

&lt;p&gt;That speed is great until the prompt leaves something important unsaid.&lt;/p&gt;

&lt;p&gt;Maybe the requirement is too vague. Maybe nobody mentioned how the feature should be verified. Maybe an existing behavior needs to stay intact. Maybe the change sounds small but has consequences that are easy to miss.&lt;/p&gt;

&lt;p&gt;This is where &lt;strong&gt;Nexpath&lt;/strong&gt; comes in.&lt;/p&gt;

&lt;p&gt;Nexpath doesn't try to be another coding environment where you build your project. It works as a &lt;strong&gt;prompt quality layer for AI-powered development&lt;/strong&gt;, looking at the request you're about to send and adding guidance when it decides the task needs more structure or verification. &lt;/p&gt;

&lt;p&gt;The idea is simple: keep the speed of AI coding, but add a checkpoint before an underspecified request turns into code.&lt;/p&gt;

&lt;p&gt;I wanted to look at how that idea works in practice, what Nexpath adds to a coding workflow, what its browser extension offers for tools such as Replit, Lovable, and Bolt, and whether its benchmark results give the idea some evidence behind it.&lt;/p&gt;




&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/hi0001234d/nexpath" rel="noopener noreferrer"&gt;Nexpath&lt;/a&gt; is a prompt quality layer designed to add structure and missing checks to AI-assisted development. It can work with browser-based coding tools, including &lt;strong&gt;Replit&lt;/strong&gt;, &lt;strong&gt;Lovable&lt;/strong&gt;, and &lt;strong&gt;Bolt&lt;/strong&gt;, as well as &lt;strong&gt;Claude Code&lt;/strong&gt;, &lt;strong&gt;Cursor&lt;/strong&gt;, and &lt;strong&gt;Windsurf&lt;/strong&gt; through its other integrations.&lt;/p&gt;

&lt;p&gt;Its first major feature is &lt;strong&gt;Prompt Enhancement&lt;/strong&gt;. It preserves the original request and adds relevant guidance when a task needs more rigor. Depending on the task, that guidance can include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Acceptance expectations&lt;/li&gt;
&lt;li&gt;Verification steps&lt;/li&gt;
&lt;li&gt;Reproduction details&lt;/li&gt;
&lt;li&gt;Constraints&lt;/li&gt;
&lt;li&gt;Risk or confirmation guidance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You remain in control of the final prompt. The original request stays available, and you can review the suggested version before sending it.&lt;/p&gt;

&lt;p&gt;Nexpath's published SWE-bench Verified test compared Claude Code with and without Nexpath across 40 tasks. Claude Code solved 27/40 tasks, while Claude Code + Nexpath solved 29/40.&lt;/p&gt;

&lt;p&gt;That benchmark is worth looking at, but two additional solved tasks out of 40 aren't enough to prove a large improvement. Nexpath itself makes that limitation clear.&lt;/p&gt;

&lt;p&gt;Nexpath is built around a local-first approach, with prompt history stored locally and targeted requests sent out when guidance needs to be generated.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why AI Coding Agents Still Need a Decision Layer
&lt;/h2&gt;

&lt;p&gt;There's a reason AI coding feels so productive.&lt;/p&gt;

&lt;p&gt;You don't need to translate every idea into a detailed implementation plan before you start. You can describe the feature in normal language and let the coding tool figure out much of the implementation.&lt;/p&gt;

&lt;p&gt;That lowers the barrier to building software.&lt;/p&gt;

&lt;p&gt;It also creates a new problem: &lt;strong&gt;the quality of the request can have a huge effect on the quality of the work that follows.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Consider a prompt like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Add search to the task list.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A coding tool can do plenty with that sentence.&lt;/p&gt;

&lt;p&gt;But what does "search" actually mean?&lt;/p&gt;

&lt;p&gt;Should it search titles only? &lt;br&gt;
Should it be case-insensitive? &lt;br&gt;
Should results update while typing? &lt;br&gt;
What happens when there are no matches? &lt;br&gt;
Should existing filters continue working? &lt;br&gt;
What needs to be checked after the change?&lt;/p&gt;

&lt;p&gt;A developer who has been working on the project for hours may know the answers to some of these questions without writing them down.&lt;/p&gt;

&lt;p&gt;The coding tool doesn't necessarily have that same context.&lt;/p&gt;

&lt;p&gt;And that's where things can get messy.&lt;/p&gt;

&lt;p&gt;And in this case, Nexpath isn't trying to take control of development. It's trying to make the things that are easy to overlook clearer.&lt;/p&gt;


&lt;h2&gt;
  
  
  What Is Nexpath?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/hi0001234d/nexpath" rel="noopener noreferrer"&gt;Nexpath&lt;/a&gt; is an &lt;strong&gt;AI prompt quality engineering layer for AI coding workflows&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Its main feature, &lt;strong&gt;Prompt Enhancement&lt;/strong&gt;, reviews the prompt you're preparing to send and adds development details that may be missing. The original intent stays intact, while the enhanced version can add structure around requirements, verification, constraints, safeguards, and other relevant checks.&lt;/p&gt;

&lt;p&gt;The key word here is &lt;strong&gt;can&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Nexpath isn't designed to rewrite every prompt. It stays quiet when there isn't much to add and surfaces a suggestion when it detects that something like a vague specification, skipped test, or rushed deployment could benefit from additional guidance.&lt;/p&gt;

&lt;p&gt;The basic idea is simple: &lt;strong&gt;you write the request, Nexpath reviews it, and you decide whether its suggestions are useful.&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Nexpath doesn't replace your original prompt
&lt;/h3&gt;

&lt;p&gt;Another important detail is how Nexpath handles the enhanced version.&lt;/p&gt;

&lt;p&gt;The benchmark results provide a concrete example of this. Across all &lt;strong&gt;40 SWE-bench Verified tasks, Nexpath preserved the original prompt word for word&lt;/strong&gt; and appended additional guidance underneath it.&lt;/p&gt;

&lt;p&gt;That creates an important distinction. &lt;strong&gt;Nexpath isn't asking you to throw away your request and use an entirely different instruction.&lt;/strong&gt; It's adding development considerations around what you already asked for.&lt;/p&gt;

&lt;p&gt;The browser extension follows the same principle. When Nexpath suggests an enhancement, the original request remains visible alongside the suggested version, allowing you to review the changes before deciding what to send.&lt;/p&gt;
&lt;h3&gt;
  
  
  The browser workflow in four steps
&lt;/h3&gt;

&lt;p&gt;For browser-based coding tools such as Replit, Lovable, and Bolt, the process looks like this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Write your prompt&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Write the request you want to send and submit it as you normally would.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Nexpath reviews it&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If Nexpath determines that the request needs additional attention, it briefly holds the prompt and opens its side panel. Your original request remains available while the enhanced version is prepared.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Review the suggestion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The enhanced prompt can introduce details such as clearer scope, constraints, acceptance expectations, verification steps, or safeguards, depending on the task.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Choose what to send&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can send the enhanced version or continue with your original prompt. Nexpath doesn't automatically decide which version your coding tool should receive.&lt;/p&gt;

&lt;p&gt;This keeps the developer responsible for the final decision. Nexpath provides additional context around the request, but you remain the person deciding what should actually be built.&lt;/p&gt;
&lt;h3&gt;
  
  
  How Nexpath decides what to add
&lt;/h3&gt;

&lt;p&gt;Nexpath describes its prompt enhancement process through four stages:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Understand:&lt;/strong&gt; Review the request, current development stage, and relevant workflow signals while preserving the original intent.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Structure:&lt;/strong&gt; Add useful sections covering areas such as scope, constraints, acceptance expectations, and verification.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Safeguard:&lt;/strong&gt; Introduce risk, confirmation, rollback, or evidence requirements when the task calls for them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review:&lt;/strong&gt; Give the developer an opportunity to inspect or edit the enhanced prompt before deciding what to send.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This means the resulting prompt can vary depending on the task.&lt;/p&gt;

&lt;p&gt;A straightforward UI change may need only a small amount of additional guidance, while a complex code change or deployment-related request may benefit from more detailed checks.&lt;/p&gt;

&lt;p&gt;The goal isn't to make prompts longer. It's to add the development information that is relevant to the work being requested.&lt;/p&gt;


&lt;h2&gt;
  
  
  Nexpath Browser Extension for Replit, Lovable, and Bolt
&lt;/h2&gt;

&lt;p&gt;One of Nexpath's newest additions is its &lt;strong&gt;browser extension for Replit, Lovable, and Bolt&lt;/strong&gt;, bringing the prompt quality layer directly into the browser-based coding tools developers already use.&lt;/p&gt;

&lt;p&gt;The workflow is simple. You write your prompt in Replit, Lovable, or Bolt as usual, and Nexpath reviews it before the request reaches the coding agent. When it finds something that could benefit from more structure, it opens its side panel with an enhanced version of the prompt. You can then review it, choose the enhanced version, or continue with your original request.&lt;/p&gt;

&lt;p&gt;This can be useful for developers who like the speed of building with AI coding platforms but don't always want to write a detailed specification for every request. Nexpath can help add things such as acceptance expectations, verification steps, constraints, or other relevant checks when they are needed.&lt;/p&gt;

&lt;p&gt;If you already write highly detailed specifications with acceptance criteria and verification steps for every change, the additional value may be smaller.&lt;/p&gt;

&lt;p&gt;The extension is available for both &lt;a href="https://chromewebstore.google.com/detail/nexpath/gdkknhjgflkkeajbhalkaakohpoflolc" rel="noopener noreferrer"&gt;Chrome&lt;/a&gt; and &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/nexpath/" rel="noopener noreferrer"&gt;Firefox&lt;/a&gt;, so you can use it directly while working in your preferred browser.&lt;/p&gt;

&lt;p&gt;For Replit, Lovable, and Bolt users, that means Nexpath can become part of the normal coding workflow without requiring a separate application or a different way of building. You keep using the platform you already know, while Nexpath adds an extra review step when a prompt needs it.&lt;/p&gt;


&lt;h2&gt;
  
  
  Nexpath Beyond the Browser Extension
&lt;/h2&gt;

&lt;p&gt;The browser extension isn't the only way to use Nexpath. Its current documentation also covers &lt;strong&gt;Cursor&lt;/strong&gt;, &lt;strong&gt;Windsurf&lt;/strong&gt;, and &lt;strong&gt;Claude Code&lt;/strong&gt;, giving developers options for different types of AI-assisted development workflows.&lt;/p&gt;

&lt;p&gt;For editor-based development, Nexpath supports &lt;strong&gt;Cursor&lt;/strong&gt; and &lt;strong&gt;Windsurf&lt;/strong&gt; through its &lt;a href="https://marketplace.visualstudio.com/items?itemName=nexpath.nexpath-vscode" rel="noopener noreferrer"&gt;VS Code extension&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Nexpath also documents a CLI workflow for &lt;strong&gt;Claude Code&lt;/strong&gt;, bringing the same prompt-quality approach to terminal-based coding sessions.&lt;/p&gt;

&lt;p&gt;The integrations currently documented by the project are:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Coding environment&lt;/th&gt;
&lt;th&gt;Nexpath integration&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Replit&lt;/td&gt;
&lt;td&gt;Chrome / Firefox extension&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lovable&lt;/td&gt;
&lt;td&gt;Chrome / Firefox extension&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bolt&lt;/td&gt;
&lt;td&gt;Chrome / Firefox extension&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cursor&lt;/td&gt;
&lt;td&gt;VS Code extension&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Windsurf&lt;/td&gt;
&lt;td&gt;VS Code extension&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Code&lt;/td&gt;
&lt;td&gt;Nexpath CLI workflow&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The broader workflow stays simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Build → review the request → strengthen what is missing → decide → continue building.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That gives Nexpath a focused role in an AI coding workflow. &lt;strong&gt;You don't need to abandon your preferred coding environment or switch to a completely different way of building.&lt;/strong&gt; Nexpath adds a quality layer around the requests that drive the development process.&lt;/p&gt;

&lt;p&gt;The exact capabilities can vary between integrations, so developers should check Nexpath's current documentation when choosing an installation method.&lt;/p&gt;


&lt;h2&gt;
  
  
  What You Need to Get Started
&lt;/h2&gt;

&lt;p&gt;The browser extension can be used with a &lt;strong&gt;free Nexpath account&lt;/strong&gt; that includes $1 of credit. It also supports using your own OpenAI API key. &lt;/p&gt;

&lt;p&gt;The setup is easy. &lt;/p&gt;

&lt;p&gt;Download the extension and go to "Options" in the extension; it will take you to "Nexpath Settings".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0xmc0nk8v28eukd36ko5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0xmc0nk8v28eukd36ko5.png" alt="Nexpath Settings" width="781" height="793"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Create your free account by simply signing up with your email, and the Nexpath dashboard will open automatically, where you can copy your token.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fde9hdv4nygg0l4pm3rj8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fde9hdv4nygg0l4pm3rj8.png" alt="Nexpath dashboard" width="800" height="620"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Paste the token in the empty field of Nexpath settings, test, and save.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw95cmpui8zezqp6he3ih.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw95cmpui8zezqp6he3ih.png" alt="Nexpath API token" width="692" height="518"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Go back to the Nexpath dashboard, and you'll find the API token has become active.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcjz0gxvc6l9f0gn2rumo.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcjz0gxvc6l9f0gn2rumo.jpg" alt="Nexpath dashboard with active API token" width="800" height="780"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdffxq59bk25crsfn7z7a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdffxq59bk25crsfn7z7a.png" alt="Nexpath token status" width="625" height="501"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One thing to keep in mind is that Nexpath's credit is used for its prompt-quality processing, so it makes sense to test it with meaningful requests instead of repeatedly sending the same prompt just to see whether the extension reacts.&lt;/p&gt;


&lt;h2&gt;
  
  
  Real test case: Can Nexpath Catch What an AI Coding Agent Might Miss?
&lt;/h2&gt;

&lt;p&gt;To see how Nexpath behaves during a real coding workflow, the Nexpath team provided the video below showing the complete process, from installing the browser extension to testing prompts in Replit.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/iGQNqNOkV7w" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;The test starts with a few simple prompts:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Make a simple login page.”&lt;/p&gt;

&lt;p&gt;“Ship this to production now.”&lt;/p&gt;

&lt;p&gt;“Deploy the final release and go live.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Nexpath doesn't pop up for these prompts. And that's expected.&lt;/p&gt;

&lt;p&gt;These are direct requests that don't necessarily need extra context or a detailed checklist. Nexpath is designed to stay quiet when there isn't much useful guidance to add, so not every prompt triggers an enhancement.&lt;/p&gt;

&lt;p&gt;The fourth prompt is different:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Check the spec acceptance criteria against what was built: go through each acceptance criterion in the PRD and tell me whether it is fully satisfied, partially satisfied, or not yet implemented.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This time, Nexpath opens its side panel and provides an enhanced version of the prompt.&lt;/p&gt;

&lt;p&gt;The reason is clear: this request involves &lt;strong&gt;checking a specification against the implementation&lt;/strong&gt;. There are multiple acceptance criteria to review, and the result needs to distinguish between fully satisfied, partially satisfied, and missing requirements. Adding structure and verification guidance can make that task much clearer for the coding agent.&lt;/p&gt;

&lt;p&gt;The team then chooses the enhanced prompt and continues with it in Replit.&lt;/p&gt;

&lt;p&gt;That's the basic idea behind Nexpath. It doesn't need to interrupt every prompt. It steps in when a request has something that could benefit from more structure or verification.&lt;/p&gt;

&lt;p&gt;One last thing worth knowing: if Nexpath doesn't trigger when you think it should, you can regenerate a new Nexpath token and try again.&lt;/p&gt;




&lt;h2&gt;
  
  
  Nexpath Benchmark: What Happened When It Was Tested on SWE-bench Verified?
&lt;/h2&gt;

&lt;p&gt;Product benchmarks can be useful, but they need to be read carefully.&lt;/p&gt;

&lt;p&gt;A benchmark can show how a tool performed under a specific setup. It cannot automatically tell us how the same tool will perform across every project, coding environment, model, or developer workflow.&lt;/p&gt;

&lt;p&gt;Nexpath published a &lt;a href="https://github.com/hi0001234d/nexpath/blob/main/Nexpath_benchmark/README.md" rel="noopener noreferrer"&gt;benchmark&lt;/a&gt; to test one question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Does adding Nexpath's prompt guidance change how well an AI coding workflow performs on SWE-bench Verified?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The test used &lt;strong&gt;40 tasks from SWE-bench Verified&lt;/strong&gt; and compared two conditions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Claude Code alone&lt;/li&gt;
&lt;li&gt;Claude Code with Nexpath's prompt enhancement&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The reported result was &lt;strong&gt;27 solved tasks out of 40 without Nexpath and 29 out of 40 with Nexpath&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;So Nexpath solved two additional tasks in this particular test setup.&lt;/p&gt;

&lt;p&gt;That is a positive result, but it needs context.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Is SWE-bench Verified?
&lt;/h3&gt;

&lt;p&gt;SWE-bench is a benchmark built around real-world software engineering tasks from GitHub repositories. A task typically gives the coding system an issue or bug report and evaluates whether the generated patch actually solves the problem.&lt;/p&gt;

&lt;p&gt;The Verified subset is designed to contain tasks that have been manually reviewed for quality and reliability.&lt;/p&gt;

&lt;p&gt;For Nexpath's benchmark, the team selected 40 tasks from SWE-bench Verified and ran the same tasks under two conditions. The purpose was to isolate the effect of the prompt enhancement step. &lt;/p&gt;

&lt;p&gt;That setup matters.&lt;/p&gt;

&lt;p&gt;The benchmark isn't comparing Nexpath against another coding tool.&lt;/p&gt;

&lt;p&gt;It's asking whether the same coding workflow performs differently when Nexpath adds its guidance to the original task.&lt;/p&gt;

&lt;h3&gt;
  
  
  Claude Code Alone vs. Claude Code + Nexpath
&lt;/h3&gt;

&lt;p&gt;Here are the published results:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Setup&lt;/th&gt;
&lt;th&gt;Tasks Solved&lt;/th&gt;
&lt;th&gt;Success Rate&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude Code&lt;/td&gt;
&lt;td&gt;27 / 40&lt;/td&gt;
&lt;td&gt;67.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Code + Nexpath&lt;/td&gt;
&lt;td&gt;29 / 40&lt;/td&gt;
&lt;td&gt;72.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;According to the benchmark, that is an increase of &lt;strong&gt;5 percentage points&lt;/strong&gt;, or two additional solved tasks within the 40-task sample. &lt;/p&gt;

&lt;p&gt;The two conditions were kept separate by running each task in a fresh environment.&lt;/p&gt;

&lt;p&gt;The runs used the same task set, with each condition receiving its own fresh execution environment.&lt;/p&gt;

&lt;p&gt;That is the right direction for a comparison like this because it reduces the chance that one run affects another.&lt;/p&gt;

&lt;p&gt;Still, the result should be interpreted for what it is: &lt;strong&gt;a small benchmark run with 40 tasks&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The benchmark itself acknowledges this limitation, describing the two-task difference as a directional signal, not proof of a broad effect across AI coding tasks.&lt;/p&gt;

&lt;p&gt;I appreciate that this limitation is stated directly.&lt;/p&gt;

&lt;p&gt;Two extra solved tasks can be meaningful as an early signal.&lt;/p&gt;

&lt;p&gt;They do not establish that every developer will see a 5-point improvement in their own workflow.&lt;/p&gt;

&lt;h3&gt;
  
  
  How Nexpath Changed the Prompts
&lt;/h3&gt;

&lt;p&gt;Nexpath preserved the original bug report word for word and appended its guidance underneath it. The benchmark therefore tested additional structure around the same original task instead of replacing the task with a rewritten version. &lt;/p&gt;

&lt;p&gt;Across the 40 tasks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;38 prompts were enhanced&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;2 prompts were left unchanged&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Nexpath used &lt;strong&gt;57 different section types&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;The median enhanced prompt contained &lt;strong&gt;7 sections&lt;/strong&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This gives a clearer picture of what the benchmark is testing.&lt;/p&gt;

&lt;p&gt;Nexpath wasn't simply making every prompt longer.&lt;/p&gt;

&lt;p&gt;It was adding different kinds of development guidance depending on the task.&lt;/p&gt;

&lt;p&gt;The most common sections were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Verification or Test Plan&lt;/li&gt;
&lt;li&gt;Source Signal Guidance&lt;/li&gt;
&lt;li&gt;Reproduction or Evidence&lt;/li&gt;
&lt;li&gt;Expected / Actual State&lt;/li&gt;
&lt;li&gt;Risk / Safety / Confirmation &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That lines up with Nexpath's broader product idea.&lt;/p&gt;

&lt;p&gt;A coding tool may already be capable of writing a fix. The extra challenge can be defining what evidence should prove the fix, what behavior needs to be preserved, and which details from the issue are important.&lt;/p&gt;




&lt;h2&gt;
  
  
  Privacy and Control
&lt;/h2&gt;

&lt;p&gt;Giving an extension access to the prompts you send to coding tools naturally raises a privacy question.&lt;/p&gt;

&lt;p&gt;If Nexpath is reviewing the request, where does that request go?&lt;/p&gt;

&lt;p&gt;The answer depends on how you configure the product.&lt;/p&gt;

&lt;h3&gt;
  
  
  Your Credentials and Settings Stay Local
&lt;/h3&gt;

&lt;p&gt;Your token or OpenAI API key, along with your settings, are stored locally in your browser. &lt;/p&gt;

&lt;p&gt;You can use one of two options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a Nexpath account with Nexpath-provided credit&lt;/li&gt;
&lt;li&gt;your own OpenAI API key&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The data flow changes depending on which option you choose. &lt;/p&gt;

&lt;h4&gt;
  
  
  If You Use Your Own OpenAI API Key
&lt;/h4&gt;

&lt;p&gt;The prompt text is sent to OpenAI using your API key to generate the guidance. &lt;/p&gt;

&lt;p&gt;That means you should also consider OpenAI's own data and API policies when choosing this setup.&lt;/p&gt;

&lt;h4&gt;
  
  
  If You Use a Nexpath Token
&lt;/h4&gt;

&lt;p&gt;Prompt context is sent to Nexpath's service, which generates the response. &lt;/p&gt;

&lt;p&gt;This is worth understanding before using the extension with proprietary or sensitive project information.&lt;/p&gt;

&lt;p&gt;Developers should know which processing path they are choosing and make that decision based on their project's requirements.&lt;/p&gt;

&lt;h3&gt;
  
  
  Local History and Tracking
&lt;/h3&gt;

&lt;p&gt;The browser extension is local-first, and prompt history is stored locally. The product also does not include ads, third-party trackers, or remote code.&lt;/p&gt;

&lt;p&gt;The extension may occasionally ask for feedback about how it is performing. Responding sends anonymous, content-free action names and does not send the prompts themselves.&lt;/p&gt;

&lt;p&gt;For developers, the practical takeaway is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Check the processing option you are using before connecting Nexpath to a project.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you use your own OpenAI key, understand the OpenAI API path.&lt;/p&gt;

&lt;p&gt;If you use a Nexpath token, understand that prompt context is sent to Nexpath's service to generate the guidance.&lt;/p&gt;

&lt;p&gt;And if you're working with highly sensitive code or information, review the current &lt;a href="https://github.com/hi0001234d/nexpath#configuration-and-privacy" rel="noopener noreferrer"&gt;documentation and privacy&lt;/a&gt; details before testing the extension on that project.&lt;/p&gt;

&lt;p&gt;That is good practice for any tool that processes development prompts, not only Nexpath.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try Nexpath and Share Your Feedback
&lt;/h2&gt;

&lt;p&gt;Nexpath is still an evolving developer tool, and that makes real-world feedback especially useful.&lt;/p&gt;

&lt;p&gt;The team is openly asking developers to run Nexpath on their own code, try to break the method, and &lt;a href="https://github.com/hi0001234d/nexpath/discussions/94" rel="noopener noreferrer"&gt;report what happens&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;That includes negative feedback.&lt;/p&gt;

&lt;p&gt;If Nexpath doesn't trigger when you expect it to, that is useful information too. The team explicitly says that knowing the tool did nothing can be more valuable than another positive result because that is something a benchmark cannot capture. &lt;/p&gt;

&lt;p&gt;Developers can also suggest AI coding agents they want Nexpath to support. The project says that the agent list is influenced by those requests. &lt;/p&gt;

&lt;p&gt;For an early-stage developer tool, this kind of feedback loop is worth paying attention to.&lt;/p&gt;

&lt;p&gt;As a small thank-you for your time and thoughtful feedback, the Nexpath team will recognize three outstanding contributors.&lt;/p&gt;

&lt;p&gt;Submissions will be evaluated based on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;depth of feedback&lt;/li&gt;
&lt;li&gt;practical suggestions&lt;/li&gt;
&lt;li&gt;reproducible issues&lt;/li&gt;
&lt;li&gt;clear explanations&lt;/li&gt;
&lt;li&gt;helpful improvement ideas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The selection is based on the quality, originality, and usefulness of the feedback, not on whether the comments are positive or negative.&lt;/p&gt;

&lt;p&gt;The three winners will receive cash prizes 🤑&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Place&lt;/th&gt;
&lt;th&gt;Cash prize&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;🥇 1st&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$79&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;🥈 2nd&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$19&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;🥉 3rd&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$9&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;So try Nexpath, share your feedback, and win some cash 😍&lt;/p&gt;




&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is Nexpath?
&lt;/h3&gt;

&lt;p&gt;→ Nexpath is an AI prompt quality engineering layer for AI coding workflows. It reviews prompts before they reach the coding agent and can add things such as clearer requirements, acceptance criteria, verification steps, and risk checks while preserving the original request. &lt;/p&gt;

&lt;p&gt;It is designed for developers using AI coding agents and browser-based AI development tools who want more structure around the development process without giving up the speed of natural-language coding.&lt;/p&gt;

&lt;h3&gt;
  
  
  How does Nexpath improve AI coding prompts?
&lt;/h3&gt;

&lt;p&gt;→ Nexpath analyzes the prompt and, when it decides guidance is useful, prepares an enhanced version based on the original request.&lt;/p&gt;

&lt;p&gt;The added guidance can cover areas such as task breakdown, acceptance criteria, testing and verification, source signals, and potential risks. The original prompt remains visible, and the developer chooses which version to send. &lt;/p&gt;

&lt;p&gt;This makes Nexpath more of a prompt quality check than a replacement for the coding agent itself.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does Nexpath work with Replit, Lovable, and Bolt?
&lt;/h3&gt;

&lt;p&gt;→ Yes. Nexpath provides Chrome and Firefox browser extensions for &lt;strong&gt;Replit&lt;/strong&gt;, &lt;strong&gt;Lovable&lt;/strong&gt;, and &lt;strong&gt;Bolt.new&lt;/strong&gt;, and its documentation lists all three as fully supported and end-to-end tested integrations.&lt;/p&gt;

&lt;p&gt;The browser workflow is designed to review prompts directly where you are already building, so you don't need to manually copy prompts into a separate application.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does Nexpath work with Cursor and Windsurf?
&lt;/h3&gt;

&lt;p&gt;→ Yes. Nexpath provides a VS Code extension for Cursor and Windsurf, which the project describes as fully supported and end-to-end tested. Claude Code is supported through the Nexpath CLI. &lt;/p&gt;

&lt;p&gt;The published benchmark discussed in this article specifically measured Claude Code and showed an improvement when Nexpath was added to the workflow. Similar improvements may also be possible with other supported agents, but there isn't specific benchmark data in this test to apply the same results directly to Cursor, Windsurf, Replit, Lovable, or Bolt.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is Nexpath free?
&lt;/h3&gt;

&lt;p&gt;→ Nexpath offers a free account with &lt;strong&gt;$1.00 of credit&lt;/strong&gt; and does not require an OpenAI account for that option. Alternatively, developers can provide their own OpenAI API key. &lt;/p&gt;

&lt;p&gt;The VS Code/CLI documentation also describes a bring-your-own-API-key setup rather than a subscription requirement. &lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;AI coding agents have made the distance between an idea and working software shorter.&lt;/p&gt;

&lt;p&gt;That's great for experimentation.&lt;/p&gt;

&lt;p&gt;It's also where some of the old development habits can disappear quickly.&lt;/p&gt;

&lt;p&gt;You can go from a sentence in a chat box to a working feature without stopping to define acceptance criteria, think through edge cases, or decide how you're going to verify the result.&lt;/p&gt;

&lt;p&gt;That's the problem Nexpath is trying to address.&lt;/p&gt;

&lt;p&gt;It doesn't try to become another coding agent that writes the implementation for you. Its focus is the step immediately around the request: &lt;strong&gt;is this prompt giving the coding agent enough context to do the job properly, and what checks might be missing before the work moves forward?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;As AI coding gets faster, the problem may not always be writing the code. Sometimes it's knowing what should have been asked before the code was written.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's a useful problem to solve.&lt;/p&gt;




&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Thanks for reading! 🙏🏻 &lt;br&gt; I hope you found this useful ✅ &lt;br&gt; Please react and follow for more 😍 &lt;br&gt; Made with 💙 by &lt;a href="https://dev.to/hadil"&gt;Hadil Ben Abdallah&lt;/a&gt;
&lt;/th&gt;
&lt;th&gt;
&lt;a href="https://www.linkedin.com/in/hadil-ben-abdallah/" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu48q29oef3l4a6eow30h.png" alt="LinkedIn" width="40" height="40"&gt;&lt;/a&gt; &lt;a href="https://github.com/Hadil-Ben-Abdallah" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhuvszgj6eun7xfvnwv51.png" alt="GitHub" width="50" height="50"&gt;&lt;/a&gt; &lt;a href="https://x.com/hadilbnabdallah" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F53x550t83v5ner74xkxo.jpg" alt="Twitter" width="40" height="40"&gt;&lt;/a&gt;
&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;div class="ltag__user ltag__user__id__1209000"&gt;
    &lt;a href="/hadil" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1209000%2Fb29d37d8-2efe-4391-9796-a6f8a483f1bd.png" alt="hadil image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/hadil"&gt;Hadil Ben Abdallah&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/hadil"&gt;Software Engineer • Technical Writer (300K+ readers &amp;amp; 25K+ followers) • Trusted by 20+ startups and tech companies worldwide
I turn brands into websites people 💙 to use&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>ai</category>
      <category>coding</category>
      <category>agents</category>
      <category>kubernetes</category>
    </item>
    <item>
      <title>Angular DataGrid: A Free, Open-Source AG Grid Alternative Built for Scale</title>
      <dc:creator>Hadil Ben Abdallah</dc:creator>
      <pubDate>Tue, 08 Sep 2026 09:07:24 +0000</pubDate>
      <link>https://dev.to/hadil/angular-datagrid-a-free-open-source-ag-grid-alternative-built-for-scale-5gkm</link>
      <guid>https://dev.to/hadil/angular-datagrid-a-free-open-source-ag-grid-alternative-built-for-scale-5gkm</guid>
      <description>&lt;p&gt;Angular has changed in recent versions, especially around how developers handle reactive state. &lt;strong&gt;Signals&lt;/strong&gt; are now an important part of the framework, and that makes the architecture behind an Angular component worth paying attention to.&lt;/p&gt;

&lt;p&gt;Data grids are a good example.&lt;/p&gt;

&lt;p&gt;A grid can start as a simple list of rows and columns. Then requirements start piling up: sorting, filtering, editing, large datasets, virtualization, grouping, pivot tables, accessibility, theming, and more. Building all of those capabilities around a basic table can become a project of its own.&lt;/p&gt;

&lt;p&gt;That's where &lt;strong&gt;Angular DataGrid&lt;/strong&gt; comes in. It's an open-source, MIT-licensed Angular data grid built with Angular, TypeScript, and Angular CDK, with a Signals-based architecture and a separate paid Enterprise tier for advanced spreadsheet and data-governance features. &lt;/p&gt;

&lt;p&gt;In this article, I'll go through what Angular DataGrid offers, how to get started with it, which features matter when you're dealing with large datasets, how its free and Enterprise tiers differ, and how it compares with AG Grid.&lt;/p&gt;




&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://angular.gridengine.dev/" rel="noopener noreferrer"&gt;Angular DataGrid&lt;/a&gt; is a free, MIT-licensed Angular data grid built around modern Angular patterns, including Signals, with Angular CDK powering its virtualization layer. The project currently reports 100k+ rows supported, 25+ built-in features, 116 passing tests, and $0 license cost for the &lt;a href="https://github.com/bhushanpoojary/angular-datagrid" rel="noopener noreferrer"&gt;open-source&lt;/a&gt; tier. &lt;/p&gt;

&lt;p&gt;Here's what Angular DataGrid brings to the free tier:&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;MIT-licensed open-source core&lt;/strong&gt;&lt;br&gt;
✅ &lt;strong&gt;Signals-based architecture&lt;/strong&gt;&lt;br&gt;
✅ &lt;strong&gt;Virtual scrolling&lt;/strong&gt; for large datasets&lt;br&gt;
✅ &lt;strong&gt;Sorting, filtering, pagination, and quick search&lt;/strong&gt;&lt;br&gt;
✅ &lt;strong&gt;Row selection and inline editing&lt;/strong&gt;&lt;br&gt;
✅ &lt;strong&gt;Column resizing, reordering, pinning, and layout persistence&lt;/strong&gt;&lt;br&gt;
✅ &lt;strong&gt;Row grouping, aggregation, and Tree Data&lt;/strong&gt;&lt;br&gt;
✅ &lt;strong&gt;Basic Master/Detail&lt;/strong&gt;&lt;br&gt;
✅ &lt;strong&gt;Pivot tables and integrated charts&lt;/strong&gt;&lt;br&gt;
✅ &lt;strong&gt;Faceted search and live updates&lt;/strong&gt;&lt;br&gt;
✅ &lt;strong&gt;Context menus, tooltips, overlays, and cell/row styling&lt;/strong&gt;&lt;br&gt;
✅ &lt;strong&gt;Light, dark, and high-contrast themes&lt;/strong&gt;&lt;br&gt;
✅ &lt;strong&gt;Keyboard navigation and ARIA grid semantics&lt;/strong&gt;&lt;br&gt;
✅ &lt;strong&gt;CSV export&lt;/strong&gt;&lt;br&gt;
✅ &lt;strong&gt;No separate CSS import required&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There is also an optional &lt;strong&gt;Enterprise tier&lt;/strong&gt; for capabilities such as Formula Engine, Undo/Redo, Range Selection, Fill Handle, Server-Side Row Model, Cell Permissions, Audit Trail, Row Locking, Spreadsheet Import, PDF Export, Saved Views, and Form Editor. &lt;/p&gt;

&lt;p&gt;So if you're looking for an Angular data grid that gives you a broad feature set without a commercial license for the core functionality, Angular DataGrid is worth evaluating.&lt;/p&gt;


&lt;h2&gt;
  
  
  What Are Angular Data Grid Components?
&lt;/h2&gt;

&lt;p&gt;An &lt;strong&gt;Angular data grid component&lt;/strong&gt; is a table-like UI component designed for large, interactive datasets. It typically handles features such as sorting, filtering, pagination, inline editing, row selection, column management, and data visualization as part of the grid itself.&lt;/p&gt;

&lt;p&gt;That's different from rendering a normal HTML table with &lt;code&gt;*ngFor&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A basic Angular table can work perfectly well for a small dataset. Once the number of rows grows, though, the browser has to deal with a much larger DOM, and developers have to build more of the interaction layer themselves.&lt;/p&gt;

&lt;p&gt;There is no built-in virtualization in a plain table. Sorting, filtering, editing, selection, column resizing, keyboard navigation, and other behaviors also need to be implemented separately.&lt;/p&gt;

&lt;p&gt;A data grid brings those concerns into one component.&lt;/p&gt;

&lt;p&gt;For applications such as admin dashboards, inventory systems, analytics tools, CRM interfaces, financial applications, and internal data platforms, that can make a big difference in how much grid-specific code the application needs to maintain.&lt;/p&gt;

&lt;p&gt;The important distinction is that a data grid isn't simply a prettier table. It's an interactive data-management component designed around the problems that appear when users need to work with a lot of structured information.&lt;/p&gt;


&lt;h2&gt;
  
  
  What Features Really Matter in an Angular Data Grid?
&lt;/h2&gt;

&lt;p&gt;A long feature list doesn't automatically make a data grid useful.&lt;/p&gt;

&lt;p&gt;The features need to solve actual problems that appear when applications start working with structured and growing datasets.&lt;/p&gt;

&lt;p&gt;When evaluating an Angular data grid, I'd look at five areas first: performance, data operations, hierarchical data, accessibility, and customization. These are also the areas highlighted in the Angular DataGrid brief. &lt;/p&gt;
&lt;h3&gt;
  
  
  Performance at Scale
&lt;/h3&gt;

&lt;p&gt;The first thing to consider is how the grid behaves when the number of records grows.&lt;/p&gt;

&lt;p&gt;Rendering a few dozen rows is easy. Rendering thousands of rows creates a very different workload for the browser.&lt;/p&gt;

&lt;p&gt;That's why &lt;strong&gt;virtual scrolling&lt;/strong&gt; matters.&lt;/p&gt;

&lt;p&gt;A virtualized grid can keep the number of DOM elements under control by rendering the portion of the dataset that needs to be visible.&lt;/p&gt;

&lt;p&gt;For data-heavy applications, this is one of the first capabilities I'd check.&lt;/p&gt;
&lt;h3&gt;
  
  
  Data Operations
&lt;/h3&gt;

&lt;p&gt;Users need ways to find, organize, and analyze the records that matter.&lt;/p&gt;

&lt;p&gt;That starts with &lt;strong&gt;sorting and filtering&lt;/strong&gt;, but production applications often need more.&lt;/p&gt;

&lt;p&gt;Multi-column sorting, text/number/date/set filters, quick-filter search, row grouping, aggregation, and pivoting can turn a large dataset into something users can actually explore.&lt;/p&gt;

&lt;p&gt;The difference becomes obvious when a grid contains thousands of records. A user shouldn't have to scroll through the entire dataset to answer something as simple as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which records match this condition?&lt;/li&gt;
&lt;li&gt;Which items have the highest value?&lt;/li&gt;
&lt;li&gt;How are records distributed across categories?&lt;/li&gt;
&lt;li&gt;What does the data look like when grouped by a particular field?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A capable grid should handle those interactions as part of its data-management layer.&lt;/p&gt;
&lt;h3&gt;
  
  
  Hierarchical Data
&lt;/h3&gt;

&lt;p&gt;Not every dataset is flat.&lt;/p&gt;

&lt;p&gt;Organizations have departments and employees. Projects have tasks and subtasks. Products have categories and variants. Applications can also contain parent records with additional detail.&lt;/p&gt;

&lt;p&gt;Here, &lt;strong&gt;Tree Data&lt;/strong&gt; and &lt;strong&gt;Master/Detail&lt;/strong&gt; become useful.&lt;/p&gt;

&lt;p&gt;Tree Data lets users expand and collapse hierarchical records, while Master/Detail can expose additional information associated with a row.&lt;/p&gt;
&lt;h3&gt;
  
  
  Accessibility
&lt;/h3&gt;

&lt;p&gt;Accessibility is easy to overlook when evaluating data grids.&lt;/p&gt;

&lt;p&gt;A production grid needs more than clickable cells. Keyboard navigation, focus management, and correct ARIA semantics all matter when users need to operate the grid without relying entirely on a mouse.&lt;/p&gt;
&lt;h3&gt;
  
  
  Customization
&lt;/h3&gt;

&lt;p&gt;Finally, the grid needs to look and behave like part of the application.&lt;/p&gt;

&lt;p&gt;A data grid might need a light theme in one product and a dark theme in another. Some applications also need compact density, custom cell renderers, conditional row styling, tooltips, overlays, or application-specific colors.&lt;/p&gt;


&lt;h2&gt;
  
  
  Introducing Angular DataGrid
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://angular.gridengine.dev/" rel="noopener noreferrer"&gt;Angular DataGrid&lt;/a&gt; is a &lt;strong&gt;Signals-based&lt;/strong&gt; Angular &lt;a href="https://github.com/bhushanpoojary/angular-datagrid" rel="noopener noreferrer"&gt;open-source&lt;/a&gt; data grid built with Angular, TypeScript, and Angular CDK. It's distributed through the &lt;code&gt;@gridengine/angular-datagrid&lt;/code&gt; npm package and released under the &lt;strong&gt;MIT license&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;The Signals-based architecture is an important part of how the project is designed. This isn't just an Angular wrapper around a generic grid component. Angular DataGrid is built as an Angular component with Signals at its core.&lt;/p&gt;

&lt;p&gt;The project homepage currently lists:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;100k+ rows supported&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;25+ built-in features&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;116 passing tests&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;$0 license cost&lt;/strong&gt; for the open-source tier &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The project follows the existing &lt;code&gt;react-open-source-datagrid&lt;/code&gt; project as its reference specification, but the Angular version is built around Angular's Signals-based architecture. &lt;/p&gt;

&lt;p&gt;Angular DataGrid is part of the broader &lt;a href="https://gridengine.dev/" rel="noopener noreferrer"&gt;GridEngine&lt;/a&gt; platform, which provides data grid solutions for different technologies and use cases.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0w40sgfcqn5ijtxhlg4s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0w40sgfcqn5ijtxhlg4s.png" alt="Angular DataGrid library" width="799" height="319"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Installation &amp;amp; Quick Start
&lt;/h2&gt;

&lt;p&gt;Getting Angular DataGrid into an Angular project is straightforward.&lt;/p&gt;

&lt;p&gt;Install the grid package together with its Angular CDK peer dependency:&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; @gridengine/angular-datagrid @angular/cdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The basic component API lets you provide row data and column definitions directly from an Angular component. &lt;/p&gt;

&lt;p&gt;A minimal example looks like this:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@angular/core&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;DataGrid&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ColDef&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@gridengine/angular-datagrid&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Component&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;app-team&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;imports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;DataGrid&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`&amp;lt;gd-data-grid [rowData]="rowData" [columnDefs]="columnDefs" /&amp;gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;TeamComponent&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;rowData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Ada Lovelace&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Engineer&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Grace Hopper&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Engineer&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;];&lt;/span&gt;

  &lt;span class="nl"&gt;columnDefs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ColDef&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;headerName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ID&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;headerName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;sortable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;One small detail is worth calling out: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;There is no separate CSS file to import.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Angular DataGrid ships its styles inside the component through Angular view encapsulation. Themes and density can be configured through component inputs or &lt;code&gt;--gd-*&lt;/code&gt; CSS custom properties. &lt;/p&gt;

&lt;p&gt;That keeps the initial setup clean: install the package, import the component, provide the rows and columns, and then start configuring the features your application needs.&lt;/p&gt;

&lt;p&gt;The basic grid is only the starting point. The library's feature set covers everyday data operations, large-scale rendering, grouping and hierarchy, real-time data, search, visualization, accessibility, and customization.&lt;/p&gt;


&lt;h2&gt;
  
  
  Core Features Walkthrough
&lt;/h2&gt;

&lt;p&gt;The basic setup gets a grid on the screen, but the real value of a data grid comes from everything users can do once the data is there.&lt;/p&gt;

&lt;p&gt;Angular DataGrid's feature set covers the everyday interactions you'd expect from a modern grid, along with grouping, hierarchical data, analytics, search, real-time updates, visualization, accessibility, and UI customization. It lists &lt;strong&gt;25+ built-in features&lt;/strong&gt; across these areas. &lt;/p&gt;

&lt;p&gt;Let's break those capabilities down by the problems they solve.&lt;/p&gt;
&lt;h3&gt;
  
  
  Everyday Grid Interactions
&lt;/h3&gt;

&lt;p&gt;For a typical admin dashboard or data-management screen, users need to manipulate the grid without writing custom UI around every operation.&lt;/p&gt;

&lt;p&gt;Angular DataGrid includes multi-column sorting, several filter types, pagination, quick-filter search, checkbox-based row selection, and inline editing.&lt;/p&gt;

&lt;p&gt;The available everyday interactions include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multi-column sorting&lt;/li&gt;
&lt;li&gt;Text filters&lt;/li&gt;
&lt;li&gt;Number filters&lt;/li&gt;
&lt;li&gt;Date filters&lt;/li&gt;
&lt;li&gt;Set filters&lt;/li&gt;
&lt;li&gt;Quick-filter search&lt;/li&gt;
&lt;li&gt;Pagination&lt;/li&gt;
&lt;li&gt;Checkbox row selection&lt;/li&gt;
&lt;li&gt;Inline editing&lt;/li&gt;
&lt;li&gt;Text, number, date, select, and checkbox editors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This gives users several ways to move through a large dataset.&lt;/p&gt;

&lt;p&gt;For example, someone managing customer records could sort by account value, filter by status, select several rows, and update a field directly inside the grid.&lt;/p&gt;

&lt;p&gt;That workflow becomes even more useful when the grid is being used as the main workspace of an application.&lt;/p&gt;
&lt;h3&gt;
  
  
  Virtual Scrolling for Large Datasets
&lt;/h3&gt;

&lt;p&gt;Performance becomes a bigger concern as the number of records increases.&lt;/p&gt;

&lt;p&gt;Angular DataGrid uses &lt;strong&gt;virtual scrolling&lt;/strong&gt; to keep the rendered portion of the grid manageable. &lt;/p&gt;

&lt;p&gt;Users can work with a large dataset while the browser only needs to render the rows currently relevant to the viewport.&lt;/p&gt;

&lt;p&gt;The project supports &lt;strong&gt;100,000+ rows&lt;/strong&gt;, with Angular CDK-backed virtualization listed as part of the implementation. &lt;/p&gt;

&lt;p&gt;Consider a grid containing 50,000 records.&lt;/p&gt;

&lt;p&gt;A conventional table would create a very large DOM if all of those records were rendered at once. A virtualized grid can keep the visible portion small while the user scrolls through the larger collection.&lt;/p&gt;

&lt;p&gt;For Angular applications dealing with large administrative datasets, analytics records, inventory, or operational data, this is one of the features worth testing early.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdgfklfevt0rm6w659t45.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdgfklfevt0rm6w659t45.png" alt="Angular DataGrid Virtual Scrolling Demo with 100,000 rows" width="800" height="893"&gt;&lt;/a&gt;&lt;/p&gt;
Angular DataGrid Virtual Scrolling Demo with 100,000 rows
&amp;nbsp;
&lt;h3&gt;
  
  
  Sorting, Filtering, and Quick Search
&lt;/h3&gt;

&lt;p&gt;Sorting and filtering are simple features until the dataset becomes large enough that users depend on them for almost every interaction.&lt;/p&gt;

&lt;p&gt;Angular DataGrid supports &lt;strong&gt;multi-column sorting&lt;/strong&gt; along with text, number, date, and set filters. There's also a &lt;strong&gt;quick-filter search bar&lt;/strong&gt; for rapidly narrowing the records displayed by the grid. &lt;/p&gt;

&lt;p&gt;That combination gives users both precise and fast ways to find information.&lt;/p&gt;

&lt;p&gt;For example, a support dashboard could filter tickets by status, search for a customer name, and then sort the remaining records by priority and creation date.&lt;/p&gt;

&lt;p&gt;The important part is that these operations are already part of the grid's feature set. Developers don't have to construct a separate filtering interface for every dataset.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpkmsbu4ezd35d5rirgil.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpkmsbu4ezd35d5rirgil.png" alt="Angular DataGrid Sorting Demo" width="800" height="769"&gt;&lt;/a&gt;&lt;/p&gt;
Angular DataGrid Sorting Demo
&amp;nbsp;
&lt;h3&gt;
  
  
  Selection and Inline Editing
&lt;/h3&gt;

&lt;p&gt;Data grids often become more useful when users can work with records directly.&lt;/p&gt;

&lt;p&gt;Angular DataGrid supports &lt;strong&gt;checkbox-based row selection&lt;/strong&gt; and inline editing with several editor types:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Text&lt;/li&gt;
&lt;li&gt;Number&lt;/li&gt;
&lt;li&gt;Date&lt;/li&gt;
&lt;li&gt;Select&lt;/li&gt;
&lt;li&gt;Checkbox&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That covers a wide range of common CRUD-style interfaces.&lt;/p&gt;

&lt;p&gt;A product-management grid, for example, could allow a user to select records for a batch workflow while also editing a product's name, price, category, or availability directly inside the relevant cells.&lt;/p&gt;

&lt;p&gt;This keeps routine changes close to the data being managed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuuxzd5nms7za61sy3sst.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuuxzd5nms7za61sy3sst.png" alt="Angular DataGrid Selection Demo" width="800" height="747"&gt;&lt;/a&gt;&lt;/p&gt;
Angular DataGrid Selection Demo
&amp;nbsp;
&lt;h3&gt;
  
  
  Column Operations, Pinning, and Layout Persistence
&lt;/h3&gt;

&lt;p&gt;Users don't always want to view a grid in the same way.&lt;/p&gt;

&lt;p&gt;Angular DataGrid includes &lt;strong&gt;column resizing, column reordering, left and right column pinning, and layout persistence&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Column pinning is useful when important information needs to remain visible while the user moves horizontally through a wide dataset.&lt;/p&gt;

&lt;p&gt;Layout persistence adds another practical layer. A user can arrange the columns around their workflow and have that preferred layout restored later.&lt;/p&gt;

&lt;p&gt;These features can become important when a grid has many columns and different users need different views of the same underlying data.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb0cgojzldm3u9pnyfsfd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb0cgojzldm3u9pnyfsfd.png" alt="Angular DataGrid Column Operations Demo" width="800" height="707"&gt;&lt;/a&gt;&lt;/p&gt;
Angular DataGrid Column Operations Demo
&amp;nbsp;
&lt;h3&gt;
  
  
  Row Pinning, Dragging, and Cell/Row Styling
&lt;/h3&gt;

&lt;p&gt;The grid also includes UI features for controlling how important records are presented.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Row pinning&lt;/strong&gt; can keep selected rows at the top or bottom of the grid, while drag-and-drop interactions support row reordering workflows.&lt;/p&gt;

&lt;p&gt;Angular DataGrid also supports &lt;strong&gt;cell and row styling&lt;/strong&gt;, giving developers control over how specific data should appear. The feature list groups these capabilities with the grid's broader visualization and UI features. &lt;/p&gt;

&lt;p&gt;That can be useful for conditional interfaces where a row needs to communicate something visually, such as a warning state, status, priority, or other application-specific condition.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa31x45z7a5r7dc5gktag.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa31x45z7a5r7dc5gktag.png" alt="Angular DataGrid Cell/Row Styling Demo" width="800" height="701"&gt;&lt;/a&gt;&lt;/p&gt;
Angular DataGrid Cell/Row Styling Demo
&amp;nbsp;
&lt;h3&gt;
  
  
  Tooltips, Overlays, and Context Menus
&lt;/h3&gt;

&lt;p&gt;A dense data grid can contain a lot of information in a small amount of screen space.&lt;/p&gt;

&lt;p&gt;Angular DataGrid includes &lt;strong&gt;tooltips and overlays&lt;/strong&gt; for displaying supporting information without permanently adding more content to every row or cell.&lt;/p&gt;

&lt;p&gt;It also includes a &lt;strong&gt;context menu&lt;/strong&gt; with actions such as copying data and exporting CSV. &lt;/p&gt;

&lt;p&gt;This gives users another interaction layer when working with records, especially in interfaces where right-click or contextual actions make sense.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnw5vedqn2lwvfek9ix85.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnw5vedqn2lwvfek9ix85.png" alt="Angular DataGrid Tooltips, overlays &amp;amp; custom cell renderers Demon" width="800" height="704"&gt;&lt;/a&gt;&lt;/p&gt;
Angular DataGrid Tooltips, overlays &amp;amp; custom cell renderers Demo



&lt;h2&gt;
  
  
  Grouping, Hierarchy, and Data Analysis
&lt;/h2&gt;

&lt;p&gt;Once a dataset becomes more complex, a flat list of rows can make relationships difficult to understand.&lt;/p&gt;

&lt;p&gt;Angular DataGrid addresses this with several features for grouping, hierarchy, and analysis.&lt;/p&gt;
&lt;h3&gt;
  
  
  Row Grouping and Aggregation
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Row grouping&lt;/strong&gt; lets users organize records according to shared values.&lt;/p&gt;

&lt;p&gt;For example, an employee dataset could be grouped by department, while an order dataset could be grouped by customer or region.&lt;/p&gt;

&lt;p&gt;Grouping becomes more useful when combined with &lt;strong&gt;aggregation&lt;/strong&gt;, because users can work with summarized values alongside the individual records.&lt;/p&gt;

&lt;p&gt;This changes the grid from a simple record viewer into a tool for exploring how a dataset is structured.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feqh787ino6g6lu5jqn1q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feqh787ino6g6lu5jqn1q.png" alt="Angular DataGrid Row Grouping and Aggregation Demo" width="800" height="786"&gt;&lt;/a&gt;&lt;/p&gt;
Angular DataGrid Row Grouping and Aggregation Demo
&amp;nbsp;
&lt;h3&gt;
  
  
  Tree Data
&lt;/h3&gt;

&lt;p&gt;Some datasets naturally have parent-child relationships.&lt;/p&gt;

&lt;p&gt;Angular DataGrid's &lt;strong&gt;Tree Data&lt;/strong&gt; support lets users expand and collapse hierarchical records. &lt;/p&gt;

&lt;p&gt;Think about a project management application.&lt;/p&gt;

&lt;p&gt;A project could contain phases, each phase could contain tasks, and tasks could have nested subtasks. A flat table would make that hierarchy harder to follow. Tree Data gives users an expandable structure that reflects the underlying relationships.&lt;/p&gt;

&lt;p&gt;The same approach can work for organizational structures, file systems, product categories, or other nested datasets.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1jk309xr2yhgtrlpuvh3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1jk309xr2yhgtrlpuvh3.png" alt="Angular DataGrid Tree Data Demo" width="800" height="660"&gt;&lt;/a&gt;&lt;/p&gt;
Angular DataGrid Tree Data Demo
&amp;nbsp;
&lt;h3&gt;
  
  
  Master/Detail
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Master/Detail&lt;/strong&gt; provides another way to expose related information.&lt;/p&gt;

&lt;p&gt;The free tier includes basic expandable Master/Detail panels, allowing users to open additional information associated with a row. &lt;/p&gt;

&lt;p&gt;This can be useful when the main grid needs to stay compact while each record has additional fields or related data that users only need occasionally.&lt;/p&gt;

&lt;p&gt;The Enterprise tier later extends this concept with &lt;strong&gt;advanced Master/Detail&lt;/strong&gt;, including lazy-loaded and cached detail rows for larger nested datasets. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqyts99r64wobja5fsygm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqyts99r64wobja5fsygm.png" alt="Angular DataGrid Master/Detail Demo" width="799" height="644"&gt;&lt;/a&gt;&lt;/p&gt;
Angular DataGrid Master/Detail Demo
&amp;nbsp;
&lt;h3&gt;
  
  
  Pivot Tables
&lt;/h3&gt;

&lt;p&gt;A &lt;strong&gt;Pivot Table&lt;/strong&gt; is useful when users need to look at the same dataset from different dimensions.&lt;/p&gt;

&lt;p&gt;For example, sales data could be organized by region across columns and product categories across rows, allowing users to inspect totals from a different perspective.&lt;/p&gt;

&lt;p&gt;Angular DataGrid includes Pivot Table functionality in its free tier. &lt;/p&gt;

&lt;p&gt;That is a meaningful capability for analytics-heavy applications because pivoting can answer questions that are difficult to explore through a conventional row-by-row grid.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe7err9qpvdjru807yys5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe7err9qpvdjru807yys5.png" alt="Angular DataGrid Pivot Tables Demo" width="800" height="645"&gt;&lt;/a&gt;&lt;/p&gt;
Angular DataGrid Pivot Tables Demo
&amp;nbsp;
&lt;h3&gt;
  
  
  Integrated Charts
&lt;/h3&gt;

&lt;p&gt;Angular DataGrid also includes &lt;strong&gt;Integrated Charts&lt;/strong&gt;, which can generate quick SVG charts from grid selections. &lt;/p&gt;

&lt;p&gt;The useful part here is the connection between the grid and the visualization.&lt;/p&gt;

&lt;p&gt;A user can work with a subset of the data, select what they want to analyze, and turn that selection into a visual representation.&lt;/p&gt;

&lt;p&gt;For internal analytics tools and dashboards, this can reduce the need to create a separate visualization flow for every small data-exploration task.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqqebtg0zfteeipcq9wf1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqqebtg0zfteeipcq9wf1.png" alt="Angular DataGrid Integrated Charts Demo" width="800" height="839"&gt;&lt;/a&gt;&lt;/p&gt;
Angular DataGrid Integrated Charts Demo



&lt;h2&gt;
  
  
  Faceted Search and Live Data
&lt;/h2&gt;

&lt;p&gt;Some applications deal with datasets that change continuously.&lt;/p&gt;

&lt;p&gt;Monitoring dashboards, operational systems, financial interfaces, and real-time analytics applications all need ways to make those changes visible.&lt;/p&gt;

&lt;p&gt;Angular DataGrid includes two features aimed at this kind of workflow: &lt;strong&gt;faceted search&lt;/strong&gt; and &lt;strong&gt;live updates&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Faceted Search
&lt;/h3&gt;

&lt;p&gt;Faceted search combines filtering with information about the values available in the dataset.&lt;/p&gt;

&lt;p&gt;Angular DataGrid's feature list describes it as supporting &lt;strong&gt;value counts and token search&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;That can help users understand the dataset while narrowing it down.&lt;/p&gt;

&lt;p&gt;For example, if a status field contains several possible values, seeing the available values and their counts gives users more context when deciding which filters to apply.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvaburg9q21tfzn222vhq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvaburg9q21tfzn222vhq.png" alt="Angular DataGrid Faceted Search Charts Demo" width="800" height="632"&gt;&lt;/a&gt;&lt;/p&gt;
Angular DataGrid Faceted Search Charts Demo
&amp;nbsp;
&lt;h3&gt;
  
  
  Live Updates
&lt;/h3&gt;

&lt;p&gt;For changing datasets, Angular DataGrid can provide &lt;strong&gt;live updates with flash-on-change cells&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;When a value changes, the cell can visually indicate that an update occurred.&lt;/p&gt;

&lt;p&gt;That small interaction can make a big difference in monitoring interfaces. Users don't have to repeatedly scan every value to figure out what changed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4hdceihmey3vovih6fjv.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4hdceihmey3vovih6fjv.gif" alt="Angular DataGrid Live Updates Demo" width="800" height="596"&gt;&lt;/a&gt;&lt;/p&gt;
Angular DataGrid Live Updates Demo



&lt;h2&gt;
  
  
  Theming and Customization
&lt;/h2&gt;

&lt;p&gt;A data grid usually needs to match the rest of the application.&lt;/p&gt;

&lt;p&gt;Angular DataGrid includes &lt;strong&gt;light, dark, and high-contrast themes&lt;/strong&gt;, along with density modes and CSS custom-property overrides. It also supports custom cell renderer templates. &lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;gd-data-grid&lt;/span&gt;
  &lt;span class="na"&gt;[rowData]=&lt;/span&gt;&lt;span class="s"&gt;"rowData"&lt;/span&gt;
  &lt;span class="na"&gt;[columnDefs]=&lt;/span&gt;&lt;span class="s"&gt;"columnDefs"&lt;/span&gt;
  &lt;span class="na"&gt;theme=&lt;/span&gt;&lt;span class="s"&gt;"dark"&lt;/span&gt;
  &lt;span class="na"&gt;density=&lt;/span&gt;&lt;span class="s"&gt;"compact"&lt;/span&gt;
&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;style&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;gd-data-grid&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="py"&gt;--gd-accent-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#7c3aed&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="py"&gt;--gd-border-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#334155&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The CSS custom properties make it possible to adjust the visual details of the grid while keeping the component inside Angular's view-encapsulation model.&lt;/p&gt;

&lt;p&gt;Custom cell renderers are useful when a standard text value isn't enough.&lt;/p&gt;

&lt;p&gt;A status column could display badges. A score column could use a visual indicator. A date column could use application-specific formatting.&lt;/p&gt;

&lt;p&gt;That gives developers more control over the final UI without having to replace the grid's underlying rendering system.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu7ye43wzu3dkucea3p55.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu7ye43wzu3dkucea3p55.png" alt="Angular DataGrid Theming and Customization Demo" width="800" height="669"&gt;&lt;/a&gt;&lt;/p&gt;
Angular DataGrid Theming and Customization Demo



&lt;h2&gt;
  
  
  Accessibility and Keyboard Navigation
&lt;/h2&gt;

&lt;p&gt;Accessibility deserves its own mention because data grids can become difficult to operate when keyboard and focus behavior are handled poorly.&lt;/p&gt;

&lt;p&gt;Angular DataGrid includes &lt;strong&gt;roving-tabindex keyboard navigation&lt;/strong&gt; and &lt;strong&gt;ARIA grid semantics&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;The goal is to make the grid's interactive structure understandable to assistive technologies while giving keyboard users a predictable way to move through the interface.&lt;/p&gt;

&lt;p&gt;For applications used by a broad range of users, these details are part of the grid's overall quality, not an optional visual enhancement.&lt;/p&gt;


&lt;h2&gt;
  
  
  Documentation and Grid API
&lt;/h2&gt;

&lt;p&gt;Angular DataGrid also exposes an &lt;strong&gt;imperative Grid API&lt;/strong&gt;, alongside API documentation covering inputs, outputs, methods, and &lt;code&gt;ColDef&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;This matters when the declarative component configuration isn't enough for a more complex application.&lt;/p&gt;

&lt;p&gt;A grid may need to react to an external event, trigger an operation programmatically, or coordinate its state with another part of the application.&lt;/p&gt;

&lt;p&gt;Having an API layer gives developers a way to integrate those interactions into a larger Angular application.&lt;/p&gt;


&lt;h2&gt;
  
  
  Free vs. Enterprise: What's Actually Free?
&lt;/h2&gt;

&lt;p&gt;At this point, it's important to separate the open-source functionality from the paid Enterprise features.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;free Angular DataGrid tier is MIT-licensed&lt;/strong&gt; and includes a much broader set of functionality than basic sorting and pagination. That includes virtual scrolling, sorting and filtering, selection, editing, column operations, grouping and aggregation, Tree Data, basic Master/Detail, Pivot Table, faceted search, live updates, integrated charts, context menus, styling, theming, accessibility, and CSV export. &lt;/p&gt;

&lt;p&gt;The project also has a separate &lt;strong&gt;Enterprise tier&lt;/strong&gt; for teams that need more advanced spreadsheet workflows, backend-driven data handling, collaboration controls, and governance features.&lt;/p&gt;

&lt;p&gt;The Enterprise feature list includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Formula Engine:&lt;/strong&gt; Excel-style formulas evaluated directly in cells&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Undo / Redo:&lt;/strong&gt; Multi-step edit history&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Range Selection:&lt;/strong&gt; Excel-style cell-range selection&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clipboard (TSV):&lt;/strong&gt; Excel-compatible copy and paste&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fill Handle:&lt;/strong&gt; Drag-to-fill series and copy operations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advanced Master/Detail:&lt;/strong&gt; Lazy-loaded and cached detail rows&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server-Side Row Model:&lt;/strong&gt; Block-fetched data for huge backend-driven datasets&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transactions:&lt;/strong&gt; Staged add, update, and remove operations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cell Permissions:&lt;/strong&gt; Per-cell read/edit controls&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit Trail:&lt;/strong&gt; Immutable edit history&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Row Locking:&lt;/strong&gt; Collaborative row locks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Excel / CSV Import:&lt;/strong&gt; Mapping, validation, and coercion of spreadsheet data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PDF Export:&lt;/strong&gt; Branded, paginated PDF documents&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Filter Presets:&lt;/strong&gt; Savable AND/OR filter configurations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Saved Views:&lt;/strong&gt; Personal and shared grid layouts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Form Editor:&lt;/strong&gt; Slide-in panel for structured record editing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These Enterprise capabilities are explicitly separated from the free feature set in the project brief. &lt;/p&gt;

&lt;p&gt;Here's the distinction at a glance:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Free / Open-Source&lt;/th&gt;
&lt;th&gt;Enterprise&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;License&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;td&gt;Paid&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Virtual Scrolling&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sorting &amp;amp; Filtering&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pagination&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quick Filter&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Row Selection&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Inline Editing&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Column Resize / Reorder&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Column Pinning&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Layout Persistence&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Row Pinning &amp;amp; Drag&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Row Grouping &amp;amp; Aggregation&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tree Data&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Master/Detail&lt;/td&gt;
&lt;td&gt;Basic&lt;/td&gt;
&lt;td&gt;Advanced&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pivot Table&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Faceted Search&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Live Updates&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Integrated Charts&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Context Menu&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cell &amp;amp; Row Styling&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tooltips &amp;amp; Overlays&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Theming &amp;amp; Density&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Keyboard Navigation &amp;amp; ARIA&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CSV Export&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Formula Engine&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Undo / Redo&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Range Selection&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Clipboard (TSV)&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fill Handle&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Server-Side Row Model&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transactions&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cell Permissions&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Audit Trail&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Row Locking&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Excel / CSV Import&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PDF Export&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Filter Presets&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Saved Views&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Form Editor&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The split makes the positioning fairly clear. A team can use the MIT-licensed core for a broad range of data-heavy Angular applications, then consider Enterprise when the requirements move toward spreadsheet-style editing, backend-driven datasets, collaborative controls, or stronger governance.&lt;/p&gt;

&lt;p&gt;That licensing distinction also becomes important when comparing Angular DataGrid with &lt;strong&gt;AG Grid&lt;/strong&gt;, because several advanced capabilities available in Angular DataGrid's free tier are associated with AG Grid Enterprise.&lt;/p&gt;


&lt;h2&gt;
  
  
  How Angular DataGrid Compares to AG Grid
&lt;/h2&gt;

&lt;p&gt;If you're searching for an &lt;strong&gt;AG Grid alternative for Angular&lt;/strong&gt;, the important comparison is not just the total number of features. It's how much functionality you get in the free tier.&lt;/p&gt;

&lt;p&gt;AG Grid Community is free and open source, while features such as row grouping, pivoting, Tree Data, Master/Detail, Server-Side Row Model, Integrated Charts, and Enterprise context-menu functionality are part of AG Grid Enterprise.&lt;/p&gt;

&lt;p&gt;Angular DataGrid takes a different approach with its free MIT-licensed tier.&lt;/p&gt;

&lt;p&gt;Here's a broader comparison between AG Grid and Angular DataGrid:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;AG Grid Community&lt;/th&gt;
&lt;th&gt;AG Grid Enterprise&lt;/th&gt;
&lt;th&gt;Angular DataGrid Free&lt;/th&gt;
&lt;th&gt;Angular DataGrid Enterprise&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;License&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;td&gt;Commercial&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;td&gt;Paid&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Virtual Scrolling&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sorting&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-Column Sorting&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Filtering&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Text / Number / Date Filters&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Set Filter&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quick Filter&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pagination&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Checkbox Row Selection&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Inline Editing&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Text / Number / Date / Select / Checkbox Editors&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Column Resizing&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Column Reordering&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Column Pinning&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Layout Persistence&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Row Pinning&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Row Dragging&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Row Grouping&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Aggregation&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tree Data&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Master/Detail&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Basic&lt;/td&gt;
&lt;td&gt;Advanced&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pivot Table&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Context Menu&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Integrated Charts&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Faceted Search&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Live / Flash Updates&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cell &amp;amp; Row Styling&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tooltips &amp;amp; Overlays&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Theming&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Density Modes&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Custom Cell Renderers&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Keyboard Navigation&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ARIA Grid Semantics&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CSV Export&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Formula Engine&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Undo / Redo&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Range Selection&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Clipboard (TSV)&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fill Handle&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Advanced Master/Detail&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Server-Side Row Model&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transactions&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cell Permissions&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Audit Trail&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Row Locking&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Excel / CSV Import&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PDF Export&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Filter Presets&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Saved Views&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Form Editor&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  Who Should Use Angular DataGrid?
&lt;/h2&gt;

&lt;p&gt;Angular DataGrid makes sense for Angular teams that need a serious data grid without immediately committing to a commercial grid license.&lt;/p&gt;

&lt;p&gt;I'd consider it a good fit for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Internal admin tools&lt;/strong&gt; where users manage large collections of records&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SaaS dashboards&lt;/strong&gt; that need sorting, filtering, grouping, and interactive exploration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analytics applications&lt;/strong&gt; that benefit from Pivot Tables and Integrated Charts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data-heavy Angular applications&lt;/strong&gt; where virtual scrolling becomes important&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Applications with hierarchical data&lt;/strong&gt; that can use Tree Data or Master/Detail&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom Angular interfaces&lt;/strong&gt; that need control over themes, density, and cell rendering&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Teams evaluating an AG Grid alternative&lt;/strong&gt; that want advanced functionality in the free tier&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your application needs spreadsheet-grade collaboration or governance from day one, features such as &lt;strong&gt;Undo/Redo, Range Selection, Cell Permissions, Audit Trail, Row Locking, or Server-Side Row Model&lt;/strong&gt; belong to the Enterprise tier. &lt;/p&gt;

&lt;p&gt;That makes the licensing model worth considering early. The free tier covers a broad range of standard data-grid requirements, while Enterprise gives teams a path forward when the application needs more advanced workflows.&lt;/p&gt;

&lt;p&gt;📌 If you find this useful, consider starring the GitHub repo; it helps support the open-source project and its continued development.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/bhushanpoojary/angular-datagrid" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;⭐ Star Angular DataGrid on GitHub&lt;/a&gt;
&lt;/p&gt;


&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;
&lt;h3&gt;
  
  
  What is an Angular data grid?
&lt;/h3&gt;

&lt;p&gt;→ An Angular data grid is an interactive table component designed for working with structured datasets. It typically provides features such as sorting, filtering, selection, editing, column management, virtualization, and data analysis without requiring developers to build each interaction around a basic HTML table.&lt;/p&gt;
&lt;h3&gt;
  
  
  What features should I look for in an Angular data grid?
&lt;/h3&gt;

&lt;p&gt;→ The most useful features depend on the application, but large Angular applications commonly need virtualization, sorting, filtering, inline editing, row selection, column management, grouping, hierarchical data, accessibility, and theming. Analytics-heavy applications may also need pivot tables and integrated charts.&lt;/p&gt;
&lt;h3&gt;
  
  
  Is Angular DataGrid free to use?
&lt;/h3&gt;

&lt;p&gt;→ Yes. Angular DataGrid's core is MIT-licensed and free, including virtual scrolling, grouping, Tree Data, Pivot Tables, Integrated Charts, theming, accessibility, and other core grid features. A separate Enterprise tier adds capabilities such as formulas, Undo/Redo, range selection, server-side data handling, and governance features. &lt;/p&gt;
&lt;h3&gt;
  
  
  Does Angular DataGrid support Angular Signals?
&lt;/h3&gt;

&lt;p&gt;→ Yes. Angular DataGrid is built as a Signals-based Angular component, making Signals part of its underlying architecture. &lt;/p&gt;
&lt;h3&gt;
  
  
  Do I need to import a separate CSS file for Angular DataGrid?
&lt;/h3&gt;

&lt;p&gt;→ No. The library ships its styles inside the component through Angular view encapsulation, so there is no separate CSS file to import. Themes and density can be configured through component inputs and &lt;code&gt;--gd-*&lt;/code&gt; CSS custom properties.&lt;/p&gt;


&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Angular DataGrid gives Angular developers a broad MIT-licensed feature set that goes well beyond basic table functionality. &lt;/p&gt;

&lt;p&gt;Virtual scrolling, grouping, Tree Data, Pivot Tables, Integrated Charts, theming, accessibility, and live updates are available in the free tier, while Enterprise adds a clear path for more advanced spreadsheet and governance requirements.&lt;/p&gt;

&lt;p&gt;For Angular teams evaluating data grids, the main point is simple. You don't have to start with a commercial license to get a feature-rich grid, and you still have an Enterprise path when your application's requirements grow.&lt;/p&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Thanks for reading! 🙏🏻 &lt;br&gt; I hope you found this useful ✅ &lt;br&gt; Please react and follow for more 😍 &lt;br&gt; Made with 💙 by &lt;a href="https://dev.to/hadil"&gt;Hadil Ben Abdallah&lt;/a&gt;
&lt;/th&gt;
&lt;th&gt;
&lt;a href="https://www.linkedin.com/in/hadil-ben-abdallah/" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu48q29oef3l4a6eow30h.png" alt="LinkedIn" width="40" height="40"&gt;&lt;/a&gt; &lt;a href="https://github.com/Hadil-Ben-Abdallah" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhuvszgj6eun7xfvnwv51.png" alt="GitHub" width="50" height="50"&gt;&lt;/a&gt; &lt;a href="https://x.com/hadilbnabdallah" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F53x550t83v5ner74xkxo.jpg" alt="Twitter" width="40" height="40"&gt;&lt;/a&gt;
&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;div class="ltag__user ltag__user__id__1209000"&gt;
    &lt;a href="/hadil" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1209000%2Fb29d37d8-2efe-4391-9796-a6f8a483f1bd.png" alt="hadil image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/hadil"&gt;Hadil Ben Abdallah&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/hadil"&gt;Software Engineer • Technical Writer (300K+ readers &amp;amp; 25K+ followers) • Trusted by 20+ startups and tech companies worldwide
I turn brands into websites people 💙 to use&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>webdev</category>
      <category>programming</category>
      <category>angular</category>
      <category>opensource</category>
    </item>
    <item>
      <title>I Tested Brilliant.design: Building a Real Portfolio from Figma to AI-Powered Design and Code</title>
      <dc:creator>Hadil Ben Abdallah</dc:creator>
      <pubDate>Mon, 07 Sep 2026 09:12:44 +0000</pubDate>
      <link>https://dev.to/hadil/i-tested-brilliantdesign-building-a-real-portfolio-from-figma-to-ai-powered-design-and-code-5b2a</link>
      <guid>https://dev.to/hadil/i-tested-brilliantdesign-building-a-real-portfolio-from-figma-to-ai-powered-design-and-code-5b2a</guid>
      <description>&lt;p&gt;I’ve used quite a few AI design tools, but I was always thinking about what might happen when I stop generating a fresh screen and start working on a real design.&lt;/p&gt;

&lt;p&gt;Generating a nice-looking landing page from a prompt has become easy. Importing an existing design, editing it without breaking its visual language, asking an AI agent to understand the canvas, creating another page that follows the same design system, and eventually getting that design into a real React workflow is a better test, I think.&lt;/p&gt;

&lt;p&gt;That’s what I wanted to do with Brilliant.design.&lt;/p&gt;

&lt;p&gt;For this hands-on review, I decided not to start with a blank canvas. I used a real developer portfolio I picked from Figma and brought it into Brilliant. From there, I worked through the editor manually, connected OpenAI Codex through MCP, asked Codex to inspect and modify the design, created a second canvas from the existing design system, tested Brilliant’s built-in AI with Codex, and tried its Playground mode.&lt;/p&gt;

&lt;p&gt;I also looked at the parts of Brilliant that matter to developers beyond the visual editor, including its design system, Blueprint language, MCP workflow, and design-to-code options.&lt;/p&gt;




&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;I tested &lt;a href="https://brilliant.design/" rel="noopener noreferrer"&gt;Brilliant.design&lt;/a&gt; by using a real developer portfolio as the starting point instead of building a random demo from scratch. I imported the portfolio from Figma, made manual changes, connected Codex through MCP, asked Codex to understand and modify the canvas, created a new canvas using the existing design system, tested Brilliant’s built-in AI with Codex, and explored Playground mode.&lt;/p&gt;

&lt;p&gt;Here’s the short version of what I found:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Figma import:&lt;/strong&gt; Brilliant can bring an existing Figma design into an editable canvas, including layout, vectors, text, fills, strokes, auto layout, and other design properties.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manual editing:&lt;/strong&gt; The imported design remains editable, so you can continue working with it as an actual design instead of treating the import like a static screenshot.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP:&lt;/strong&gt; Connecting Codex to Brilliant gave me a way to work on the design from the terminal while Brilliant handled the visual canvas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI agents:&lt;/strong&gt; Codex could inspect the existing portfolio and work with the canvas through Brilliant's MCP connection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Design consistency&lt;/strong&gt;: I asked Codex to reuse the portfolio's existing typography, colors, spacing, cards, buttons, border radius, and component patterns, and the new section followed those visual patterns.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-canvas work:&lt;/strong&gt; I also tested creating a separate Projects canvas based on the homepage’s existing design system.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in AI:&lt;/strong&gt; Brilliant can use Codex and many other agents as built-in AI providers, giving you another way to interact with the same canvas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Playground:&lt;/strong&gt; Playground provides a way to see Brilliant's AI workflow through bundled demonstrations before connecting a provider.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blueprint:&lt;/strong&gt; Brilliant has its own compact design language for representing editable canvas elements and their relationships.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Design-to-code:&lt;/strong&gt; Brilliant supports exports such as React, HTML, CSS, SVG, PDF, and other formats, while the MCP workflow opens another route where an AI coding agent can read the design and implement it in an actual codebase.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The biggest thing I liked is that the AI isn't limited to generating a picture of a design. The canvas contains actual editable design elements that an agent can inspect and modify.&lt;/p&gt;

&lt;p&gt;That makes the workflow more interesting for developers because the design can become part of the same AI-assisted workflow as the code.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is an AI Design Tool?
&lt;/h2&gt;

&lt;p&gt;Before getting into Brilliant, it helps to define what I mean by an &lt;strong&gt;AI design tool&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The term gets used for a lot of different products right now.&lt;/p&gt;

&lt;p&gt;Some AI design tools are basically prompt-to-image generators. You describe a landing page, dashboard, mobile app, logo, or illustration, and the tool produces a visual result.&lt;/p&gt;

&lt;p&gt;Others go further. They generate actual UI layouts that you can edit, move around, resize, restyle, and export.&lt;/p&gt;

&lt;p&gt;Then there are tools that put an AI agent directly into the design workflow. In that setup, you can ask the AI to create or change parts of a design while still working with real design elements.&lt;/p&gt;

&lt;p&gt;That last category is where things get more interesting for developers.&lt;/p&gt;

&lt;p&gt;A useful AI design tool shouldn't just generate a nice-looking interface.&lt;/p&gt;

&lt;p&gt;It should also answer these questions with a big "YES":&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can I edit the result after it has been generated?&lt;/li&gt;
&lt;li&gt;Can the AI understand an existing design?&lt;/li&gt;
&lt;li&gt;Can it follow an existing design system?&lt;/li&gt;
&lt;li&gt;Can it reuse components?&lt;/li&gt;
&lt;li&gt;Can it work across multiple screens or canvases?&lt;/li&gt;
&lt;li&gt;Can I make small, targeted changes without asking it to rebuild everything?&lt;/li&gt;
&lt;li&gt;Can another AI agent access the design?&lt;/li&gt;
&lt;li&gt;Can the design eventually become useful code?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those differences matter when you're working on something real.&lt;/p&gt;

&lt;p&gt;For example, imagine you already have a dashboard with a defined type scale, spacing system, buttons, cards, colors, and components.&lt;/p&gt;

&lt;p&gt;You don't want an AI tool to create a completely different dashboard every time you ask for a new screen.&lt;/p&gt;

&lt;p&gt;You want it to understand what you've already built and continue from there.&lt;/p&gt;

&lt;p&gt;That was one of the main things I wanted to test with Brilliant.&lt;/p&gt;




&lt;h2&gt;
  
  
  AI Design Tools vs. Traditional Design Tools: What Changes?
&lt;/h2&gt;

&lt;p&gt;Traditional design tools are built around the designer.&lt;/p&gt;

&lt;p&gt;You open the canvas, select an element, change its properties, move things around, create components, adjust spacing, and build the interface yourself.&lt;/p&gt;

&lt;p&gt;The designer makes the decisions, and the tool gives them the controls.&lt;/p&gt;

&lt;p&gt;AI design tools add another layer to that workflow.&lt;/p&gt;

&lt;p&gt;You can describe an outcome and let an AI model handle some of the mechanical work.&lt;/p&gt;

&lt;p&gt;For example, instead of manually creating four cards, aligning them, adding text, adjusting spacing, and repeating the same structure, you might tell an AI agent to create a four-card section that follows the existing design.&lt;/p&gt;

&lt;p&gt;The gap between them becomes bigger when the AI can &lt;strong&gt;read an existing canvas&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;At that point, the workflow doesn't have to stop at: &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prompt → generated design&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It can become:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Existing design → AI understands it → AI makes a change → designer reviews it&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;During my test of Brilliant, I wasn't interested in seeing whether an AI could create something visually impressive from nothing. I wanted to see how well it behaved when I gave it an existing design and asked it to respect what was already there.&lt;/p&gt;

&lt;p&gt;And with an MCP connection, an AI coding agent can interact with tools outside the code editor.&lt;/p&gt;

&lt;p&gt;So the workflow becomes:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Design canvas ↔ AI agent ↔ codebase&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That is a very different idea from generating a screenshot and then manually rebuilding it in React.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is Brilliant.design?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://brilliant.design/" rel="noopener noreferrer"&gt;Brilliant.design&lt;/a&gt; is an AI-powered design tool built around an editable design canvas and AI agents.&lt;/p&gt;

&lt;p&gt;The important distinction is that the canvas isn't just an image.&lt;/p&gt;

&lt;p&gt;Brilliant works with native design elements such as frames, text, vectors, lines, icons, layouts, components, and other properties that you can continue editing after an AI action.&lt;/p&gt;

&lt;p&gt;If you ask an agent to create a section, it can create actual elements on the canvas. If you ask it to modify an existing element, the change happens to that design element instead of producing a new flattened image.&lt;/p&gt;

&lt;p&gt;Brilliant also has a built-in AI experience, but you aren't locked into one hosted AI model. Its current workflow supports connecting providers through your own credentials or local CLI-based tools.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgtsg5t1wbs4viskib3s5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgtsg5t1wbs4viskib3s5.jpg" alt="built-in AI with local CLI in Brilliant.design" width="800" height="648"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The other great piece was &lt;strong&gt;MCP&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Brilliant exposes its canvas through a local MCP server while the desktop application is running. That means supported AI agents can connect to the design canvas and interact with it from outside Brilliant.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsxd26ezkexenjey9rnit.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsxd26ezkexenjey9rnit.png" alt="local MCP server in Brilliant.design" width="800" height="662"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Brilliant also has &lt;strong&gt;Blueprint&lt;/strong&gt;, its own compact design language for describing canvas elements. Blueprint represents things such as frames, text, vectors, positions, sizes, fills, strokes, radius, effects, auto layout, and relationships between elements.&lt;/p&gt;

&lt;p&gt;The files themselves can also be represented as plain-text &lt;code&gt;.bl&lt;/code&gt; files, which makes the design closer to something developers are already comfortable working with: text that can be inspected, compared, and managed alongside code.&lt;/p&gt;

&lt;p&gt;So, at a high level, Brilliant brings together several pieces:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Figma import + visual editing + design systems + AI agents + MCP + Blueprint + design-to-code workflows.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Why I Tested Brilliant.design With a Real Figma Portfolio
&lt;/h2&gt;

&lt;p&gt;I could have opened Brilliant, typed a prompt like "Create a modern developer portfolio," and called it a test.&lt;/p&gt;

&lt;p&gt;I didn't want to do that.&lt;/p&gt;

&lt;p&gt;A blank canvas doesn't tell you much about how an AI design tool behaves once you already have design decisions in place.&lt;/p&gt;

&lt;p&gt;So I picked a developer portfolio from Figma.&lt;/p&gt;

&lt;p&gt;That gave me a much better starting point because the design already had its own visual language.&lt;/p&gt;

&lt;p&gt;There were existing sections, typography choices, colors, spacing, cards, buttons, skills, and other visual patterns that Brilliant and the AI agent had to work with.&lt;/p&gt;




&lt;h2&gt;
  
  
  My Test Setup
&lt;/h2&gt;

&lt;p&gt;I wanted to keep the setup close to something a developer could reproduce.&lt;/p&gt;

&lt;h3&gt;
  
  
  Setting Up Brilliant
&lt;/h3&gt;

&lt;p&gt;The setup on Windows was fairly straightforward.&lt;/p&gt;

&lt;p&gt;I first &lt;a href="https://brilliant.design/docs/getting-started/installation" rel="noopener noreferrer"&gt;installed&lt;/a&gt; the Brilliant desktop application and signed in. The setup was really quick.&lt;/p&gt;

&lt;h3&gt;
  
  
  Connecting Codex CLI to Brilliant Through MCP
&lt;/h3&gt;

&lt;p&gt;I didn't have a paid Claude Code or Cursor subscription available for this test, so I used Codex as the external AI agent.&lt;/p&gt;

&lt;p&gt;I didn't use an API key.&lt;/p&gt;

&lt;p&gt;That wasn't a problem for the MCP test because Brilliant supports Codex as an external MCP client, and the same local MCP connection approach can be used with other supported AI agents.&lt;/p&gt;

&lt;p&gt;I signed in with my ChatGPT account.&lt;/p&gt;

&lt;p&gt;You just need to run &lt;code&gt;Codex&lt;/code&gt; in your terminal to start it.&lt;/p&gt;

&lt;p&gt;Once Codex was working, I enabled the Codex MCP connection from Brilliant's settings.&lt;/p&gt;

&lt;p&gt;Brilliant exposes its local MCP server through the desktop application. The documented local endpoint uses:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://127.0.0.1:3333/mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;If port &lt;code&gt;3333&lt;/code&gt; isn't available, Brilliant can use another local port, such as &lt;code&gt;3334&lt;/code&gt; or &lt;code&gt;3335&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Brilliant can also register the MCP connection for Codex automatically when it detects the Codex configuration directory.&lt;/p&gt;

&lt;p&gt;This Codex CLI connection gave me two different ways to interact with the same design:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Codex from the terminal → Brilliant through MCP&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Codex inside Brilliant's built-in AI chat&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  Importing a Real Figma Portfolio Into Brilliant
&lt;/h2&gt;

&lt;p&gt;The first real test was simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can Brilliant take an existing Figma portfolio and turn it into something I can continue working with?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Brilliant currently supports importing Figma designs through its web editor, desktop app, and Figma plugin. Brilliant's documentation also describes options for importing a whole file, selected pages, or a selected subtree from the desktop workflow.&lt;/p&gt;

&lt;p&gt;For my test, I used my existing portfolio and brought the design into Brilliant.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2y09q65hunvn4vgs0iiv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2y09q65hunvn4vgs0iiv.png" alt="Importing an existing Figma portfolio into Brilliant" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;
Figma portfolio imported into the Brilliant desktop app
&amp;nbsp;

&lt;p&gt;With this test I wanted to know whether the design structure survived the move.&lt;/p&gt;

&lt;p&gt;Could I select individual elements?&lt;br&gt;
Could I edit text?&lt;br&gt;
Could I work with the layout?&lt;br&gt;
Could I continue changing the design without rebuilding everything?&lt;/p&gt;

&lt;p&gt;If an imported design becomes an image, it doesn't give me much value as a designer or developer. I need the objects to remain useful after the import.&lt;/p&gt;

&lt;p&gt;Brilliant's Figma import brings over a range of design information, including layout properties, auto layout, vector geometry, fills, strokes, corner radii, image fills, and other resolved design values.&lt;/p&gt;

&lt;p&gt;So I found out that I could continue working with the imported portfolio inside Brilliant 🎉&lt;/p&gt;

&lt;p&gt;And I tried to make the portfolio mine by doing some manual edits.&lt;/p&gt;


&lt;h2&gt;
  
  
  Manually Editing the Imported Design
&lt;/h2&gt;

&lt;p&gt;Before involving AI, I wanted to spend some time editing the portfolio myself.&lt;/p&gt;

&lt;p&gt;This might sound like a small step, but I think it's important when reviewing an AI design tool.&lt;/p&gt;

&lt;p&gt;If the AI disappeared completely, would the editor still be useful?&lt;/p&gt;

&lt;p&gt;For me, that means being able to select an element, change its properties, adjust the layout, edit text, move things around, and generally work with the canvas without having to ask an AI agent to do every little thing.&lt;/p&gt;

&lt;p&gt;I made a few manual changes to the imported portfolio and used that process to get familiar with Brilliant's editing experience.&lt;/p&gt;

&lt;p&gt;Honestly, the editing experience was very smooth and straightforward. I could select individual elements and continue editing the imported design, which makes the transition much easier even if you're not already familiar with Figma or another design tool.&lt;/p&gt;

&lt;p&gt;For example, when I wanted to change the primary color across the design, I changed it once in the design system, and the change was reflected throughout the design.&lt;/p&gt;

&lt;p&gt;After making a few updates, the portfolio started to feel like my own.&lt;/p&gt;

&lt;p&gt;For a clear view, I'm sharing the top part of the new design where I made the most updates.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvorijsfwwt6o09vnlaqh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvorijsfwwt6o09vnlaqh.png" alt="Making manual changes to the imported portfolio to test Brilliant as a design editor" width="800" height="1376"&gt;&lt;/a&gt;&lt;/p&gt;
Codex inspected the existing Brilliant canvas
&amp;nbsp;

&lt;p&gt;The next thing I want to find out is whether the AI agent can actually work with the design I already have.&lt;/p&gt;


&lt;h2&gt;
  
  
  First MCP Test: Can Codex See My Brilliant Canvas?
&lt;/h2&gt;

&lt;p&gt;Before anything, I wanted to make sure that Codex understands the design that's open in Brilliant&lt;/p&gt;

&lt;p&gt;Here's the prompt I used:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Connect to my open Brilliant project and inspect the current canvas.

Do not make any changes.

Tell me what you can see and briefly describe:
1. The main sections
2. The visual structure
3. The typography
4. The primary colors
5. The reusable components you can identify

Do not modify anything.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;I think this is a much better first test than immediately asking an AI agent to redesign something.&lt;/p&gt;

&lt;p&gt;If the agent can't correctly understand the existing canvas, there's no reason to trust it with a large design change.&lt;/p&gt;

&lt;p&gt;Codex was able to work with the open Brilliant project and return an analysis of the canvas.&lt;/p&gt;

&lt;p&gt;It could identify the major sections and describe the visual structure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff6qbp5jl2znxv7a2vyk7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff6qbp5jl2znxv7a2vyk7.png" alt="first MCP test with Codex, where I asked the agent to inspect the existing Brilliant canvas without making any changes" width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;
Codex inspected the existing Brilliant canvas
&amp;nbsp;

&lt;p&gt;The agent wasn't working from a screenshot that I had manually provided. Through Brilliant's MCP connection, it could inspect the open design canvas and return structured information about it.&lt;/p&gt;

&lt;p&gt;This is the result Codex gave me:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;• Inspected the active scratch Brilliant canvas; no changes were made.

1. Main sections

- Header + hero
- About Me
- Skills
- Works / portfolio carousel
- Blogs
- Contact form
- Footer

2. Visual structure

A 1920px desktop, single-page personal portfolio. It uses a dark, full-width vertical flow with generous section spacing, centered section titles, and a floating pill navigation near the hero. Content is contained in wide desktop gutters (~128px).

- Hero: identity card on the left, large intro copy in the center, compact experience stats on the right.
- About: split text/card and photo composition.
- Skills: two service cards above four circular skill badges.
- Works: central project montage with left/right carousel controls.
- Blogs: one featured horizontal article row and two CTA buttons.
- Contact: title, form fields, submit button, then footer links.

3. Typography

- Primary UI/body/code face: IBM Plex Mono.
- Headings and editorial titles: Ubuntu.
- Hero display "Technical Writer": Agency FB, ~117px.
- Major section headings: Ubuntu, ~64px.
- Smaller labels/body copy: mostly 14-16px IBM Plex Mono or Ubuntu.
- Type treatment is technical/editorial: monospaced body content, bright-blue code-style tags (&amp;lt;h1&amp;gt;, &amp;lt;p&amp;gt;, &amp;lt;/&amp;gt;), and white display text. 

4. Primary colors

- Main dark surfaces: #292F36 and near-black #1A1E23.
- Brand/interactive blue: #0080FF, with lighter cyan-blue variants around #1295F7, #12B5F7, and #12F7D6.
- Primary text: white #FFFFFF.
- Divider/muted gray: #43454D.
- Skill accents: HTML #E54F26, CSS #0C73B8, JS #E7A020, React #28A9E0.

5. Reusable components/patterns identified

- The canvas has one explicit declared component: Homepage - Desktop/1920.
- Repeated section-title module: scroll/mouse indicator, large title, and subtitle.
- Repeated rounded-pill buttons: filled blue and outlined dark/blue variants.
- Header/navigation items, including active/inactive nav states.
- Repeated code-tag decoration and bright-blue heading treatment.
- Service cards, skill badges, carousel arrows, blog metadata chips, form fields, and the footer link groups are all structured as reusable patterns.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Asking Codex to Build a New Section From the Existing Design
&lt;/h2&gt;

&lt;p&gt;For the next test, I asked Codex to add a new &lt;strong&gt;Featured Projects&lt;/strong&gt; section to my portfolio.&lt;/p&gt;

&lt;p&gt;This sounds simple, but I deliberately made the prompt more specific.&lt;/p&gt;

&lt;p&gt;I didn't want:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Add a Featured Projects section."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That could produce almost anything.&lt;/p&gt;

&lt;p&gt;I wanted the agent to look at the existing portfolio and use it as the visual reference.&lt;/p&gt;

&lt;p&gt;This is the prompt I used:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Connect my open Brilliant project and add to the current canvas a new "Featured Projects" section below the skills section.

Reuse the existing:
- typography
- colors
- spacing
- card patterns
- button styles
- border radius
- component patterns

Do not redesign or modify the existing sections.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Codex created a new Featured Projects section below the Skills section.&lt;/p&gt;

&lt;p&gt;This was a useful test because I could immediately compare the new section with the surrounding content.&lt;/p&gt;

&lt;p&gt;The goal wasn't for the new section to look impressive.&lt;/p&gt;

&lt;p&gt;The goal was for someone looking at the entire portfolio to feel that the section belongs to the same page.&lt;/p&gt;

&lt;p&gt;In my test, I specifically asked Codex to reuse the existing typography, colors, spacing, cards, buttons, border radius, and component patterns.&lt;/p&gt;

&lt;p&gt;The resulting section followed those existing patterns closely enough to make the workflow useful.&lt;/p&gt;

&lt;p&gt;The cards didn't feel completely disconnected from the rest of the portfolio, and the section followed the visual direction of the page.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/gKGEGR9BDJw" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;This was the first test where I started to see why Brilliant's combination of &lt;strong&gt;AI agents + MCP + an editable canvas&lt;/strong&gt; can make sense for developers. &lt;/p&gt;

&lt;p&gt;I was happy with the result, especially because the new section didn't feel completely disconnected from the existing page.&lt;/p&gt;


&lt;h2&gt;
  
  
  Creating a New Canvas With Cross-Canvas Context
&lt;/h2&gt;

&lt;p&gt;After testing Codex on the existing homepage, I wanted to push the workflow a little further.&lt;/p&gt;

&lt;p&gt;Adding a new section to an existing canvas is useful, but creating a whole new page is closer to what happens in a real project.&lt;/p&gt;

&lt;p&gt;A developer portfolio rarely has just one screen. You might have a homepage, projects page, about page, blog, contact page, or individual case-study pages. Once you start adding those screens, keeping the same visual language across them becomes important.&lt;/p&gt;

&lt;p&gt;So my next test was:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Could Codex create a completely new Projects canvas while using the homepage as its design reference?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I wanted to see whether Brilliant could help with that kind of cross-canvas work without making me manually rebuild the same components and styles.&lt;/p&gt;

&lt;p&gt;For this test, I asked Codex to create a new Projects canvas based on the portfolio homepage I had already been working on.&lt;/p&gt;

&lt;p&gt;This was the prompt I used:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Connect my open Brilliant project and create a new Projects canvas.

Use the existing design system and components from homepage.

Include:
- Page title
- Short introduction
- Project filters
- Project Grid
- Project cards
- Technology badges
- GitHub link
- Live demo link

The new canvas should feel visually consistent with the homepage.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;There are two things I was looking for here.&lt;/p&gt;

&lt;p&gt;The first was whether Codex could actually create another canvas in the same Brilliant project.&lt;/p&gt;

&lt;p&gt;The second was whether it would use the homepage as a visual reference instead of inventing a completely unrelated design.&lt;/p&gt;

&lt;p&gt;I didn't give it exact colors, font sizes, spacing values, or card dimensions this time.&lt;/p&gt;

&lt;p&gt;I had already given it those instructions in the previous test.&lt;/p&gt;

&lt;p&gt;The resulting canvas gave me a separate place to work on the projects page while keeping the homepage available.&lt;/p&gt;

&lt;p&gt;That separation is useful on its own.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/uP_dvSKmbUw" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4xjt1zhif09heo5u6zpv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4xjt1zhif09heo5u6zpv.png" alt="Creating a separate Projects canvas with Codex while using the existing portfolio homepage as the design reference" width="799" height="562"&gt;&lt;/a&gt;&lt;/p&gt;
The new Projects canvas created from the existing homepage design
&amp;nbsp;

&lt;p&gt;The Projects canvas included the pieces I requested: a page title, introduction, filters, project grid, project cards, technology badges, GitHub links, and live demo links.&lt;/p&gt;

&lt;p&gt;The new page didn't feel like a completely separate template. It followed the visual direction established by the homepage quite well. The new canvas was ready pretty quickly.&lt;/p&gt;

&lt;p&gt;But I still believe that a human designer already knows which details are intentional and which ones are incidental. An AI agent has to infer that from the available design context.&lt;/p&gt;

&lt;p&gt;That means I'd still review the new page carefully, especially if the design system is large or has many similar components.&lt;/p&gt;

&lt;p&gt;For a production application, I would also want to be very deliberate about which components are truly shared and which ones only happen to look similar.&lt;/p&gt;


&lt;h2&gt;
  
  
  Using Brilliant's Built-In AI With Codex
&lt;/h2&gt;

&lt;p&gt;So far, I had been driving Brilliant from outside the application through the terminal.&lt;/p&gt;

&lt;p&gt;That worked, but Brilliant also has another way to use AI.&lt;/p&gt;

&lt;p&gt;You can connect an AI provider and use Brilliant's &lt;strong&gt;built-in AI chat&lt;/strong&gt; directly from the design environment.&lt;/p&gt;

&lt;p&gt;Since Codex was already available to me, I wanted to test that workflow too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;External agent:&lt;/strong&gt; Codex CLI → MCP → Brilliant&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Built-in AI:&lt;/strong&gt; Brilliant → Codex&lt;/p&gt;

&lt;p&gt;Brilliant supports Codex as a built-in AI provider.&lt;/p&gt;

&lt;p&gt;The setup uses my ChatGPT authentication, so I didn't need to add an OpenAI API key for this test.&lt;/p&gt;

&lt;p&gt;After connecting Codex, I could open Brilliant's AI chat and interact with the canvas directly.&lt;/p&gt;

&lt;p&gt;The chat is available from Brilliant's interface, and the &lt;code&gt;/&lt;/code&gt; shortcut can be used to open the AI interaction.&lt;/p&gt;

&lt;p&gt;Here, the AI interaction was part of the Brilliant interface itself.&lt;/p&gt;

&lt;p&gt;I didn't need to leave the canvas, switch to the terminal, and communicate with the agent there.&lt;/p&gt;

&lt;p&gt;For this test, I went back to my homepage portfolio.&lt;/p&gt;

&lt;p&gt;I already had HTML, CSS, JavaScript, and React in the Skills section.&lt;/p&gt;

&lt;p&gt;I wanted to add four more technologies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;Next.js&lt;/li&gt;
&lt;li&gt;Angular&lt;/li&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's the prompt I used:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;In my homepage scratch project I have HTML, CSS, JS, and React in the skills section.

Add these 4 programming languages:
Typescript
Next.js
Angular
Node.js

Use the same style.

Put them inside colored circles, and inside each circle, the logo of the language.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The result was good overall. The four new items followed the existing visual direction of the Skills section, including the circular presentation and general styling.&lt;/p&gt;

&lt;p&gt;That was what I wanted to see.&lt;/p&gt;

&lt;p&gt;The AI didn't need me to manually describe every existing property in the prompt.&lt;/p&gt;

&lt;p&gt;I could point it toward the existing section and tell it to follow the same style.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/i6b8UxhXst4" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;There was one limitation, though. The AI placed the four new languages on the same line as the existing ones, which pushed some of them outside the visible frame. I fixed the layout manually afterward, as you can see in the video.&lt;/p&gt;

&lt;p&gt;And here's the final new section.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz8n0j5j4e6vvqu4b7ug0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz8n0j5j4e6vvqu4b7ug0.png" alt="The agent added the 4 new programming languages in the Skills section on my Brilliant canvas" width="799" height="615"&gt;&lt;/a&gt;&lt;/p&gt;
New Skills section
&amp;nbsp;

&lt;p&gt;For me, an AI design workflow becomes much more useful when I can ask for a specific change without worrying that unrelated parts of the page will get redesigned at the same time.&lt;/p&gt;

&lt;p&gt;I still review the result visually, of course.&lt;/p&gt;

&lt;p&gt;That's not something I'd skip just because the agent has access to the canvas.&lt;/p&gt;

&lt;p&gt;But the interaction itself was straightforward.&lt;/p&gt;


&lt;h2&gt;
  
  
  Built-In AI vs. External Codex + MCP
&lt;/h2&gt;

&lt;p&gt;After testing both workflows, I see them as two different ways of working with the same underlying idea.&lt;/p&gt;

&lt;p&gt;The distinction can be summarized simply:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Workflow&lt;/th&gt;
&lt;th&gt;Best fit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Brilliant + built-in Codex&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Quick AI-assisted edits directly in the design environment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Codex CLI + MCP&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agent-driven design work from the development workflow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Manual Brilliant editing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Precise visual changes and human control&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;I wouldn't say one replaces the others. They solve different parts of the workflow and complement each other.&lt;/p&gt;

&lt;p&gt;For a designer who wants AI assistance without leaving the design application, the built-in experience is convenient.&lt;/p&gt;

&lt;p&gt;For a developer who already spends a lot of time in an AI coding agent, MCP is the part that makes Brilliant much more interesting.&lt;/p&gt;


&lt;h2&gt;
  
  
  Brilliant Playground
&lt;/h2&gt;

&lt;p&gt;Before wrapping up the AI testing, I also wanted to understand Brilliant's &lt;strong&gt;Playground&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is easy to misunderstand if you open Brilliant before connecting an AI provider.&lt;/p&gt;

&lt;p&gt;When I first encountered it, I saw the Playground experience with a bundled example conversation.&lt;/p&gt;

&lt;p&gt;I tested the:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Notes app — entry view"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/qE5t-ZSA-eY" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1xz4g37lgjnqjug4d60p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1xz4g37lgjnqjug4d60p.png" alt="Notes app generated by Brilliant Playground mode" width="800" height="946"&gt;&lt;/a&gt;&lt;/p&gt;
Notes app generated in Brilliant's Playground mode
&amp;nbsp;

&lt;p&gt;The important thing to understand is that Playground isn't the same thing as having a live AI provider connected to Brilliant.&lt;/p&gt;

&lt;p&gt;It gives you a way to see the AI workflow through prepared demonstrations.&lt;/p&gt;

&lt;p&gt;That makes it useful when you're exploring the product for the first time.&lt;/p&gt;

&lt;p&gt;The Notes app example gave me a quick look at how an AI-driven design workflow can operate inside Brilliant.&lt;/p&gt;

&lt;p&gt;It was useful for understanding the interaction model before I started using Codex.&lt;/p&gt;

&lt;p&gt;Playground is better thought of as a guided demonstration of the experience, so I recommend trying Playground before any other test.&lt;/p&gt;

&lt;p&gt;One small limitation I noticed is that when I ran the "Notes app" example from Playground while inside my Homepage canvas, Brilliant placed the generated design beside my portfolio. Personally, I'd prefer Playground demonstrations like this to open in a separate canvas by default so they don't mix with an existing project.&lt;/p&gt;


&lt;h2&gt;
  
  
  Blueprint: Brilliant's Design Language
&lt;/h2&gt;

&lt;p&gt;Blueprint is Brilliant's compact, line-oriented design language for representing editable canvas elements.&lt;/p&gt;

&lt;p&gt;A Blueprint file can describe things such as frames, text, vectors, positions, dimensions, fills, strokes, corner radii, effects, auto layout, hierarchy, and references between elements.&lt;/p&gt;

&lt;p&gt;The interesting part for developers is that the design has a text representation that can be inspected and worked with by AI agents and development tools.&lt;/p&gt;
&lt;h3&gt;
  
  
  Blueprint and Git-Friendly Design Workflows
&lt;/h3&gt;

&lt;p&gt;A developer-oriented detail is that Brilliant design files can be represented as plain-text &lt;code&gt;.bl&lt;/code&gt; files.&lt;/p&gt;

&lt;p&gt;That's useful because text files work naturally with version control.&lt;/p&gt;

&lt;p&gt;You can inspect changes, compare versions, and keep design changes alongside other project files.&lt;/p&gt;

&lt;p&gt;I think this is one of the ideas that makes Brilliant feel different from a traditional visual-only design workflow.&lt;/p&gt;

&lt;p&gt;A design doesn't have to be treated as something that only exists inside a graphical application.&lt;/p&gt;

&lt;p&gt;It can also have a representation that developers and AI agents can work with.&lt;/p&gt;


&lt;h2&gt;
  
  
  From Design to Code: Brilliant's Developer Workflow
&lt;/h2&gt;

&lt;p&gt;At this point, the workflow starts to move beyond design.&lt;/p&gt;

&lt;p&gt;If I'm a developer, I eventually need to take the interface I've designed and turn it into something that runs in an application.&lt;/p&gt;

&lt;p&gt;That's where Brilliant's export options come in.&lt;/p&gt;

&lt;p&gt;Brilliant supports several export formats, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTML&lt;/li&gt;
&lt;li&gt;CSS&lt;/li&gt;
&lt;li&gt;React/JSX&lt;/li&gt;
&lt;li&gt;SVG&lt;/li&gt;
&lt;li&gt;PDF&lt;/li&gt;
&lt;li&gt;MP4&lt;/li&gt;
&lt;li&gt;MOV&lt;/li&gt;
&lt;li&gt;Image formats &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It also provides Blueprint and other project-level representations.&lt;/p&gt;
&lt;h3&gt;
  
  
  React/JSX
&lt;/h3&gt;

&lt;p&gt;Brilliant can export a design as React/JSX. I would treat this as a starting point for implementation rather than production-ready application code. The exported structure still needs to be adapted to the project's architecture, components, state, data, routing, and responsive requirements.&lt;/p&gt;
&lt;h3&gt;
  
  
  HTML/CSS
&lt;/h3&gt;

&lt;p&gt;HTML and CSS exports provide another starting point when you're building a static interface or want to use the generated structure as a reference.&lt;/p&gt;


&lt;h2&gt;
  
  
  Brilliant.design vs. Traditional Design Tools
&lt;/h2&gt;

&lt;p&gt;So where does Brilliant actually fit compared with a traditional design tool?&lt;/p&gt;

&lt;p&gt;A traditional design workflow is centered around the designer creating and editing the interface visually.&lt;/p&gt;

&lt;p&gt;Brilliant keeps that visual workflow but adds AI agents, MCP, Blueprint, and developer-oriented exports around it.&lt;/p&gt;

&lt;p&gt;Here's how I would think about the difference:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Traditional design tools&lt;/th&gt;
&lt;th&gt;Brilliant.design&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Visual editing&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Components&lt;/td&gt;
&lt;td&gt;Common&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auto layout&lt;/td&gt;
&lt;td&gt;Common&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Design tokens&lt;/td&gt;
&lt;td&gt;Common&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Figma import&lt;/td&gt;
&lt;td&gt;Common&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Built-in AI&lt;/td&gt;
&lt;td&gt;Depends on tool&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;External AI agents&lt;/td&gt;
&lt;td&gt;Varies&lt;/td&gt;
&lt;td&gt;MCP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI access to canvas&lt;/td&gt;
&lt;td&gt;Varies&lt;/td&gt;
&lt;td&gt;MCP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Text-based design representation&lt;/td&gt;
&lt;td&gt;Varies&lt;/td&gt;
&lt;td&gt;Blueprint&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Git-friendly design representation&lt;/td&gt;
&lt;td&gt;Varies&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.bl&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;React export&lt;/td&gt;
&lt;td&gt;Depends on tool&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HTML/CSS export&lt;/td&gt;
&lt;td&gt;Depends on tool&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;I wouldn't say Brilliant makes traditional design tools obsolete.&lt;/p&gt;

&lt;p&gt;There are still situations where a mature design platform with a huge ecosystem, established collaboration workflows, plugins, and existing team processes will make more sense.&lt;/p&gt;

&lt;p&gt;What Brilliant does differently is put &lt;strong&gt;AI agents and developers much closer to the design canvas&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That is the part I think developers should pay attention to.&lt;/p&gt;


&lt;h2&gt;
  
  
  Who Should Use Brilliant.design?
&lt;/h2&gt;

&lt;p&gt;After using Brilliant with a real portfolio, I think it makes the most sense for a few types of users.&lt;/p&gt;
&lt;h3&gt;
  
  
  Developers who care about UI design
&lt;/h3&gt;

&lt;p&gt;If you're a developer who regularly needs to design interfaces before building them, Brilliant gives you a visual environment while keeping AI agents close to the workflow.&lt;/p&gt;
&lt;h3&gt;
  
  
  Designers who want AI-assisted editing
&lt;/h3&gt;

&lt;p&gt;If you prefer working visually but want an AI agent to handle repetitive or structural changes, Brilliant provides that option without turning the canvas into a static generated image.&lt;/p&gt;
&lt;h3&gt;
  
  
  Product teams experimenting with AI-native workflows
&lt;/h3&gt;

&lt;p&gt;Teams building products around AI agents may find the agent-accessible canvas useful because design can become part of the same tool ecosystem as development.&lt;/p&gt;
&lt;h3&gt;
  
  
  Developers working heavily with React
&lt;/h3&gt;

&lt;p&gt;The React export and design-to-code workflow make Brilliant worth exploring if your end goal is a React application.&lt;/p&gt;

&lt;p&gt;It won't replace the work of building a production React application, but it can shorten the path from visual design to an initial implementation.&lt;/p&gt;
&lt;h3&gt;
  
  
  People who already use AI coding agents
&lt;/h3&gt;

&lt;p&gt;This is probably the group I would point to Brilliant first.&lt;/p&gt;

&lt;p&gt;If you're already using Codex, Claude Code, Cursor, or another supported agent, the MCP workflow makes much more sense because you're adding a design canvas to an AI workflow you already understand.&lt;/p&gt;


&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Is Brilliant.design an AI design tool?
&lt;/h3&gt;

&lt;p&gt;→ Yes. Brilliant.design is an AI-powered design tool that combines a visual editing canvas with AI-assisted workflows and AI-agent integrations. It supports built-in AI providers as well as external agent access through MCP.&lt;/p&gt;

&lt;p&gt;The important distinction is that Brilliant isn't limited to generating visual mockups. Its canvas contains editable design elements that can be modified manually or through supported AI workflows.&lt;/p&gt;
&lt;h3&gt;
  
  
  Can Brilliant import Figma designs?
&lt;/h3&gt;

&lt;p&gt;→ Yes. Brilliant supports Figma import, allowing existing Figma designs to be brought into Brilliant as editable design content.&lt;/p&gt;

&lt;p&gt;The import carries over many visual and layout properties, including elements such as text, vectors, fills, strokes, corner radius, and auto layout. Some Figma-specific connections, such as live bindings to Figma Variables and shared styles, don't remain as live Figma connections after import.&lt;/p&gt;
&lt;h3&gt;
  
  
  Can Codex work with Brilliant through MCP?
&lt;/h3&gt;

&lt;p&gt;→ Yes. Brilliant supports connecting Codex to its local MCP server through the Brilliant desktop app.&lt;/p&gt;

&lt;p&gt;In my testing, I used Codex CLI to inspect my portfolio canvas, create a Featured Projects section, and create a separate Projects canvas using the homepage as a design reference.&lt;/p&gt;

&lt;p&gt;That made MCP one of the most useful parts of the workflow for me as a developer.&lt;/p&gt;
&lt;h3&gt;
  
  
  Does Brilliant export React code?
&lt;/h3&gt;

&lt;p&gt;→ Yes. Brilliant supports React/JSX export as part of its design-to-code workflow.&lt;/p&gt;

&lt;p&gt;The exported React code should be treated as a starting point that developers can refine for their actual application. A design tool doesn't automatically know your application's routing, state, APIs, business logic, architecture, or existing component conventions.&lt;/p&gt;
&lt;h3&gt;
  
  
  What is Brilliant Blueprint?
&lt;/h3&gt;

&lt;p&gt;→ Blueprint is Brilliant's compact design language for representing the structure and properties of a design.&lt;/p&gt;

&lt;p&gt;It can represent elements such as frames, text, vectors, layout, styling, hierarchy, and references. Brilliant designs can also be represented as plain-text &lt;code&gt;.bl&lt;/code&gt; files, making Blueprint relevant to developers, AI agents, and version-controlled design workflows.&lt;/p&gt;


&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;After using Brilliant.design with a real portfolio, I think the easiest way to describe it is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It's an AI design environment that tries to make the canvas useful to both humans and AI agents.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I started with a Figma portfolio, not a blank prompt.&lt;/p&gt;

&lt;p&gt;I imported it into Brilliant, edited it manually, connected Codex through MCP, asked Codex to understand the existing design, had it create a new Featured Projects section, created a separate Projects canvas from the homepage's design system, and tested Codex as Brilliant's built-in AI provider.&lt;/p&gt;

&lt;p&gt;I also explored Playground, Blueprint, and the available design-to-code exports.&lt;/p&gt;

&lt;p&gt;The workflow isn't magic, and I wouldn't expect it to be.&lt;/p&gt;

&lt;p&gt;AI-generated design still needs human review. Exported React still needs engineering. A design system still needs good decisions behind it.&lt;/p&gt;

&lt;p&gt;But Brilliant does something I find genuinely useful: &lt;strong&gt;it gives AI agents access to a real editable design environment.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you're a developer who already works with AI coding agents and wants the design side of that workflow to be editable, inspectable, and connected to the same agent ecosystem, Brilliant is worth trying.&lt;/p&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Thanks for reading! 🙏🏻 &lt;br&gt; I hope you found this useful ✅ &lt;br&gt; Please react and follow for more 😍 &lt;br&gt; Made with 💙 by &lt;a href="https://dev.to/hadil"&gt;Hadil Ben Abdallah&lt;/a&gt;
&lt;/th&gt;
&lt;th&gt;
&lt;a href="https://www.linkedin.com/in/hadil-ben-abdallah/" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu48q29oef3l4a6eow30h.png" alt="LinkedIn" width="40" height="40"&gt;&lt;/a&gt; &lt;a href="https://github.com/Hadil-Ben-Abdallah" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhuvszgj6eun7xfvnwv51.png" alt="GitHub" width="50" height="50"&gt;&lt;/a&gt; &lt;a href="https://x.com/hadilbnabdallah" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F53x550t83v5ner74xkxo.jpg" alt="Twitter" width="40" height="40"&gt;&lt;/a&gt;
&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;div class="ltag__user ltag__user__id__1209000"&gt;
    &lt;a href="/hadil" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1209000%2Fb29d37d8-2efe-4391-9796-a6f8a483f1bd.png" alt="hadil image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/hadil"&gt;Hadil Ben Abdallah&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/hadil"&gt;Software Engineer • Technical Writer (300K+ readers &amp;amp; 25K+ followers) • Trusted by 20+ startups and tech companies worldwide
I turn brands into websites people 💙 to use&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>ai</category>
      <category>design</category>
      <category>coding</category>
      <category>mcp</category>
    </item>
    <item>
      <title>Mozaik Hackathon 2026: Build Concurrent Multi-Agent Systems and Compete for $1,000 in Cash Prizes</title>
      <dc:creator>Hadil Ben Abdallah</dc:creator>
      <pubDate>Mon, 31 Aug 2026 09:09:32 +0000</pubDate>
      <link>https://dev.to/hadil/mozaik-hackathon-2026-build-concurrent-multi-agent-systems-and-compete-for-1000-in-cash-prizes-5edn</link>
      <guid>https://dev.to/hadil/mozaik-hackathon-2026-build-concurrent-multi-agent-systems-and-compete-for-1000-in-cash-prizes-5edn</guid>
      <description>&lt;p&gt;Building a &lt;strong&gt;multi-agent system&lt;/strong&gt; sounds simple on a whiteboard. Give one agent a task, let another handle the next step, add a reviewer, connect a few tools, and you have an agentic workflow.&lt;/p&gt;

&lt;p&gt;It gets more complicated when those agents need to operate at the same time.&lt;/p&gt;

&lt;p&gt;A sequential workflow can force agents into a fixed order: one finishes, another starts, and everyone downstream waits. That model is easy to reason about, but it can become restrictive as the system grows and agents need to react to new information independently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mozaik&lt;/strong&gt; takes a different architectural approach. It is an open-source TypeScript framework for building reactive agents inside an event-driven environment, where agents can work concurrently, respond to events, and coordinate without requiring a central workflow to define every interaction.&lt;/p&gt;

&lt;p&gt;And now there is a practical way to try this architecture.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jigjoy.ai/" rel="noopener noreferrer"&gt;JigJoy&lt;/a&gt;, together with &lt;a href="https://daily.dev/" rel="noopener noreferrer"&gt;daily.dev&lt;/a&gt; and &lt;a href="https://hyperskill.org?utm_source=jigjoy&amp;amp;utm_medium=devto&amp;amp;utm_campaign=jigjoy_hackathon" rel="noopener noreferrer"&gt;Hyperskill&lt;/a&gt;, is organizing the &lt;strong&gt;Mozaik Hackathon 2026&lt;/strong&gt;, a free online hackathon focused on building concurrent AI agents.&lt;/p&gt;




&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;Building more agents doesn't automatically make a multi-agent system better. The way those agents communicate, react, and depend on one another can have a bigger impact on how the system behaves as it grows.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://mozaik.jigjoy.ai/" rel="noopener noreferrer"&gt;Mozaik&lt;/a&gt; approaches this problem with an event-driven architecture designed around reactive, non-blocking agents. Agents join a shared &lt;code&gt;AgenticEnvironment&lt;/code&gt;, receive events, and decide how to react to them.&lt;/p&gt;

&lt;p&gt;Here’s what makes the &lt;a href="https://build.jigjoy.ai/?ref=hadli" rel="noopener noreferrer"&gt;Mozaik Hackathon 2026&lt;/a&gt; worth a look:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Concurrent AI agents:&lt;/strong&gt; Multiple agents can work at the same time and react to events as they arrive.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Event-driven architecture:&lt;/strong&gt; Agents, humans, observers, and tools participate in the same &lt;code&gt;AgenticEnvironment&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Non-blocking execution:&lt;/strong&gt; Inference and message delivery can continue in the background without holding up other participants.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Loosely coupled agents:&lt;/strong&gt; Agents can operate more independently, making them easier to reuse across projects and applications.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript-based:&lt;/strong&gt; Mozaik is an &lt;a href="https://github.com/jigjoy-ai/mozaik" rel="noopener noreferrer"&gt;open-source&lt;/a&gt; TypeScript framework available through &lt;code&gt;@mozaik-ai/core&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hands-on learning:&lt;/strong&gt; Participants build a multi-agent system while exploring agent loops, reasoning-model context, and loop engineering.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;$1,000 cash prize pool:&lt;/strong&gt; $500 for first place, $300 for second, and $200 for third.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free and online:&lt;/strong&gt; Developers can participate from anywhere without paying an entry fee.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The hackathon takes place on &lt;strong&gt;September 5–6, 2026&lt;/strong&gt;, with a livestream kickoff on September 4 and winners announced on September 13.&lt;/p&gt;

&lt;p&gt;If you've been experimenting with AI agents, this is a chance to move past simple API orchestration and explore how concurrent multi-agent systems can be designed.&lt;/p&gt;




&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Sequential vs. Concurrent Multi-Agent Systems: What Changes With Mozaik?&lt;/li&gt;
&lt;li&gt;
How Mozaik’s Event-Driven Architecture Enables Concurrent AI Agents

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;AgenticEnvironment&lt;/code&gt;: A Shared Event-Driven Layer&lt;/li&gt;
&lt;li&gt;Non-Blocking Inference Keeps Agents Moving&lt;/li&gt;
&lt;li&gt;Participants Keep Agents Loosely Coupled&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Getting Started With Mozaik: A TypeScript Runtime for Concurrent Agents&lt;/li&gt;
&lt;li&gt;
Mozaik Hackathon 2026: Build a Concurrent Multi-Agent System

&lt;ul&gt;
&lt;li&gt;Who can participate in the Hackathon?&lt;/li&gt;
&lt;li&gt;Mozaik Hackathon Timeline: September 4–13, 2026&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;What Can You Build With Mozaik?&lt;/li&gt;
&lt;li&gt;
Why Developers Should Join the Mozaik Hackathon

&lt;ul&gt;
&lt;li&gt;You can learn by building alongside other developers&lt;/li&gt;
&lt;li&gt;There is a real incentive, too&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Frequently Asked Questions&lt;/li&gt;
&lt;li&gt;Final Thoughts&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Sequential vs. Concurrent Multi-Agent Systems: What Changes With Mozaik?
&lt;/h2&gt;

&lt;p&gt;When developers first build a &lt;strong&gt;multi-agent system&lt;/strong&gt;, a sequential workflow is often the easiest model to understand.&lt;/p&gt;

&lt;p&gt;Imagine a research application with five specialized agents:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A researcher collects information.&lt;/li&gt;
&lt;li&gt;An analyst examines the findings.&lt;/li&gt;
&lt;li&gt;A critic looks for weaknesses.&lt;/li&gt;
&lt;li&gt;A writer turns the results into an answer.&lt;/li&gt;
&lt;li&gt;A reviewer checks the final output.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The workflow might look 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;Researcher
    ↓
Analyst
    ↓
Critic
    ↓
Writer
    ↓
Reviewer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Each agent has a clear responsibility, and each stage can pass its output to the next one. For tasks where every step depends on the previous result, this approach makes sense.&lt;/p&gt;

&lt;p&gt;The problem appears when agents &lt;strong&gt;don't need to wait for each other&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Suppose the researcher finds three useful sources. The analyst could begin examining the first source while the researcher continues collecting information. A critic could inspect an early finding while the rest of the research is still underway. An observer could monitor the work continuously and react if something looks wrong.&lt;/p&gt;

&lt;p&gt;A fixed sequence makes those interactions harder to express because the workflow is built around &lt;strong&gt;who runs next&lt;/strong&gt;, not around &lt;strong&gt;which agent should react when something happens&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That distinction is central to &lt;a href="https://mozaik.jigjoy.ai/" rel="noopener noreferrer"&gt;Mozaik&lt;/a&gt;.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Sequential multi-agent workflow&lt;/th&gt;
&lt;th&gt;Mozaik's concurrent model&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Agents follow an ordered execution path&lt;/td&gt;
&lt;td&gt;Agents react to events as they arrive&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;One stage commonly waits for another&lt;/td&gt;
&lt;td&gt;Multiple agents can work concurrently&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Orchestration logic defines the workflow&lt;/td&gt;
&lt;td&gt;Participants define their own reactions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Adding an agent can require changes to the workflow&lt;/td&gt;
&lt;td&gt;New participants can join the shared environment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Long-running work can hold up downstream stages&lt;/td&gt;
&lt;td&gt;Non-blocking inference allows other activity to continue&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agents can become tightly connected to a specific workflow&lt;/td&gt;
&lt;td&gt;Agents can operate more independently&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The goal isn't to make every AI workflow concurrent. Some tasks really have dependencies that require an order.&lt;/p&gt;

&lt;p&gt;Mozaik is useful for the cases where multiple agents need to observe the same activity, react independently, and continue working while other agents are still processing.&lt;/p&gt;

&lt;p&gt;That changes how you design the system.&lt;/p&gt;

&lt;p&gt;Instead of starting with a chain such as:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent A → Agent B → Agent C
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;you can think about the system as a shared environment in which several participants respond to events:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    ┌── Research Agent
                    │
                    ├── Planning Agent
                    │
Event ──────────────┼── Coding Agent
                    │
                    ├── Review Agent
                    │
                    └── Observer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The agents still have different responsibilities, but their relationship doesn't have to be encoded as one rigid pipeline.&lt;/p&gt;

&lt;p&gt;This also affects &lt;strong&gt;agent independence and reuse&lt;/strong&gt;. When an agent's behavior is based on the events it receives and the handlers it implements, that agent can be easier to move into another application or combine with a different set of participants.&lt;/p&gt;

&lt;p&gt;For example, a review agent could be used to evaluate generated code in one application and research findings in another. The surrounding participants can change without requiring the reviewer to become part of a completely different orchestration chain.&lt;/p&gt;

&lt;p&gt;That is an important part of Mozaik's approach: concurrency and interoperability are connected to the architecture itself.&lt;/p&gt;

&lt;p&gt;The framework gives agents a shared environment where they can collaborate while allowing their individual behavior to remain separate.&lt;/p&gt;

&lt;p&gt;And that leads to the next question: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;how does Mozaik make this possible under the hood?&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  How Mozaik’s Event-Driven Architecture Enables Concurrent AI Agents
&lt;/h2&gt;

&lt;p&gt;Mozaik builds its &lt;strong&gt;concurrent multi-agent architecture&lt;/strong&gt; around an &lt;code&gt;AgenticEnvironment&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The environment is shared by humans, agents, observers, and tools. Each participant can emit events, while other participants can listen for the events relevant to their role and decide how to react.&lt;/p&gt;

&lt;p&gt;Those events can include plain-text messages, typed &lt;code&gt;ContextItem&lt;/code&gt;s representing model interactions, and streaming &lt;code&gt;SemanticEvent&amp;lt;T&amp;gt;&lt;/code&gt; chunks produced during inference.&lt;/p&gt;

&lt;p&gt;The key architectural decision is that participants don't have to wait for a central scheduler to tell them what happens next.&lt;/p&gt;

&lt;p&gt;They join the environment, register the handlers they care about, and react when relevant events arrive.&lt;/p&gt;

&lt;p&gt;a name="agenticenvironment-a-shared-event-driven-layer"&amp;gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;code&gt;AgenticEnvironment&lt;/code&gt;: A Shared Event-Driven Layer
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;AgenticEnvironment&lt;/code&gt; acts as the communication layer between participants.&lt;/p&gt;

&lt;p&gt;A human can send a message into the environment. An agent can receive it through &lt;code&gt;onMessage()&lt;/code&gt;. The agent can then start inference, which can produce reasoning, model messages, or function calls. Other participants can observe those events and decide whether they need to respond.&lt;/p&gt;

&lt;p&gt;The flow looks more 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;Message
   ↓
Agent reacts
   ↓
runInference()
   ↓
Model events
   ├── Reasoning
   ├── Function call
   └── Model message
          ↓
    Other participants react
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;There is no requirement that every participant complete its work before the environment can continue processing other events.&lt;/p&gt;

&lt;p&gt;That matters because model inference is not instantaneous. A slow model call should not turn the entire multi-agent system into a waiting line.&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Non-Blocking Inference Keeps Agents Moving
&lt;/h3&gt;

&lt;p&gt;Mozaik's &lt;code&gt;runInference()&lt;/code&gt; capability is designed to be non-blocking.&lt;/p&gt;

&lt;p&gt;A reactive agent can receive a message, add it to its &lt;code&gt;ModelContext&lt;/code&gt;, and start inference:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;onMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;void&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addContextItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nx"&gt;UserMessageItem&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nf"&gt;runInference&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gpt-5.5&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;context&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;caller&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;environment&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The important detail is what happens after &lt;code&gt;runInference()&lt;/code&gt; is called: &lt;strong&gt;the handler returns while the model continues running&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The agent doesn't have to stay waiting for the inference result before the environment can handle other activity. The same participant can respond to another event, while other participants can continue processing their own events.&lt;/p&gt;

&lt;p&gt;When inference produces new &lt;code&gt;ContextItem&lt;/code&gt;s, those items are sent back through the environment. The agent can react through handlers such as &lt;code&gt;onReasoning&lt;/code&gt;, &lt;code&gt;onFunctionCall&lt;/code&gt;, and &lt;code&gt;onModelMessage&lt;/code&gt;, while other participants can observe corresponding external events.&lt;/p&gt;

&lt;p&gt;So the underlying pattern becomes:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Event
  ↓
Reaction
  ↓
Inference or tool call
  ↓
New event
  ↓
Another reaction
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Here, Mozaik's &lt;strong&gt;reactive agent architecture&lt;/strong&gt; differs from a workflow that simply executes one function after another. The system can keep responding as new information appears.&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Participants Keep Agents Loosely Coupled
&lt;/h3&gt;

&lt;p&gt;Mozaik also separates the participants from the overall application flow.&lt;/p&gt;

&lt;p&gt;The base &lt;code&gt;BaseParticipant&lt;/code&gt; class provides the foundation for participants, while handlers such as &lt;code&gt;onMessage&lt;/code&gt;, &lt;code&gt;onFunctionCall&lt;/code&gt;, &lt;code&gt;onReasoning&lt;/code&gt;, and &lt;code&gt;onModelMessage&lt;/code&gt; allow each participant to implement only the behavior it needs.&lt;/p&gt;

&lt;p&gt;That means a participant doesn't have to know the entire application.&lt;/p&gt;

&lt;p&gt;A planner can focus on planning.&lt;br&gt;
A researcher can focus on research.&lt;br&gt;
A critic can focus on evaluation.&lt;br&gt;
An observer can monitor events.&lt;/p&gt;

&lt;p&gt;They can all participate in the same &lt;code&gt;AgenticEnvironment&lt;/code&gt; without requiring one central controller to contain every interaction between them.&lt;/p&gt;

&lt;p&gt;This is also what makes the architecture useful for &lt;strong&gt;reusable AI agents&lt;/strong&gt;. If an agent's behavior is defined around the events it understands and the actions it can perform, the same participant can potentially be introduced into another environment with a different combination of agents.&lt;/p&gt;

&lt;p&gt;Adding a critic, observer, or specialist can therefore become a matter of composing participants and defining their reactions, instead of redesigning one large workflow every time the system changes.&lt;/p&gt;

&lt;p&gt;For developers building &lt;strong&gt;AI agent orchestration systems&lt;/strong&gt;, that is a meaningful change in how the architecture can be structured: the environment provides the shared communication layer, while each participant owns its own behavior.&lt;/p&gt;

&lt;p&gt;And this is the kind of architecture the Mozaik Hackathon gives developers a chance to build themselves.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Getting Started With Mozaik: A TypeScript Runtime for Concurrent Agents
&lt;/h2&gt;

&lt;p&gt;Mozaik is written in TypeScript and is available as the &lt;code&gt;@mozaik-ai/core&lt;/code&gt; package.&lt;/p&gt;

&lt;p&gt;For a new project, installation starts with:&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; @mozaik-ai/core
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;You can also install it with Yarn or pnpm:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn add @mozaik-ai/core
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pnpm add @mozaik-ai/core
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The framework resolves the model provider from the model name passed to &lt;code&gt;runInference()&lt;/code&gt;. Provider credentials are configured through environment variables, such as:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;OPENAI_API_KEY=your-openai-key-here
ANTHROPIC_API_KEY=your-anthropic-key-here
GEMINI_API_KEY=your-gemini-key-here
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;DeepSeek models can use the OpenAI-compatible chat-completions endpoint with &lt;code&gt;OPENAI_API_KEY&lt;/code&gt; and &lt;code&gt;OPENAI_BASE_URL&lt;/code&gt; configured for DeepSeek.&lt;/p&gt;

&lt;p&gt;For TypeScript projects, Mozaik's documentation recommends a modern &lt;code&gt;moduleResolution&lt;/code&gt; setting, such as &lt;code&gt;bundler&lt;/code&gt;, &lt;code&gt;node16&lt;/code&gt;, or &lt;code&gt;nodenext&lt;/code&gt; so package imports resolve cleanly.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Mozaik Hackathon 2026: Build a Concurrent Multi-Agent System
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://build.jigjoy.ai/?ref=hadli" rel="noopener noreferrer"&gt;Mozaik Hackathon&lt;/a&gt; is about giving developers the freedom to try out new things with AI agents that work together. It's a chance for them to build something real using Mozaik and see what they can create.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://build.jigjoy.ai/apply?ref=hadli" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5kync2fgku7qluwtnklq.png" alt="Mozaik Hackathon 2026 for building a concurrent AI agent" width="800" height="486"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is fully online and free to enter, and you do not need previous Mozaik experience.&lt;/p&gt;

&lt;p&gt;When you sign up, you get a bunch of helpful stuff like documents to read, a template to get started, and a quick intro to get you going before everything kicks off. Plus, the organizers will guide you through the process, so the weekend is not simply a contest where you are handed a framework and left alone with it.&lt;/p&gt;

&lt;p&gt;The goal is also educational. You are expected to build something, but the process gives you a chance to understand what is happening underneath an AI agent system: how agents receive events, maintain context, call models and tools, react to outputs, and coordinate with other participants.&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Who can participate in the Hackathon?
&lt;/h3&gt;

&lt;p&gt;The hackathon is open to &lt;strong&gt;developers anywhere in the world&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You can enter on your own, and the organizers will help solo participants find teammates. You can also bring your own team. The website currently says that team-size limits will be announced soon.&lt;/p&gt;

&lt;p&gt;You also do not need to arrive as a Mozaik expert. The event is designed to introduce the runtime to participants before the build weekend begins.&lt;/p&gt;

&lt;p&gt;That makes the hackathon relevant to developers who already build AI applications as well as those who are just starting to explore &lt;strong&gt;AI agents and multi-agent architecture&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Mozaik Hackathon Timeline: September 4–13, 2026
&lt;/h3&gt;

&lt;p&gt;The main build happens over the weekend of &lt;strong&gt;September 5–6, 2026&lt;/strong&gt;, but the event starts with an introduction on September 4 and ends with the winners' announcement on September 13.&lt;/p&gt;

&lt;p&gt;Here is the timeline currently provided by the organizers:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Date&lt;/th&gt;
&lt;th&gt;Event&lt;/th&gt;
&lt;th&gt;What happens&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;September 4, 2026&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Livestream kickoff&lt;/td&gt;
&lt;td&gt;Introduction to Mozaik and the public release of the hackathon brief&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;September 5–6, 2026&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Build weekend&lt;/td&gt;
&lt;td&gt;Participants build their concurrent multi-agent systems with Mozaik&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;September 6, 2026&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Submissions close&lt;/td&gt;
&lt;td&gt;Submit your repository and short demo by the evening&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;September 13, 2026&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Winners announced&lt;/td&gt;
&lt;td&gt;The judging period ends and the winners are announced&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;You do not need to travel anywhere, find a physical venue, or rearrange your weekend around an in-person event. You can build from wherever you are and communicate with the organizers and other participants through the event's online channels.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  What Can You Build With Mozaik?
&lt;/h2&gt;

&lt;p&gt;Once you understand the event-driven model, the interesting part starts: deciding what you want your multi-agent system to do.&lt;/p&gt;

&lt;p&gt;The Mozaik Hackathon does not give developers a long list of predefined tracks. There is one open brief, and the core requirement is simple: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;build a working system where several agents run at the same time, share state, and coordinate with one another.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That leaves plenty of ideas for creativity.&lt;/p&gt;

&lt;p&gt;You could build a research system where multiple agents investigate different parts of a problem simultaneously, with one agent checking the findings as they arrive. You could create a coding team where a planner, implementation agent, tester, and reviewer respond to changes as the project develops.&lt;/p&gt;

&lt;p&gt;You could also go beyond familiar developer workflows. Think about customer-support agents that monitor conversations together, autonomous research teams that exchange findings, content systems where writers and fact-checkers react to new information, or monitoring agents that watch another agent's activity and step in when something needs attention.&lt;/p&gt;

&lt;p&gt;A project with five agents that only execute one after another won't demonstrate the concurrent-agent architecture as clearly. A smaller system with three agents that genuinely react to shared events and influence each other's work can demonstrate the architecture much better.&lt;/p&gt;

&lt;p&gt;The best way to approach the project is to define these three things before writing the code:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;What is the shared goal?&lt;/strong&gt;&lt;br&gt;
Give all participants a reason to collaborate.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;What can each agent observe and react to?&lt;/strong&gt;&lt;br&gt;
This is where Mozaik's event-driven model becomes important.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;What happens when agents work at the same time?&lt;/strong&gt;&lt;br&gt;
Your architecture should make concurrency visible in the actual behavior of the application.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That last point matters because the hackathon is specifically looking for systems where concurrency is genuine, not a sequential pipeline presented as a multi-agent application.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Why Developers Should Join the Mozaik Hackathon
&lt;/h2&gt;

&lt;p&gt;Building a multi-agent system from scratch forces you to understand things that can easily stay hidden when you work with higher-level abstractions.&lt;/p&gt;

&lt;p&gt;You have to think about &lt;strong&gt;agent state, events, context, model inference, tool calls, communication, reactions, and concurrency&lt;/strong&gt;. You start seeing an AI agent as an actual software component with inputs, behavior, state, and outputs.&lt;/p&gt;

&lt;p&gt;That is exactly the kind of experience the Mozaik team wants participants to gain.&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  You can learn by building alongside other developers
&lt;/h3&gt;

&lt;p&gt;Hackathons are also useful because the learning does not happen in isolation.&lt;/p&gt;

&lt;p&gt;The organizers plan to support participants through Discord, including announcements, team formation for people entering solo, and a place to ask questions throughout the weekend.&lt;/p&gt;

&lt;p&gt;If you run into a problem with your architecture, need clarification about Mozaik, or simply want to discuss an approach with other builders, there is a shared space for it.&lt;/p&gt;

&lt;p&gt;And because the event is open-ended, you are not limited to reproducing one official demo. You get to make architectural decisions yourself and see what happens when you apply the concurrent-agent model to a problem you care about.&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  There is a real incentive, too
&lt;/h3&gt;

&lt;p&gt;The hackathon offers &lt;strong&gt;$1,000 in cash prizes&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Place&lt;/th&gt;
&lt;th&gt;Cash prize&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;🥇 1st&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$500&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;🥈 2nd&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$300&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;🥉 3rd&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$200&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;There are also additional prizes and discounts shown on the event page, including subscriptions from the event partners.&lt;/p&gt;

&lt;p&gt;But for developers interested in AI engineering, the bigger prize is the opportunity to leave the weekend with a working &lt;strong&gt;multi-agent application&lt;/strong&gt; and a clear understanding of how concurrent agents can be designed.&lt;/p&gt;

&lt;p&gt;That is a useful project to have in your portfolio, especially as AI applications move beyond single-agent interactions toward systems where several specialized agents collaborate.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://build.jigjoy.ai/apply?ref=hadli" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Register for the Mozaik Hackathon 🔥&lt;/a&gt;
&lt;/p&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;
&lt;h3&gt;
  
  
  What makes Mozaik different from other AI agent frameworks?
&lt;/h3&gt;

&lt;p&gt;→ Mozaik is built around a concurrent, event-driven architecture where agents don't have to wait for one another in a fixed sequence. Agents can react to events independently, allowing multiple participants to work at the same time while remaining loosely coupled and reusable across different projects.&lt;/p&gt;
&lt;h3&gt;
  
  
  Do I need experience with Mozaik to join the hackathon?
&lt;/h3&gt;

&lt;p&gt;→ No. The Mozaik hackathon is open to developers without prior Mozaik experience, and participants receive documentation, a starter template, and a primer before the event. The hackathon is also free and fully online, so you can participate without paying an entry fee or traveling.&lt;/p&gt;
&lt;h3&gt;
  
  
  What will I build during Mozaik hackathon?
&lt;/h3&gt;

&lt;p&gt;→ You'll build a working multi-agent system around an open brief, with the core requirement that multiple agents genuinely run concurrently and coordinate with one another. Possible directions include a research swarm, a self-reviewing codebase, a live operations room, or a system for parallel hypothesis testing.&lt;/p&gt;
&lt;h3&gt;
  
  
  When does the Mozaik hackathon take place, and is it free?
&lt;/h3&gt;

&lt;p&gt;→ The Mozaik hackathon takes place online on September 5–6, 2026, and it is free to enter. The livestream kickoff is scheduled for September 4, while submissions close on the evening of September 6.&lt;/p&gt;
&lt;h3&gt;
  
  
  What prizes can Mozaik hackathon participants win?
&lt;/h3&gt;

&lt;p&gt;→ The hackathon offers $1,000 in cash prizes: $500 for first place, $300 for second place, and $200 for third place. Additional prizes include daily.dev Plus subscriptions, Hyperskill Premium subscriptions, and Mozaik Cloud Premium subscriptions, while every participant receives discounts on Mozaik Cloud and Hyperskill Bootcamps. &lt;/p&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;A lot of today's AI agent development still revolves around deciding what happens first, what happens next, and which agent receives the previous agent's output.&lt;/p&gt;

&lt;p&gt;That approach works for many tasks. But as systems become more autonomous, there is another way to think about coordination: &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Give agents an environment where they can observe events, react independently, and collaborate as the situation changes.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That is the idea Mozaik is bringing to multi-agent development.&lt;/p&gt;

&lt;p&gt;Its event-driven architecture, non-blocking inference model, participant system, and shared environment give developers a foundation for experimenting with agents that can work concurrently without every interaction being hard-coded into one sequential workflow.&lt;/p&gt;

&lt;p&gt;The Mozaik Hackathon is a chance to take that idea out of the documentation and build something with it.&lt;/p&gt;

&lt;p&gt;You do not need to arrive with a finished architecture or years of multi-agent experience. You need a problem worth solving, a willingness to experiment, and an idea for how multiple agents can contribute to the same goal.&lt;/p&gt;

&lt;p&gt;If you have been curious about what happens when AI agents can work together without waiting for each other at every step, September 5–6 is a good weekend to find out.&lt;/p&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Thanks for reading! 🙏🏻 &lt;br&gt; I hope you found this useful ✅ &lt;br&gt; Please react and follow for more 😍 &lt;br&gt; Made with 💙 by &lt;a href="https://dev.to/hadil"&gt;Hadil Ben Abdallah&lt;/a&gt;
&lt;/th&gt;
&lt;th&gt;
&lt;a href="https://www.linkedin.com/in/hadil-ben-abdallah/" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu48q29oef3l4a6eow30h.png" alt="LinkedIn" width="40" height="40"&gt;&lt;/a&gt; &lt;a href="https://github.com/Hadil-Ben-Abdallah" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhuvszgj6eun7xfvnwv51.png" alt="GitHub" width="50" height="50"&gt;&lt;/a&gt; &lt;a href="https://x.com/hadilbnabdallah" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F53x550t83v5ner74xkxo.jpg" alt="Twitter" width="40" height="40"&gt;&lt;/a&gt;
&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;div class="ltag__user ltag__user__id__1209000"&gt;
    &lt;a href="/hadil" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1209000%2Fb29d37d8-2efe-4391-9796-a6f8a483f1bd.png" alt="hadil image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/hadil"&gt;Hadil Ben Abdallah&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/hadil"&gt;Software Engineer • Technical Writer (300K+ readers &amp;amp; 25K+ followers) • Trusted by 20+ startups and tech companies worldwide
I turn brands into websites people 💙 to use&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>ai</category>
      <category>hackathon</category>
      <category>agents</category>
      <category>buildinpublic</category>
    </item>
  </channel>
</rss>
