EPC Group - Enterprise Microsoft AI, SharePoint, Power BI, and Azure Consulting
Clutch Top Power BI & Data Solutions Company 2026, G2 High Performer, Momentum Leader, Leader Awards
BlogContact
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌

EPC Group

Enterprise Microsoft consulting with 28+ years serving Fortune 500 companies.

(888) 381-9725
contact@epcgroup.net
4900 Woodway Drive - Suite 830
Houston, TX 77056

Follow Us

Solutions

  • All Services
  • Microsoft 365 Consulting
  • AI Governance
  • Azure AI Consulting
  • Cloud Migration
  • Microsoft Copilot
  • Data Governance
  • Microsoft Fabric
  • vCIO / vCAIO Services

Industries

  • All Industries
  • Healthcare IT
  • Financial Services
  • Government
  • Education
  • Teams vs Slack

Power BI

  • Case Studies
  • 24/7 Emergency Support
  • Dashboard Guide
  • Gateway Setup
  • Premium Features
  • Lookup Functions
  • Power Pivot vs BI
  • Treemaps Guide
  • Dataverse
  • Power BI Consulting

Company

  • About Us
  • Our History
  • Microsoft Gold Partner
  • Case Studies
  • Testimonials
  • Blog
  • Resources
  • Contact

Microsoft Teams

  • Teams Questions
  • Teams Healthcare
  • Task Management
  • PSTN Calling
  • Enable Dial Pad

Azure & SharePoint

  • Azure Databricks
  • Azure DevOps
  • Azure Synapse
  • SharePoint MySites
  • SharePoint ECM
  • SharePoint vs M-Files

Comparisons

  • M365 vs Google
  • Databricks vs Dataproc
  • Dynamics vs SAP
  • Intune vs SCCM
  • Power BI vs MicroStrategy

Legal

  • Sitemap
  • Privacy Policy
  • Terms
  • Cookies

© 2026 EPC Group. All rights reserved.

‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
February 23, 2026|24 min read|SharePoint Consulting

SharePoint Framework (SPFx) Development: The Enterprise Guide to Custom Web Parts, Extensions, and Teams Integration

The SharePoint Framework is the only Microsoft-supported development model for building custom components on SharePoint Online and Microsoft Teams. This guide covers enterprise SPFx architecture, web part development patterns, extension types, Microsoft Graph integration, Teams deployment, Viva Connections ACEs, and Copilot plugin development — based on 300+ SPFx projects delivered by EPC Group.

Table of Contents

  • What Is the SharePoint Framework?
  • Development Environment Setup
  • Web Part Architecture and Patterns
  • SPFx Extensions: Application Customizers, Field Customizers, and Command Sets
  • Microsoft Graph Integration
  • Teams Tabs and Personal Apps
  • Viva Connections and Adaptive Card Extensions
  • Enterprise Deployment and ALM
  • Performance Optimization
  • SPFx Governance for Enterprise
  • Partner with EPC Group

What Is the SharePoint Framework?

The SharePoint Framework (SPFx) is Microsoft's modern, client-side development platform for building customizations that run on SharePoint Online, Microsoft Teams, Microsoft Viva, and the broader Microsoft 365 ecosystem. Released in 2017 and now in its 1.20+ iteration, SPFx uses TypeScript, React, and Node.js to create web parts, extensions, and Adaptive Card Extensions that render within the SharePoint page context.

SPFx replaced the legacy SharePoint Add-in model and the even older farm solution / sandbox solution approaches. Unlike those models, SPFx components run in the browser — there is no server-side code execution on SharePoint. This means faster performance, better security isolation, and compatibility with the continuously updated SharePoint Online service. At EPC Group, our SharePoint consulting practice has delivered over 300 SPFx development projects for enterprise clients.

What You Can Build with SPFx

Component TypeDescriptionDeployment Target
Web PartsVisual components placed on SharePoint pages by end usersSharePoint pages, Teams tabs
Application CustomizersInject custom code in page header/footer, add global notificationsAll SharePoint pages (tenant or site scoped)
Field CustomizersCustom rendering for list/library columns (progress bars, RAG status)SharePoint list views
ListView Command SetsCustom buttons in list/library command barSharePoint list/library toolbars
Form CustomizersReplace default SharePoint list forms with custom React formsSharePoint list new/edit/view forms
Adaptive Card ExtensionsCard-based components for Viva Connections dashboardViva Connections (desktop + mobile)

Development Environment Setup

