vision& logoDEV Standards

Power Apps

App Names

Pattern: [App Name]

There is no restriction on the name of the app

ExampleNotes
Contoso-CRM-FieldField app for CRM scenario
Portal Internal-ContosoInternal admin portal
Contoso Inventory AdminBack-office inventory operations
CentroSolution for the Centro app

Solution Names

Pattern: [Solution Name]

There is no restriction on the name of the solution. However, you must add the Publisher.
If it is a solution that you will deploy to another tenant, make sure to include your company's name as the publisher. If the solution is being used only in your own tenant, make sure to include the department name as the publisher.

ExampleNotes
Contoso CRM FieldField app for CRM scenario
Portal-Internal-ContosoInternal admin portal
CentroCentro app

Connection Reference Names

Pattern: [App/Service Name] [Connector] - [optional: Short Description] - [Type of Connection]

ExampleNotes
[Centro] SharePoint - Service UserSharePoint connection for an app called Centro. The service user is used to connect to SharePoint.
[Centro] Dataverse - Service PrincipalDataverse connection for an app called Centro. The service principal is used to connect to Dataverse.
[AbsenceManager] Office 365 Outlook - UserOffice 365 Outlook connection for an app called AbsenceManager using the end-user's connection.
[SplitPDFs] Storage Queue - API KeyOffice 365 Outlook connection for an app called AbsenceManager using the end-user's connection.
[MeetingNotes] SharePoint - Project List Agent - UserSharePoint connection used for a Copilot Studio agent to connect to the SharePoint Project List.

Screen Names

Pattern: scr[PageTopic]

ExampleNotes
scrHomeApp landing screen
scrOrdersListBrowse/list screen
scrOrderDetailsDetails/edit screen
scrSettingsSettings screen

Control Names

Pattern: [prefix][MeaningfulName]

Use a short, consistent prefix per control type, followed by a clear noun or noun-phrase in camelCase. Keep names stable even if the UI moves around.

Control TypePrefixExampleNotes
LabellbllblPageTitleStatic or dynamic text
Text InputtxttxtCustomerNameSingle-line input
Rich Text EditorrterteDescriptionMulti-line rich text
DropdowndrpdrpStatusSingle select
Combo BoxcmbcmbAssigneeSearch + multi/single select
CheckboxchkchkAcceptTermsBoolean input
ToggletgltglActiveOn/Off switch
Date PickerdtpdtpStartDateDate selection
SlidersldsldVolumeNumeric range
ButtonbtnbtnSubmitPrimary action
IconicoicoRefreshIcon-only action/visual
ImageimgimgLogoStatic/dynamic image
GalleryglyglyOrdersScrollable list of records
Data TabletbltblOrdersTabular display
Form (Edit/View)frmfrmOrderConnected form control
Container/GroupconconHeaderLayout grouping
TimertmrtmrAutosaveBackground process
HTML TexthtmhtmPreviewHTML rendering

Variable Names

Use the requested prefixes for clarity and quick scope recognition.

ScopePrefixExampleNotes
Context variable__IsLoadingCreated via UpdateContext()
Global variablegblgblCurrentUserCreated via Set()

Collection Names

Pattern: col[PluralNoun]

ExampleNotes
colOrdersTemporary orders cache
colLookupStatusesStatic/lookup values

Use of camelCase

Use camelCase for most identifiers (controls, data sources, variables, collections) combined with a short prefix that communicates purpose/type. Screen names are an exception and should use a dedicated scr prefix with PascalCase topic words.

Always Format the Code

Break long Power Fx formulas into multiple lines, group related steps, and use semicolons to separate statements. Align property names and function calls for readability.

// Good formatting
// OnSelect of btnSubmit
If(
    IsBlank(txtCustomerName.Text),
    Notify("Customer name is required", NotificationType.Error),
    Collect(colOrders, {
        customerName: txtCustomerName.Text,
        status: drpStatus.Selected.Value
    });
    Navigate(scrOrderDetails, ScreenTransition.Fade)
)

Always Comment the Code

Use comments to explain why not what. Prefer short, meaningful comments above non-obvious logic.

// Cache lookup values once per session
If(IsEmpty(colLookupStatuses),
    ClearCollect(colLookupStatuses, dsDataverse_Statuses)
)

Reuse Logic (User-defined functions)

If code repeats, refactor it. Prefer reusable components, named formulas, or component library patterns to centralize logic and UI. Expose input/output properties and call the component where needed.

Loading Screen on App Start

Avoid heavy logic in App.OnStart. Use a dedicatedscrLoading as the start screen, perform initialization in scrLoading.OnVisible, then navigate to the home screen. The Home page has a loading screen example.