Power Apps ESLint plugin replaces Solution Checker for TypeScript code
The Power Apps team have had a long-standing quality tool called the Solution Checker. This was built into the Dataverse solution management interface, ALM Power Platform Build Tools and even a PowerShell version. The challenge with the Solution Checker has always been that by the time you find out about the issues, it's often too late and the solution has been committed to source control and is already in the CI/CD pipeline, and furthermore the results were often false positives due to the way that TypeScript 'transpiles' into JavaScript.
Now the Power Apps team have released an ESLint
plugin that gives you warnings and errors as you write your code (if you have the eslint
extension installed), or when you run ESLint
at the command line.
I've previously written on using ESLint in your development environment - and this is a really welcome addition to the rule set.
At this time, the rule-set is most applicable for Web Resource development at the moment with the majority describing deprecations, however, it is certainly worth adding them to PCF projects as well (alongside the other react recommended rules).
To install you use:
npm install @microsoft/eslint-plugin-power-apps --save-dev
To add to your existing .eslint.json
file, add @microsoft/power-apps
to the plugins
section:
"plugins": [ ... "@microsoft/power-apps" ],
Then add each of the rules to the rules section with the level you want to enforce:
"rules": { "@microsoft/power-apps/avoid-2011-api": "error", "@microsoft/power-apps/avoid-browser-specific-api": "error", "@microsoft/power-apps/avoid-crm2011-service-odata": "warn", "@microsoft/power-apps/avoid-crm2011-service-soap": "warn", "@microsoft/power-apps/avoid-dom-form-event": "warn", "@microsoft/power-apps/avoid-dom-form": "warn", "@microsoft/power-apps/avoid-isactivitytype": "warn", "@microsoft/power-apps/avoid-modals": "warn", "@microsoft/power-apps/avoid-unpub-api": "warn", "@microsoft/power-apps/avoid-window-top": "warn", "@microsoft/power-apps/do-not-make-parent-assumption": "warn", "@microsoft/power-apps/use-async": "error", "@microsoft/power-apps/use-cached-webresource": "warn", "@microsoft/power-apps/use-client-context": "warn", "@microsoft/power-apps/use-global-context": "error", "@microsoft/power-apps/use-grid-api": "warn", "@microsoft/power-apps/use-navigation-api": "warn", "@microsoft/power-apps/use-offline": "warn", "@microsoft/power-apps/use-org-setting": "error", "@microsoft/power-apps/use-relative-uri": "warn", "@microsoft/power-apps/use-utility-dialogs": "warn" }
I would really like to see a recommended set of rules that can be used like other ESLint
rule sets, so when more rules are added we don't need to explicitly add them to the config. If you agree - please consider upvoting my suggestions!
My .esconfig looks something like the following for a Web Resource project:
{ "parser": "@typescript-eslint/parser", "env": { "browser": true, "commonjs": true, "es6": true, "jest": true, "jasmine": true }, "extends": [ "plugin:@typescript-eslint/recommended", "plugin:prettier/recommended", "prettier", "plugin:sonarjs/recommended" ], "parserOptions": { "project": "./tsconfig.json" }, "plugins": [ "@typescript-eslint", "prettier", "@microsoft/power-apps", "sonarjs" ], "ignorePatterns": [ "**/generated/*.ts" ], "rules": { "prettier/prettier": "error", "eqeqeq": [ 2, "smart" ], "prettier/prettier": "error", "arrow-body-style": "off", "prefer-arrow-callback": "off", "linebreak-style": [ "error", "windows" ], "quotes": [ "error", "double" ], "semi": [ "error", "always" ], "@microsoft/power-apps/avoid-2011-api": "error", "@microsoft/power-apps/avoid-browser-specific-api": "error", "@microsoft/power-apps/avoid-crm2011-service-odata": "warn", "@microsoft/power-apps/avoid-crm2011-service-soap": "warn", "@microsoft/power-apps/avoid-dom-form-event": "warn", "@microsoft/power-apps/avoid-dom-form": "warn", "@microsoft/power-apps/avoid-isactivitytype": "warn", "@microsoft/power-apps/avoid-modals": "warn", "@microsoft/power-apps/avoid-unpub-api": "warn", "@microsoft/power-apps/avoid-window-top": "warn", "@microsoft/power-apps/do-not-make-parent-assumption": "warn", "@microsoft/power-apps/use-async": "error", "@microsoft/power-apps/use-cached-webresource": "warn", "@microsoft/power-apps/use-client-context": "warn", "@microsoft/power-apps/use-global-context": "error", "@microsoft/power-apps/use-grid-api": "warn", "@microsoft/power-apps/use-navigation-api": "warn", "@microsoft/power-apps/use-offline": "warn", "@microsoft/power-apps/use-org-setting": "error", "@microsoft/power-apps/use-relative-uri": "warn", "@microsoft/power-apps/use-utility-dialogs": "warn" } }
Note: This uses the prettier
and sonarjs
plugins that you will also need to install.
I also add the following scripts to my package.json:
"lint": "eslint **/*.ts", "lint:fix": "npm run lint -- --fix",
These then allow you to run the rules across the entire project and automatically fix them where possible using npm run lint:fix
.
I really love how the solution package has evolved into this set of pro-coder-friendly ESLint
rules. I can't wait to see how it develops with more rules over time.
Read more on the official blog post from Microsoft.
Take a look at the npm package information for eslint-plugin-power-apps.
Published on:
Learn moreRelated posts
Power Apps – Temporary reversion to the classic app sharing experience
Our monitoring has identified an issue with the Share dialog box in Power Apps and have temporarily disabled it to prevent impact to your envi...
Power Apps Pulse July 2025
Have you played Yahtzee? In Power Apps!
Have you pleased Yahtzee? I recreated this game in Power Apps! So, if you are feeling lucky, roll the dice and let the games begin! The post H...
Decode and Fix: “This Data Type is Unsupported for Evaluation” in Power Apps
One common frustration when building Canvas Apps over Dataverse is encountering this cryptic error: “This data type is unsupported ...
First Look at Generative Pages in Power Apps
With Generative Pages (find announcement and docs here) we can create a page in Model-Driven Apps using natural language. You can see it as a ...
Power Apps – Generative Pages feature available for preview
We are announcing the public preview of Generative Pages. This new capability allows admins to simplify the app design process for model-drive...
Make Complex Records Easy to Read with Power Apps AI Builder’s Row Summary
In model-driven apps, forms often have many fields spread across multiple tabs and sections, which can make it hard and time-consuming for use...
Power Apps – Agent builder in Power Apps
We are announcing the ability to create custom AI agents by using existing knowledge, logic, and actions in Power Apps. This feature will reac...