A proper development environment is the foundation for efficient SPFx development. EPC Group standardizes the following toolchain across all enterprise SPFx projects.

Required Tools

  • Node.js 18.x LTS: Required runtime. Do not use Node.js 20+ or 16.x — SPFx has strict Node.js version requirements. Use nvm (Node Version Manager) to switch between versions if you work on non-SPFx projects requiring different Node versions.
  • TypeScript 4.7+: SPFx projects use TypeScript by default. Strict mode is recommended for enterprise projects to catch type errors at compile time rather than runtime.
  • Yeoman + SPFx Generator: Install globally: npm install -g yo @microsoft/generator-sharepoint. The generator scaffolds project structure, build pipeline, and TypeScript configuration.
  • Visual Studio Code: Recommended IDE with extensions: ESLint, Prettier, SPFx Snippets, SharePoint Framework Toolkit (Microsoft official extension).
  • gulp: SPFx uses gulp as its task runner for build, serve, bundle, and package operations. Install globally: npm install -g gulp-cli.

Project Scaffolding Command

# Scaffold a new SPFx web part project
yo @microsoft/sharepoint

# Options:
# Solution name: my-enterprise-webpart
# Target: SharePoint Online only
# Use current folder: No
# Component type: WebPart
# Web part name: EnterpriseDataViewer
# Template: React

# After scaffolding:
cd my-enterprise-webpart
npm install
gulp serve  # Starts local workbench

Web Part Architecture and Patterns

Enterprise SPFx web parts must follow consistent architectural patterns to ensure maintainability, testability, and performance. EPC Group uses a layered architecture that separates concerns and enables code reuse across web parts.

Recommended Project Structure

src/
├── webparts/
│   └── enterpriseDataViewer/
│       ├── EnterpriseDataViewerWebPart.ts    # Entry point, property pane
│       ├── EnterpriseDataViewerWebPart.manifest.json
│       └── components/
│           ├── EnterpriseDataViewer.tsx       # Main React component
│           ├── EnterpriseDataViewer.module.scss
│           ├── DataTable.tsx                  # Presentational component
│           ├── FilterPanel.tsx                # Presentational component
│           └── ErrorBoundary.tsx              # Error handling wrapper
├── services/
│   ├── GraphService.ts                       # Microsoft Graph API calls
│   ├── SharePointService.ts                  # SP REST/PnP calls
│   └── CacheService.ts                       # Local storage caching
├── models/
│   ├── IDataItem.ts                          # TypeScript interfaces
│   └── IFilterOptions.ts
├── hooks/
│   ├── useGraphData.ts                       # Custom React hooks
│   └── useSharePointList.ts
└── utils/
    ├── dateHelpers.ts                        # Utility functions
    └── formatters.ts

Key Architecture Patterns

Pattern 1: Service Layer Abstraction

Never call APIs directly from React components. Create service classes that encapsulate all data access logic (SharePoint REST, Microsoft Graph, external APIs). This enables unit testing with mock services, consistent error handling, and the ability to swap data sources without modifying UI components. Use dependency injection through the SPFx ServiceScope for testability.

Pattern 2: PnPjs for SharePoint Data Access

Use the PnP JavaScript library (@pnp/sp) instead of raw REST API calls for SharePoint data operations. PnPjs provides a fluent, chainable API with built-in batching, caching, and error handling. It reduces boilerplate code by 60-70% compared to direct REST calls and handles authentication automatically within the SPFx context. Install: npm install @pnp/sp @pnp/graph @pnp/logging.

Pattern 3: Property Pane Configuration

Design the property pane for site owners, not developers. Provide dropdown selectors for lists and fields (populated dynamically), toggle switches for feature flags, and text fields for configurable values. Use property pane pages and groups to organize settings logically. Validate all property values and provide meaningful defaults so the web part works out of the box.

Pattern 4: Error Boundary and Loading States

Every enterprise web part must handle three states gracefully: loading (show a shimmer/skeleton while data fetches), error (show a user-friendly message with retry option, log the technical error), and empty (show a helpful message when no data matches the filter). Wrap the main component in a React Error Boundary to prevent a single web part crash from breaking the entire page.

SPFx Extensions: Application Customizers, Field Customizers, and Command Sets

Extensions extend SharePoint beyond the web part zone, modifying the page chrome, list views, and command surfaces. They are essential for enterprise scenarios like global navigation, custom branding, compliance banners, and workflow actions.

Application Customizers

