The new Power Platform Pro-Code Era: Code Apps vs Power Pages SPA Microsoft has introduced two new pro-code development options within the Power Platform — Power Apps Code Apps and Power Pages Single-Page Applications — that allow professional developers to build custom React-based user interfaces while the platform handles infrastructure, authentication, and data connectivity. Both options run on Dataverse and support the full catalog of 1,500+ Power Platform connectors, but they serve different purposes and require distinct toolchains. The shift marks a new era where "low code" means writing less code because the platform absorbs backend complexity, not because it generates the UI. The phrase " low code " has carried a lot of baggage over the years. For a long time it was synonymous with drag-and-drop, formula bars, and the implicit promise that you could build real applications without writing real code . That era is not over — canvas apps and model-driven apps are still excellent tools — but something has shifted , and it is worth naming clearly. AI has changed what "low code" means . The new definition is not about writing less code because the platform generates it for you. It is about writing less code because the platform absorbs the infrastructure . Consider what building a serious business application actually requires: None of this is your business problem . All of it is work that stands between you and the thing you are actually trying to build . This is where the Power Platform has always been something more interesting than its "low code" label suggests. Dataverse gives you an enterprise-grade relational store with row-level security, audit trails, and a rich metadata model — without a DBA. Over 1,500 connectors let your app talk to Salesforce, SharePoint, Azure DevOps, or a payment gateway with a single CLI command and a generated TypeScript service, rather than weeks of OAuth plumbing. Power Automate handles the orchestration layer. The platform enforces your organisation's Data Loss Prevention policies automatically. Custom APIs, server-side logic endpoints, and Dataverse plugins give you escape hatches for anything the platform does not handle natively. In short: the Power Platform takes care of everything that is not your business logic, so that your code can be exclusively about your business logic . That reframing matters because it changes the profile of developer the platform is now genuinely useful for . It is not just makers and citizen developers anymore. It is professional engineers who want the productivity of a managed platform without surrendering control of what their users actually see and experience. And that is exactly where Power Apps Code Apps 🟠 and Power Pages Single-Page Applications 🔵 enter the picture. Both are answers to the one limitation that has always frustrated developers on the Power Platform: the UI. Canvas apps are powerful but visually constrained. Model-driven apps are consistent but rigid. With Code Apps and Power Pages SPAs, you bring your own React application — your own components, your own design system, your own interaction patterns — and the platform simply becomes the infrastructure layer beneath it. You write the UI . The platform handles everything else . Both generate web applications. Both let you write your own frontend. Both sit on Dataverse. And yet they serve fundamentally different purposes, come with different toolchains, and make different trade-offs. If you are evaluating which path to take — or you are a platform architect trying to set a standard for your organisation — this post is for you. 🟠 Power Apps Code Apps are a code-first way to build apps that run inside Power Apps. You write React or any framework , scaffold and publish with the npx power-apps CLI the older pac code command group will be deprecated in a future release — start migrating to the npm-based toolset now , and the Power Apps runtime handles authentication, hosting, and connector proxying. The result feels like a regular web app to your users, but it runs under the Power Apps umbrella — which means it inherits DLP policies, Conditional Access, sharing controls, and the full catalogue of 1,500+ Power Platform connectors. Note on framework choice: The official tooling, scaffolding templates, generated connector service classes, and AI skills all targetReact + Vite + TypeScript— that is the well-supported default. The platform does also accommodate plain JavaScript and other frameworks; @wyattdave's guide to plain-JS Code Apps is a practical example of a lighter-weight setup without the TypeScript or Vite overhead. 🔵 Power Pages SPAs are a code-first flavour of Power Pages sites. Instead of using the low-code Power Pages Studio to build pages with drag-and-drop sections and Liquid templates and -my personal pov- cry desperately when you have to add basic form validations , you upload a compiled static bundle — your React app — which becomes the entire site. The Power Pages runtime hosts it, provides the Dataverse Web API, and handles authentication for external users. The key insight: Code Apps are portals for your employees. Power Pages SPAs are portals for the world. This is the most important distinction, and everything else flows from it. 🟠 Code Apps authenticate users against Microsoft Entra ID . Every user must have a Power Apps Premium licence or a Developer Plan for testing . The Power Apps host manages the entire auth flow — tokens, consent, refresh — and your code never touches a credential. This is ideal for internal line-of-business applications where your users are already in your tenant. 🔵 Power Pages SPAs are designed for external users who may not have a Microsoft account at all. Power Pages supports Microsoft Entra External ID, LinkedIn, local username/password accounts, and anonymous access. Users pay per-site rather than per-user, which makes the economics work for customer-facing portals with large or unpredictable audiences. The practical implication: if you need an employee expense portal, use Code Apps. If you need a customer self-service portal or a supplier onboarding site, use Power Pages SPA. This difference surprises many developers coming from a canvas app background. 🟠 Code Apps expose the full Power Platform connector ecosystem to your TypeScript code. When you run npx power-apps add-data-source , the CLI generates fully typed TypeScript service classes for that connector. You get autocomplete, compile-time type checking, and IntelliSense for every table, column, and action. If the connector works in Power Automate or canvas apps, it works in a Code App. 🔵 Power Pages SPAs are Dataverse-only on the data side. You call Dataverse through the Web API / api/ , and every table your frontend touches must have explicit Table Permissions configured and assigned to Web Roles . There is no CLI command to add a connector. If you need to call an external API — say, a CRM, a payment gateway, or a weather service — you must proxy that call through a Server Logic endpoint or a Cloud Flow, neither of which is as frictionless as simply adding a connector in a Code App. Both platforms have a proper server-side logic story — the difference is one of language, not capability. 🔵 Power Pages SPA has native server-side JavaScript endpoints hosted at / api/serverlogics/