microsoftgraph / microsoftgraph/msgraph-sdk-powershell

Microsoft.Graph.Authentication is very large. How can we slim it down?

Open
#3,347 3 comments 0 reactions 1 assignee View on GitHub

@ramsessanchez is already working on this.

Since Nov 10, 2025.

type:feature
Dominant language
C#
Stars
898
Forks
230
Avg merge
2d 5h
Merged PRs (30d)
31

Description

Is your feature request related to a problem? Please describe the problem.

Follow-up of #3345.

All of Microsoft.Graph.* depends on Microsoft.Graph.Authentication, weighing in at a whopping 42.1 MB on-disk with version 2.28.

Serverless environments frequently limit customers' space to deploy dependencies in. The PowerShell runtime+MS.Graph.Authentication is over 200MB of dependencies without having written any code, which poses several challenges for hosting/deployment.

There's been a lot of good discourse about the size of this SDK over the years (#692 #2475 #2516) - these have focused on either:

  • The total size of the SDK, across all modules
    • (MSGraph isn't that much bigger than AWS.Tools or Az)
  • Individual modules hitting landmark size limits
    • (Not everyone uses those specific modules)

Even outside those two scenarios, module size is still a problem.

Comparing 3 separate auto-generated families of PowerShell modules:

Metric Az AWS.Tools Microsoft.Graph
Total Module Count 93 410 47
Total Installed Size1 514 737 1060
Median Module Size 3.1 1.2 9.5
Core2 Module Size 28.6 16.7 42.1
Core : Total Module Size 5.6% 2.3% 3.9%
"Average" Install3 Size 31.7 17.9 51.6

1: All sizes in MB
2: Az.Accounts, AWS.Tools.Common, Microsoft.Graph.Authentication
3: Core module, plus single non-core (represented by median)

One "average" MSGraph module (with dependencies) is ~30% the size of the entire PowerShell Runtime on Linux. (~172MB)

Currently, Microsoft.Graph.Authentication has ~25MB of JSON used for Find-MgGraphCommand and Find-MgGraphPermission. These cmdlets appear to be for human-focused discovery/investigation and not required for authentication/API calls. Moving these off the critical dependency-path could save a ton of space for non-interactive scenarios.

Describe the solution you'd like.

TL;DR: Reduce .Authentication footprint to strict requirements for Invoke-MgGraphRequest or the other Microsoft.Graph.* modules. Move Find-MgGraph* to a separate module for interactive discovery.

Some options (neither exhaustive nor mutually exclusive) for making this work could look like:

  • Move Find-MgGraphCommand and Find-MgGraphPermission to a separate module and add the module as a dependency of Microsoft.Graph.
  • Replace Find-MgGraphCommand and Find-MgGraphPermission in Microsoft.Graph.Authentication with stubs to call corresponding commands in Microsoft.Graph.CommandDiscovery, without setting explicit dependency relationships.
  • De-couple Find-MgGraph* entirely from the rest of .Authentication.
    • Split Microsoft.Graph.Authentication into two modules (.Common and .CommandDiscovery, perhaps)
    • Update .Authentication depend on .Common and .CommandDiscovery
    • Update other child modules to depend on .Common
Additional context?

No response

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.