Application Customizers run on every page in the scope of their deployment (tenant-wide or site collection). They access two placeholders: Top (above the site header) and Bottom (below the page content). Common enterprise uses include compliance notification banners, custom mega-navigation menus, analytics tracking injection, and global search enhancement.

Performance Warning: Application Customizers

Application Customizers run on every page load. A poorly optimized customizer that makes synchronous API calls or loads large JavaScript bundles will slow down every page in your SharePoint environment. Keep Application Customizer bundles under 50 KB, defer non-critical operations, and cache API responses aggressively. Measure impact with the SharePoint Performance Insights tool before tenant-wide deployment.

Field Customizers

Field Customizers replace the default rendering of a list column in views. Use them for visual indicators that communicate status at a glance: progress bars for completion percentage, RAG (Red/Amber/Green) status indicators, star ratings, user profile cards with photos, and conditional formatting beyond what column formatting JSON supports.

ListView Command Sets

Command Sets add custom buttons to the list or library command bar. Buttons can respond to zero, one, or multiple selected items. Enterprise examples include: "Send for Approval" (triggers a Power Automate flow), "Generate PDF" (creates a PDF from selected items using a custom API), "Bulk Classify" (applies metadata to multiple items), and "Export to Excel" (with custom formatting and business logic beyond the built-in export). The commands integrate naturally with the SharePoint toolbar and support both modern list views and the document library view.

Microsoft Graph Integration

Microsoft Graph is the unified API for Microsoft 365 data — users, groups, mail, calendar, files, Teams, Planner, and more. SPFx provides built-in Graph access through the MSGraphClientV3 factory, which handles authentication automatically using the current user's delegated permissions.

Requesting Graph Permissions

By default, SPFx web parts can access Graph with basic read permissions. For operations requiring elevated permissions (reading other users' calendars, managing Teams, accessing Planner tasks), declare the required permission scopes in the package-solution.json file under webApiPermissionRequests. After deploying the .sppkg file, a SharePoint admin must approve the permission requests in the SharePoint Admin Center > API Access page.

Microsoft Graph Toolkit (MGT) in SPFx

For common Graph scenarios, use the Microsoft Graph Toolkit React components (@microsoft/mgt-react, @microsoft/mgt-spfx) instead of building custom UI. MGT provides production-ready components: PeoplePicker, PersonCard, FileList, TeamChannelPicker, Agenda, TodoTasks, and more. Each component handles authentication, data fetching, and rendering with built-in theming. Initialize the MGT SharePoint provider once in your web part, and all MGT components authenticate automatically.

Common Graph Operations in SPFx

  • User profile & presence: Display the current user's details, manager chain, or colleagues' availability status. Permissions: User.Read, Presence.Read.All.
  • Teams integration: List the user's Teams, channels, and recent messages. Create Teams channels programmatically for new projects. Permissions: Team.ReadBasic.All, Channel.ReadBasic.All.
  • Planner tasks: Build project dashboards that display Planner tasks alongside SharePoint data. Permissions: Tasks.Read, Group.Read.All.
  • Mail and calendar: Show upcoming meetings or send notifications from within a SharePoint page. Permissions: Calendars.Read, Mail.Send.
  • Files across OneDrive & SharePoint: Build cross-site file aggregators using the /drive and /sites endpoints. Permissions: Files.Read.All, Sites.Read.All.

Teams Tabs and Personal Apps

SPFx web parts deploy to Microsoft Teams as tabs or personal apps with minimal code changes. This is one of the most powerful aspects of SPFx — build once, deploy to both SharePoint and Teams. Organizations using both platforms (which is virtually all enterprise Microsoft 365 customers) can serve users where they work without maintaining separate codebases. Our Teams governance guide covers the broader governance considerations.

Teams-Specific Considerations

  • Theme awareness: Teams has dark, light, and high-contrast themes. SPFx web parts in Teams must respect the Teams theme. Use the this.context.sdks.microsoftTeams.context.theme property and the Teams theme CSS variables to ensure readability across all themes.
  • Teams context: Access team ID, channel ID, and chat ID through the SPFx Teams context. Use these to scope data operations to the current team (e.g., show only this team's Planner tasks or this channel's SharePoint files).
  • SSO (Single Sign-On): SPFx handles Teams SSO automatically. The user is authenticated through the Teams client, and the SPFx context provides the token for Graph and SharePoint API calls without additional login prompts.
  • Responsive design: Teams tabs render in narrower viewports than SharePoint pages. Design web parts with responsive layouts that work from 360px (Teams mobile) to 1400px (SharePoint desktop). Use CSS Grid or Flexbox with breakpoints.

Viva Connections and Adaptive Card Extensions

Viva Connections is the employee experience gateway that surfaces in both the Teams desktop app and the Viva Connections mobile app. The dashboard is composed of Adaptive Card Extensions (ACEs) — lightweight, card-based components built with SPFx. ACEs are the future of employee-facing custom components in Microsoft 365.

  • Card View: The compact representation shown on the dashboard (title, icon, description, button). Renders as a standard Adaptive Card.
  • Quick View: The expanded, interactive view that opens when users click the card. Supports Adaptive Card templating with data binding, input fields, and action buttons.
  • Media Card template: Displays images or video thumbnails on the card surface for visual content (news, events, product updates).
  • Search Card template: Provides a search box directly on the dashboard for quick access to specific data (employee directory, knowledge base, ticket lookup).

Enterprise Deployment and ALM

Enterprise SPFx deployment requires a robust Application Lifecycle Management (ALM) process. Code moves from development through staging to production with automated builds, testing, and approval gates.

CI/CD Pipeline with Azure DevOps

  1. Build Pipeline: Triggered on pull request to main branch. Runs npm install, gulp build, gulp test (Jest unit tests), and gulp bundle --ship. Produces the .sppkg artifact. Fails the build on lint errors, test failures, or bundle size exceeding 500 KB.
  2. Release Pipeline - Dev: Automatically deploys .sppkg to the development site collection App Catalog. Runs integration tests against a development tenant. Notifies the development team via Teams webhook.
  3. Release Pipeline - Staging: Requires pull request approval. Deploys to the staging site collection App Catalog. Runs end-to-end tests using Playwright (validates web part rendering, property pane, data loading). Requires QA sign-off gate.
  4. Release Pipeline - Production: Requires release manager approval. Deploys to the tenant-level App Catalog. Enables the solution with the --skipFeatureDeployment flag if applicable. Sends deployment notification to the SharePoint governance team.

App Catalog Strategy

  • Tenant App Catalog: Use for solutions that should be available across all sites (global navigation, compliance banners, company-wide web parts). Requires SharePoint admin to deploy.
  • Site Collection App Catalogs: Use for department-specific solutions that should not appear tenant-wide. Enables decentralized deployment where site collection admins manage their own solutions. Useful for large enterprises with autonomous business units.

Performance Optimization

SPFx web parts load in the user's browser alongside the SharePoint page chrome and other web parts. Every kilobyte of JavaScript and every API call impacts page load time. Enterprise SharePoint intranet performance depends heavily on SPFx optimization.

  • Bundle size: Keep the shipped bundle under 100 KB for simple web parts and under 300 KB for complex ones. Use webpack-bundle-analyzer to identify large dependencies. Replace heavy libraries with lighter alternatives (date-fns instead of moment.js, preact instead of React for simple components).
  • Lazy loading: Use React.lazy and dynamic imports to load heavy components only when needed. A web part with tabs should only load the active tab's content — defer other tabs until the user clicks them.
  • API batching: Use PnPjs batching or Graph batching ($batch endpoint) to combine multiple API calls into a single HTTP request. A web part making 5 individual API calls can batch them into one round trip, reducing latency by 60-80%.
  • Client-side caching: Cache API responses in session storage or local storage with TTL (time-to-live). Data that changes infrequently (user profile, site navigation, reference data) should be cached for 15-60 minutes to eliminate redundant API calls.
  • Avoid synchronous initialization: Never make API calls in the web part constructor or onInit before calling super(). Use async patterns and render loading states while data fetches in the background.

SPFx Governance for Enterprise

Enterprise organizations need governance around SPFx development to prevent security risks, performance degradation, and maintenance burden. EPC Group establishes SPFx governance frameworks as part of our broader SharePoint governance practice.

  • API permission review: Every Graph API permission request must be reviewed by security before tenant admin approval. Document the business justification for each permission scope. Reject overly broad permissions (Directory.ReadWrite.All when Directory.Read.All suffices).
  • Code review standards: All SPFx code must pass peer review before deployment. Review checklist: no hardcoded URLs or IDs, proper error handling, accessibility compliance (WCAG 2.1 AA), TypeScript strict mode, no console.log in production builds.
  • Security scanning: Run npm audit and snyk test in the CI pipeline. Block deployments with high or critical vulnerabilities. Maintain a vulnerability response SLA (critical: 24 hours, high: 7 days).
  • Retirement policy: Define a lifecycle for every deployed SPFx solution. Solutions without active ownership or business justification must be decommissioned annually. Remove unused solutions from the App Catalog to reduce the attack surface and management overhead.

Partner with EPC Group

EPC Group has delivered over 300 SPFx development projects for enterprise organizations, from single-purpose web parts to comprehensive intranet solutions with dozens of custom components. Our SharePoint consulting team combines deep SPFx development expertise with enterprise governance and Microsoft 365 architecture knowledge to deliver solutions that are performant, secure, and maintainable at scale.

Schedule SPFx Development ConsultationSharePoint Consulting Services

Frequently Asked Questions

What is the SharePoint Framework (SPFx)?

The SharePoint Framework (SPFx) is Microsoft's official client-side development model for building customizations on SharePoint Online, Microsoft Teams, Microsoft Viva, and Microsoft 365. SPFx uses modern web technologies (TypeScript, React, Node.js) to create web parts, extensions, and Adaptive Card Extensions (ACEs) that run in the context of the SharePoint page. It replaced the legacy add-in model and is the only supported way to build custom UI components for SharePoint Online. SPFx solutions are packaged as .sppkg files and deployed through the SharePoint App Catalog.

What version of SPFx should I use in 2026?

As of 2026, SPFx 1.20+ is the current production version. It requires Node.js 18.x (LTS), uses TypeScript 4.7+, and supports React 17. Key features in recent releases include improved Microsoft Graph Toolkit integration, Adaptive Card Extensions v2 for Viva Connections, support for building Copilot plugins, and enhanced Teams app packaging. Always use the latest GA version of the SharePoint Framework Yeoman generator (@microsoft/generator-sharepoint) to scaffold new projects. Check the official SharePoint Framework release notes for version-specific features.

How long does it take to develop a custom SPFx web part?

Development timelines vary significantly based on complexity. A simple web part (data display from a SharePoint list with filtering) takes 2-4 weeks including testing and deployment. A medium-complexity web part (Microsoft Graph integration, custom forms, conditional logic) takes 4-8 weeks. Complex web parts (multi-API integration, real-time data, custom caching, offline support) take 8-16 weeks. Enterprise projects with multiple web parts, an extension suite, and Viva Connections dashboard integrations typically span 3-6 months. EPC Group has delivered over 300 SPFx projects with our structured development framework.

Can SPFx web parts be used in Microsoft Teams?

Yes. SPFx web parts can be exposed as Teams tabs, personal apps, and messaging extensions with minimal additional configuration. When scaffolding an SPFx project, select "Is the solution designed for Teams?" to include the Teams manifest. The web part renders inside the Teams client using the same code, with access to the Teams context (team ID, channel ID, theme) through the SPFx Teams context API. This allows organizations to build once and deploy to both SharePoint and Teams, reducing development and maintenance costs by 40-60%.

What is the difference between SPFx web parts and extensions?

SPFx web parts are visual components that render in designated web part zones on SharePoint pages. Users add them from the web part toolbox and configure properties through the property pane. SPFx extensions modify the page outside of web part zones: Application Customizers inject scripts and render placeholders in the header/footer, Field Customizers modify how list fields display in views, ListView Command Sets add custom buttons to list/library command bars, and Form Customizers replace default list forms. Extensions are deployed tenant-wide or scoped to specific sites/lists.

How do I integrate Microsoft Graph API in SPFx?

SPFx provides built-in Microsoft Graph access through the MSGraphClientV3 factory. Request the MSGraphClientV3 in your web part, then call Graph endpoints with the user's delegated permissions. For permission scopes beyond the default (User.Read, Sites.Read.All), add API permission requests in the package-solution.json file — these require tenant admin approval through the SharePoint Admin Center API Access page. For complex Graph scenarios, use the Microsoft Graph Toolkit (MGT) React components which provide pre-built UI for people pickers, file browsers, Teams channel pickers, and more.

What are Adaptive Card Extensions (ACEs) in SPFx?

Adaptive Card Extensions are SPFx components designed specifically for the Viva Connections dashboard and mobile app. ACEs render as cards using the Adaptive Card format and support Quick Views for interactive experiences. They are ideal for at-a-glance information (PTO balances, expense approvals, task counts) and simple actions (approve/reject, acknowledge, navigate). ACEs use significantly less code than full web parts and run on both desktop and mobile Viva Connections. Organizations using Viva Connections should prioritize ACEs for dashboard scenarios instead of building full web parts.