A comprehensive DevHub management tool for visualizing, monitoring, and managing Salesforce Second-Generation (2GP), Unlocked, and First-Generation (1GP) packages.
AppExchange Listing • Configuration Guide
- What is Package Visualizer?
- Key Features
- Who Should Use This?
- Screenshots
- Installation
- Quick Start
- Feature Deep Dive
- Integrations
- Technical Architecture
- Configuration
- Security & Permissions
- Troubleshooting
- FAQ
- Changelog
- Contributing
- Support
Package Visualizer is a managed package for Salesforce DevHub organizations that provides ISV partners, package developers, and DevHub administrators with powerful tools to:
- 📦 Browse and visualize all 2GP (Second-Generation), Unlocked, and 1GP (First-Generation) packages
- 🌳 Visualize version trees with interactive D3.js-powered dependency graphs
- 👥 Monitor subscriber organizations with advanced filtering and analytics
- 🚀 Orchestrate push upgrades across your subscriber base
- 📊 Analyze adoption metrics with integrated AppAnalytics
- 🔐 Manage licenses via License Management App (LMA) integration
- 🤖 Generate AI prompts with Agentforce integration
- 🔧 Create scratch orgs and trials directly from the interface
Managing packages at scale is complex. Package Visualizer consolidates data from multiple Salesforce APIs (Tooling API, REST API, LMA, AppAnalytics, Trust API) into a unified, intuitive interface that saves hours of manual work.
| Without Package Visualizer | With Package Visualizer |
|---|---|
| Manually query Tooling API | Visual dashboard with real-time data |
| Export data to spreadsheets | Interactive charts and filters |
| Track subscribers across systems | Centralized subscriber management |
| Coordinate push upgrades via CLI | One-click push upgrades with monitoring |
| No visibility into adoption metrics | Integrated AppAnalytics and trends |
- Unified Package Browser - View all 2GP (Managed & Unlocked) and 1GP packages in one place
- Version Tracking - Browse package versions with filtering by major/minor/patch version
- Version Tree Visualization - D3.js-powered interactive tree showing version ancestry and dependencies
- Code Coverage Display - View test coverage percentage for each package version
- Install URL Generation - Quick copy for package installation links
- Security Review Status - Track AppExchange security review approval status
- Subscriber List View - Comprehensive table of all subscriber organizations
- Advanced Filtering - Filter by org type (production, sandbox, scratch), status, instance, version
- Subscriber Details - Deep dive into individual org configuration and metadata
- Org Analytics Charts - Visual breakdown by org type, region, instance, status
- Sandbox Tracking (New in v8.5) - Track sandbox environments per subscriber organization
- Export Capabilities - Download subscriber lists for offline analysis
- Visual Push Job Management - Track all PackagePushRequests and PackagePushJobs
- Eligibility Checking - Automatically identify orgs eligible for upgrade based on version and status
- Version Selection - Choose target version with visual comparison
- Scheduled Upgrades - Schedule push upgrades for future execution
- Job Monitoring - Real-time status tracking with charts (Pending, In Progress, Succeeded, Failed)
- Error Analysis - View detailed error messages for failed push attempts
- History Timeline - Complete audit trail of all push activities
- AppAnalytics Integration - Submit and retrieve AppAnalytics query requests
- Custom Data Requests - Query adoption analytics, feature usage, and performance metrics
- Chart Visualizations - Interactive charts for subscriber distribution, version adoption
- Trend Analysis - Track package adoption and usage patterns over time
- Download Reports - Export AppAnalytics data for deeper analysis
- LMA Package Sync - Automatic detection of LMA packages in your org
- License List View - Browse all licenses with filtering by status, type, expiration
- License Details - View associated Account, Contact, Lead, and seat usage
- License Modification - Update expiration dates, seats, and status directly
- License History Timeline - Track all changes to license records
- Subscriber-to-License Mapping - Link PackageSubscriber records to LMA Licenses
- Scratch Org Creation - Build scratch org definition files visually with the interactive builder
- SignupRequest Management - Create demo trials and track signup requests
- Org Limits Dashboard - Monitor API limits, DML limits, and other org resources
- Trust Status Integration - Check instance status via Salesforce Trust API
- Environment Hub Integration - Link to Environment Hub for connected orgs
- Prompt Template Generator - Generate prompts using Salesforce Models API
- Multi-Model Support - Azure OpenAI (GPT-5), Amazon Bedrock (Claude 4 Sonnet, Nova), Google Vertex AI (Gemini 2.5)
- Contextual Prompts - Pre-built templates for common package management scenarios
- Custom Prompts - Create and save your own prompt templates
- Setup Assistant - Step-by-step configuration wizard for first-time setup
- In-App Guidance - Contextual walkthroughs for key features
- Resource Library - Curated links to documentation, videos, and community resources
- Announcement Banner - Stay updated with new features and best practices
- Welcome Mat - Onboarding experience for new users
Use Cases:
- Monitor subscriber health across your install base
- Coordinate push upgrades to deploy patches and new features
- Analyze adoption metrics via AppAnalytics
- Manage LMA licenses and track seat usage
- Identify orgs on outdated versions requiring upgrades
Use Cases:
- Visualize package version dependencies and ancestry
- Track code coverage across versions
- Test package installation in scratch orgs
- Verify security review status before AppExchange submission
- Generate install URLs for testing and distribution
Use Cases:
- Monitor all 2GP and 1GP packages in your DevHub
- Track scratch org usage and limits
- Create demo trials for sales and partner enablement
- Manage SignupRequests and Environment Hub connections
- Audit package creation and version history
Use Cases:
- Plan and execute push upgrade campaigns
- Track upgrade success rates and failure patterns
- Coordinate major version rollouts
- Manage subscriber communication during upgrades
- Generate reports for stakeholders
Note: The following are descriptions of key interfaces. Screenshots should be captured during actual usage.
Browse all 2GP and 1GP packages with a split-panel detail view. The left panel shows the package list with filtering options, while the right panel displays detailed information including versions, subscribers, and push upgrade status.
Interactive D3.js visualization of package version ancestry showing the relationship between versions, their release status (released, beta, deprecated), and branching structure.
Filter and analyze subscriber organizations with advanced search, filtering by org type/status/instance, and visual analytics charts showing distribution across regions and versions.
Track push jobs with real-time status monitoring, error analysis, and charts showing success/failure rates across your subscriber base.
Submit AppAnalytics data requests for adoption metrics, configure data types and date ranges, and download results when processing is complete.
Generate AI prompts with multiple LLM models including GPT-5, Claude 4 Sonnet, and Gemini 2.5. Select from pre-built templates or create custom prompts.
Quick access panel at the bottom of the screen providing instant visibility into org limits, resources, AppAnalytics requests, and announcements.
- Salesforce DevHub Organization - Developer Edition, Partner Developer Edition, or Production org with DevHub enabled
- System Administrator Profile - Or equivalent permissions to install managed packages
- Tooling API Access - Enabled by default in most orgs
- Visit the AppExchange Listing
- Click "Get It Now"
- Choose your DevHub org for installation
- Select "Install for Admins Only" or "Install for All Users" based on your needs
- Grant access to external sites when prompted (required for Tooling API calls)
- Complete the installation wizard
For direct installation, use these URLs:
Production/Developer Edition:
https://login.salesforce.com/packaging/installPackage.apexp?p0=04tRh000001S9J7IAK
Sandbox:
https://test.salesforce.com/packaging/installPackage.apexp?p0=04tRh000001S9J7IAK
-
Assign Permission Set
- Navigate to Setup → Permission Sets
- Assign "Package_VisualizerPS" permission set to users who need access
-
Configure Remote Site Settings
- Navigate to Setup → Remote Site Settings
- Verify that the remote site for your instance domain is active
-
Review Custom Metadata
- Navigate to Setup → Custom Metadata Types
- Optionally customize Package_Visualizer_Resource__mdt and Package_Visualizer_Announcement__mdt records
-
Run Setup Assistant
- Open the Package Visualizer app from the App Launcher
- Complete the guided setup wizard
-
Enable Optional Integrations
- Install LMA (License Management App) if managing licenses
- Configure AppAnalytics if tracking adoption metrics
- Enable Environment Hub if provisioning connected orgs
After installation, navigate to the Package Visualizer app from the App Launcher. You should see:
- List of all 2GP packages in your DevHub
- Package version counts
- Setup Assistant (if first-time setup)
- Open the Package Visualizer app from App Launcher
- View the list of all 2GP packages in your DevHub
- Click any package to see details in the split-view panel
- Toggle between "2GP and Unlocked Packages" and "First Generation Packages" using the dropdown
- From the package details panel, click the "Versions" tab
- Browse all versions with filtering options
- Click "View Version Tree" to see the interactive ancestry visualization
- Hover over nodes to see version details, drag nodes to reposition
- Click the "Subscribers" tab in the package details panel
- View all orgs with your package installed
- Use filters to segment by org type, version, or status
- Click the charts icon to see visual analytics
- Navigate to the "Push Upgrades" tab
- Click "Create Push Request" for eligible subscribers
- Select target version
- Schedule for future execution or execute immediately
- Track progress in the "Push Jobs" view
- Click the utility bar at the bottom of the screen
- Limits - Check your org's API and resource limits
- Resources - Access curated documentation and videos
- AppAnalytics - Submit data requests (if enabled)
Finding Orgs on Old Versions
- Click on your package
- Go to "Subscribers" tab
- Sort by "Version" column (ascending)
- Identify orgs needing upgrades
- Use bulk push upgrade if many orgs need updating
Creating a Push Upgrade Campaign
- Navigate to "Push Upgrades" tab
- Filter subscribers eligible for upgrade
- Select target version
- Review eligibility requirements (active orgs, released version)
- Schedule push for off-peak hours
- Monitor job status and errors in real-time
Analyzing Package Adoption
- Click "Subscribers" tab
- Click charts icon to view analytics
- Review distribution by:
- Org Type (Production vs Sandbox)
- Region/Instance
- Version Adoption
- Org Status (Active vs Inactive)
- Export data for deeper analysis in Excel or BI tools
The D3.js-powered version tree shows:
- Nodes - Each package version represented as a circle
- Edges - Ancestry relationships (based on AncestorId field)
- Colors - Released (green), Beta (yellow), Deprecated (red)
- Interactions - Click to view details, drag to reposition, hover for tooltips
Use Cases:
- Visualize branching strategy for parallel development
- Identify version lineage and ancestry chains
- Plan upgrade paths for subscribers
- Document release history visually
Advanced filters available:
- Version Range - Major.Minor (minimum and maximum)
- Release Status - Released, Beta, Deprecated
- Date Range - Filter by CreatedDate
- Branch - Filter by branch name
- Tag - Filter by version tag
Each version shows:
- Overall code coverage percentage
- HasPassedCodeCoverageCheck indicator (75% minimum for managed packages)
- Drill-down to class-level coverage (requires additional query)
Clicking a subscriber org reveals:
- Org Information - Name, OrgKey (15-character ID), Type, Status
- Installation Details - Version installed, install date, package metadata
- Instance Information - Instance name (e.g., NA173), region
- Parent Org - For sandboxes, link to parent production org
- Actions - Push upgrade, view history, export details
Complex filters include:
- Org Type - Production, Sandbox, Scratch, Trial, Demo
- Org Status - Active, Inactive, Free, Trial
- Version - Specific version or version range
- Instance - Specific Salesforce instance (e.g., NA173, CS42)
- Date Range - Filter by SystemModstamp
Track sandbox environments associated with subscriber orgs:
- Link production orgs to their sandboxes
- Track sandbox refresh dates
- Monitor sandbox-specific version installations
Orgs are eligible for push upgrades if:
- Currently on a lower released version than target
- Org status is Active (not Inactive or Trial)
- No pending push jobs for that org
- Target version is Released (not Beta)
- Org type is Production or Developer Edition (not scratch org)
- Single Org Push - From subscriber detail, click "Push Upgrade"
- Bulk Push - Select multiple orgs, choose "Bulk Push Upgrade"
- Version Selection - Choose target version (must be higher than current)
- Scheduling - Set ScheduledStartTime or execute immediately
- Confirmation - Review org count and version details before submitting
Track via PackagePushJob records:
- Status - Pending, In Progress, Succeeded, Failed, Canceled
- Progress - Percentage complete and duration
- Error Messages - Detailed failure reasons for troubleshooting
- Retry Options - Re-push failed orgs with fixes
Visualize push campaigns with:
- Success rate pie chart
- Status distribution bar chart
- Timeline of job execution
- Failure analysis by error code
- Navigate to utility bar → "AppAnalytics Requests"
- Click "New Request"
- Configure request:
- Data Type - AiaaMetrics, AiaaRatings, AiaaUsageMetrics, etc.
- Date Range - Start and End DateTime
- Package - Your package ID (auto-populated)
- Organization IDs - Optional filter for specific orgs
- File Type - CSV, JSON, XML
- Compression - GZIP, ZIP, None
- Submit request and monitor RequestState (Queued, Processing, Complete)
- Download results when RequestState = Complete
- AiaaMetrics - General adoption metrics and usage statistics
- AiaaRatings - AppExchange ratings and review data
- AiaaUsageMetrics - Feature usage tracking and engagement
- AiaaLwcPerformance - LWC component performance metrics
- AiaaErrorEvents - Error logging and exception data
- License Management App (LMA) installed in your DevHub
- LMA Package created and linked to your 2GP package
- License List - View all
sfLma__License__crecords with filtering - Filtering - By status (Active, Suspended, Trial), type, expiration date
- License Details - Account/Contact/Lead associations, seats, usage
- Modifications - Update license status, seats, expiration date directly
- License History Timeline - Track all changes via
sfLma__License__History
Map PackageSubscriber records to LMA Licenses using:
- OrgKey (15-character org ID) matches License lookup field
- Automatic linkage when org IDs match between systems
- Azure OpenAI - GPT-5, GPT-5 Mini, GPT-4.1, GPT-4.1 Mini
- Amazon Bedrock - Claude 4 Sonnet, Claude 3.7 Sonnet, Claude 3 Haiku, Amazon Nova Pro, Amazon Nova Lite
- Google Vertex AI - Gemini 2.5 Flash, Gemini 2.5 Flash Lite
- Select a template from dropdown (or create custom)
- Choose your preferred AI model
- Provide input context (e.g., package name, subscriber count, feature details)
- Click "Generate Prompt"
- Review AI-generated response
- Copy or refine prompt for your use case
- Generate release notes from version changelog
- Create subscriber communication templates for upgrades
- Analyze error patterns from push jobs
- Draft AppExchange listing descriptions
- Create documentation and help text
Visual builder for project-scratch-def.json:
- Select edition (Developer, Enterprise, Unlimited, etc.)
- Configure features and settings checkboxes
- Add metadata expressions for custom configuration
- Preview JSON output in real-time
- Copy or download file for use with Salesforce CLI
Create demo trials for:
- Sales demonstrations
- Partner enablement
- Training environments
- POC (Proof of Concept) environments
Requires: SignupRequest API enabled in Partner Business Org (PBO)
Configurable Fields:
- Edition - Developer, Enterprise, Unlimited, Performance, etc.
- Trial Days - 1-30 days
- Template - Optional org template ID
- User Info - First name, last name, email, username
- Subdomain - MyDomain for the trial org
- Connect to EnvHub - Auto-link to Environment Hub
Package Visualizer integrates with multiple Salesforce platform services:
Purpose: Query package metadata and subscriber information
Objects Used:
Package2- 2GP package metadataPackage2Version- 2GP version detailsMetadataPackage- 1GP package metadataMetadataPackageVersion- 1GP version detailsPackageSubscriber- Subscriber org informationPackagePushJob- Push upgrade job statusPackagePushRequest- Push upgrade requestsSignupRequest- Trial org creation
Configuration: Uses Visualforce page to extract session ID (included in package)
Purpose: Retrieve adoption and usage metrics for managed packages
Objects Used:
AppAnalyticsQueryRequest- Submit and track data requests
Prerequisites:
- Managed package with analytics enabled
- AppAnalyticsEnabled = true on Package2 record
Data Available:
- Feature adoption rates and usage patterns
- Error and performance metrics
- Custom event tracking
- User behavior analytics
Purpose: Manage licenses for AppExchange managed packages
Objects Used:
sfLma__License__c- License records with status, seats, expirationsfLma__Package__c- LMA package configurationsfLma__Package_Version__c- LMA version metadata
Prerequisites:
- LMA package installed in DevHub
- LMA Package created and linked to 2GP package
Capabilities:
- View all licenses with filtering by status, type, expiration
- Update license status, seats, and expiration dates
- Track license history and audit trail
- Link subscribers to licenses via OrgKey matching
Purpose: Feature flag management for packages
Objects Used:
sfFma__FeatureParameter__c- Feature flags and parameters
Detection: Automatically detected if FMA is installed in the org
Purpose: AI-powered prompt generation
Models Supported:
- Azure OpenAI - GPT-5, GPT-4.1 and variants
- Amazon Bedrock - Claude 4 Sonnet, Amazon Nova
- Google Vertex AI - Gemini 2.5 Flash
Configuration:
- Models API must be enabled in org
- Named credentials configured for external models
Purpose: Check Salesforce instance status and availability
Endpoint: https://api.status.salesforce.com/v1/instances/{instance}/status
Use Case: Display trust status for subscriber org instances (e.g., NA173, CS42)
Purpose: Centralized management of connected orgs
Integration: Link SignupRequest trials to Environment Hub automatically
Prerequisites: Environment Hub enabled in Partner Business Org
Purpose: Monitor org resource consumption
Metrics Tracked:
- API calls remaining (daily and concurrent)
- DML statements
- SOQL queries
- Email invocations
- Data and file storage
Displayed In: Docked utility bar "Limits" panel
Package Visualizer is built with modern Lightning Web Components and secure Apex controllers following Salesforce platform best practices.
- 103 Lightning Web Components (LWC)
- 13 Apex Classes
- 3 Permission Sets
- 5 Custom Metadata Types
- 7 Lightning Message Channels
- Namespace:
pkgviz - API Version: 65.0
Core Package Components:
packageVisualizer- Main app entry point and containerpackageSplitView- Split-panel layout manager with responsive designpackageListView- Package list table with sorting and filteringpackageDetailsView- Package detail panel with inline editingpackageHeader- Package info header with actionspackageIcon- Custom package icon renderer
Version Management:
packageVersionsView- Version list table with multi-view supportpackageVersionDetails- Version detail panelpackage1VersionsView- 1GP version tabled3TreeChart- D3.js version tree visualization with interactive nodes
Subscriber Management:
packageSubscribersView- Subscriber list table with advanced filteringpackageSubscriberDetail- Individual subscriber detail viewpackageVersionSubscriberList- Subscribers by versionsubscribersChartsPanel- Analytics charts for subscriberspackageSubscriberSandboxesView- Sandbox tracking (new in 8.5)
Push Upgrades:
packagePushUpgradesView- Push upgrade dashboardpackagePushJobView- Job monitoring table with real-time updatespackagePushJobDetail- Job detail view with error analysispackagePushJobChartsPanel- Push analytics chartspackagePushUpgradesVersionModal- Version selection modalpackagePushUpgradesConfirmationModal- Confirmation dialog
LMA Integration:
packageLmaView- License list tablepackageLicenseSubscriberCard- License card componentpackageLmaTimeline- License history timeline
Utilities:
dockedUtilityBar- Bottom utility bar with quick access featuresdockedLimitsBar- Limits display panelcreateSignupOrg- SignupRequest formscratchDefFileBuildCard- Scratch definition builder
AI/Agentforce:
agentforcePromptGenerator- Prompt generation interfacegenAiResponseCard- AI response display
PackageVisualizerCtrl.cls (Main Controller)
- 40+
@AuraEnabledmethods for LWC data requests - Handles all package, version, subscriber, and push upgrade queries
- Delegates to interface classes for API calls
- Implements
with sharingfor security compliance
Key Methods:
@AuraEnabled(continuation=true)
public static List<ObjectWrappers.PackageWrapper> get2GPPackageList(String sortDirection)
@AuraEnabled(cacheable=true)
public static List<ObjectWrappers.PackageVersionWrapper> get2GPPackageVersionList(String packageId)
@AuraEnabled(cacheable=true)
public static List<ObjectWrappers.PackageSubscriberWrapper> get2GPPackageVersionSubscriberList(String versionId)
@AuraEnabled(continuation=true)
public static String createSignupTrial(Map<String, String> signupFields)Package2Interface.cls (Core Business Logic)
- Fetches package data via Tooling API v61.0
- Supports both 2GP (Package2) and 1GP (MetadataPackage)
- Dynamic query building with WHERE clauses and pagination
- Feature detection for optional components
PushUpgradesInterface.cls (Push Upgrade Logic)
- Manages PackagePushRequest and PackagePushJob operations
- Uses REST API for creating and updating push requests
- Implements batch processing for large subscriber lists (200 limit per batch)
- Uses
@future(callout=true)for async processing
LimitsController.cls (Org Limits)
- Calls Limits API to retrieve org resource statistics
- Returns API calls, DML statements, SOQL queries, storage usage
DemoTrialsController.cls (Trial Org Creation)
- Creates SignupRequest objects for demo trials
- Uses ConnectApi.ManagedContent for CMS content retrieval
2GP Objects:
Package2- Package metadata (Name, Namespace, SubscriberPackageId, IsDeprecated)Package2Version- Version details (MajorVersion, MinorVersion, PatchVersion, BuildNumber, CodeCoverage, IsReleased)
1GP Objects:
MetadataPackage- Package metadataMetadataPackageVersion- Version details
Subscriber Objects:
PackageSubscriber- Subscriber org info (OrgKey, OrgName, OrgType, OrgStatus, InstanceName)
Push Upgrade Objects:
PackagePushRequest- Push request metadata (PackageVersionId, ScheduledStartTime, Status)PackagePushJob- Individual push job (SubscriberOrganizationKey, Status, DurationSeconds, PackagePushErrors)
Other Objects:
SignupRequest- Trial org creationAppAnalyticsQueryRequest- Analytics data requestsInstalledSubscriberPackage- Installed package detection
Data Access Control:
- Uses
Security.stripInaccessible(AccessType.READABLE, ...)for field-level security - Uses
WITH USER_MODEandWITH SECURITY_ENFORCEDin SOQL queries where applicable with sharingkeyword on most classes for org-wide sharing rules compliancewithout sharingon DemoTrialsController (requires elevated privileges for signup)
Input Sanitization:
- Heavy use of
String.escapeSingleQuotes()to prevent SOQL injection - Dynamic query building with parameter escaping
- Validation of user inputs before processing
API Patterns:
- Continuation Pattern -
@AuraEnabled(continuation=true)for long-running callouts - Caching Strategy -
@AuraEnabled(cacheable=true)for frequently accessed metadata - Pagination - LIMIT/OFFSET pattern for all list queries (default limits 50-500 range)
Package_Visualizer_Resource__mdt
- Purpose: Configuration for help resources and documentation links
- Fields: Label, Icon__c, Link__c, Description__c, Visibility__c
- Usage: Displayed in docked utility bar "Resources" panel
Package_Visualizer_Announcement__mdt
- Purpose: In-app announcement messaging for new features
- Fields: Label, Icon__c, Order__c, Link__c, Description__c, Visibility__c
- Usage: Displayed in announcement banner
In_App_Prompt__mdt
- Purpose: Contextual help prompts for features
- Fields: Title__c, Prompt_Popover_Location__c, Learn_More_Link__c, Description__c, Brand_Button_URL__c, Brand_Button_Label__c, Visibility__c
- Usage: In-app guidance system
In_App_Guidance_Walkthrough__mdt
- Purpose: Guided walkthroughs for users
- Fields: Title__c, Order__c, Description__c, Link__c, Visible__c
About_Welcome_Mat_Step__mdt
- Purpose: Welcome/onboarding steps for new users
- Fields: Label, Icon__c, Order__c, Description__c, Link__c, Visibility__c
Package_Visualizer_Setting__mdt
- Purpose: Feature toggles and configuration flags for Package Visualizer
- Fields: Label, Enabled__c (Checkbox, Subscriber Editable)
- Records:
Use_Named_Credentials- When enabled, API callouts use thePkgViz_DevHub_APINamed Credential instead of the legacy Visualforce session pattern. Defaults tofalse(legacy pattern active). Requires one-time post-install setup — see Named Credentials Setup.
Package Visualizer includes an optional Named Credentials path for modern OAuth 2.0-based same-org API authentication. This provides an alternative to the legacy Visualforce session pattern (SessionCreator.page) with platform-managed token handling and least-privilege scoping.
Default behavior: Named Credentials are disabled out of the box. The legacy VF session pattern is active by default and requires no setup. Named Credentials are an opt-in upgrade for orgs that restrict Visualforce access, require stricter OAuth scoping, or are Lightning-only.
Why post-install setup is required: Due to Salesforce 2GP packaging constraints, External Auth Identity Provider credentials (OAuth client ID/secret) are stripped during package installation. The setup wizard automates the credential wiring after install.
- Navigate to the Package Visualizer app
- Open the Named Credential Setup component
- Click Configure Credentials — this wires the installed External Client App's OAuth credentials to the External Auth Identity Provider
- Click Authenticate — complete the OAuth authorization flow in the browser popup
- Click Enable — this flips the Named Credentials toggle on
- Click Test Connection — verifies end-to-end callout connectivity
If any step fails, the wizard provides diagnostic information and the app continues to work normally on the VF session pattern.
If you prefer manual configuration or the setup wizard encounters issues:
Step 1: Set the Named Credential URL
- Go to Setup > Named Credentials
- Find PkgViz DevHub API and click Edit
- Set the URL to your org's My Domain:
https://YOUR-ORG.my.salesforce.com - Click Save
Step 2: Wire External Auth Identity Provider Credentials
- Go to Setup > External Client App Manager
- Find Package Visualizer API and open its OAuth Settings
- Copy the Consumer Key and Consumer Secret
- Go to Setup > Named Credentials > External Credentials tab
- Find PkgViz DevHub and click its name
- Under the linked External Auth Identity Provider, populate the Client ID (Consumer Key) and Client Secret (Consumer Secret)
Step 3: Authenticate the External Credential
- On the PkgViz DevHub External Credential page
- Under Principals, find PkgViz_NamedPrincipal and click the action menu > Authenticate
- Complete the OAuth authorization flow in the browser popup
- Verify the status shows Authenticated
Step 4: Verify Permission Set Assignment
- Go to Setup > Permission Sets
- Find Package Visualizer Permission and verify it includes:
- External Credential Principal Access for
PkgViz_DevHub - PkgViz_NamedPrincipal
- External Credential Principal Access for
- Ensure all Package Visualizer users are assigned this permission set
Step 5: Enable Named Credentials
- Go to Setup > Custom Metadata Types
- Find Package Visualizer Setting and click Manage Records
- Edit the Use Named Credentials record
- Check the Enabled checkbox
- Click Save
Step 6: Verify
- Navigate to the Package Visualizer app
- Load the package list — it should display packages from your DevHub
- If errors occur, uncheck the Enabled flag in Step 5 to revert to the legacy session pattern, then review the External Credential authentication status in Step 3
PackageMessageChannel- Package selection and navigation eventsPackageEditMessageChannel- Package editing mode triggersD3MessageChannel- Tree chart control signalsDockedUtilityBarMessageChannel- Utility bar communicationsCreateOrgMessageChannel- Org creation eventsSignupListMessageChannel- Signup list eventsCreateSampleScratchOrgTemplateMessageChannel- Scratch org template events
- System Administrator profile or equivalent
- Tooling API access (enabled by default)
- Remote Site Settings access for external APIs
- Package_Visualizer_Core - Core access to the package visualizer app
- Package_Visualizer_Push_Upgrade - Ability to create and manage push upgrade requests
- Package_VisualizerPS - Grants access to all Package Visualizer features including custom permissions, and External Credential access for the
PkgViz_DevHubNamed Principal when Named Credentials are enabled
- Field-Level Security - Uses
Security.stripInaccessible()for all queries - Sharing Rules - Respects org-wide sharing with
with sharingkeyword - SOQL Injection Prevention - All user inputs are escaped with
String.escapeSingleQuotes()
Problem: "Unable to retrieve session ID" error Solution:
- Verify that the Visualforce page (SessionCreator) is accessible
- Check user profile has "API Enabled" permission
- Clear browser cache and retry
Problem: "Insufficient access rights" when querying packages Solution:
- Verify user has System Administrator profile or equivalent
- Check that DevHub is enabled in the org (Setup → Dev Hub)
- Verify Tooling API access is enabled
Problem: Push jobs fail with "Invalid version" error Solution:
- Verify target version is Released (not Beta)
- Ensure subscriber org is on a lower version than target
- Check that org status is Active (not Inactive or Trial)
Problem: "Invalid package ID" when submitting AppAnalytics request Solution:
- Verify package has AppAnalyticsEnabled = true
- Check that package is a managed package (not unlocked)
- Ensure Package2 record has SubscriberPackageId populated
Problem: LMA licenses not showing up Solution:
- Verify LMA package is installed in DevHub
- Check that LMA Package is created and linked to 2GP package
- Ensure user has access to sfLma__License__c object
- Enable Debug Logs - Set up debug logs in Setup for detailed error traces
- Check Browser Console - Look for JavaScript errors in browser developer tools
- Review Apex Limits - Monitor governor limits in debug logs
- Test in Sandbox - Always test changes in sandbox before production
Q: What's the difference between 2GP and 1GP? A: Second-Generation Packages (2GP) are the modern packaging format supporting unlocked and managed packages with version control integration. First-Generation Packages (1GP) are the legacy format, now called "Unmanaged Packages."
Q: Can I use Package Visualizer in a production org? A: Package Visualizer is designed for DevHub organizations only. It queries package metadata that is only available in DevHub orgs, not regular production or sandbox orgs.
Q: Does Package Visualizer work with unmanaged packages? A: Package Visualizer supports 1GP (First-Generation) packages which includes unmanaged packages, but the features are limited compared to 2GP managed packages.
Q: Can I schedule push upgrades for a specific date/time? A: Yes, when creating a push request, you can set the ScheduledStartTime field to schedule the upgrade for future execution.
Q: How many orgs can I push upgrade at once? A: Package Visualizer supports bulk push upgrades with batches of up to 200 subscribers per request. For larger campaigns, create multiple push requests.
Q: Does AppAnalytics work with unlocked packages? A: No, AppAnalytics is only available for managed 2GP packages. Unlocked packages do not support AppAnalytics at this time.
Q: Can I customize the version tree visualization? A: The D3.js tree is interactive (drag nodes, click for details) but the core visualization is not customizable. You can filter versions to focus on specific branches or releases.
Q: What APIs does Package Visualizer use? A: Package Visualizer uses Tooling API, REST API, Limits API, Trust API, and integrates with LMA, AppAnalytics, and Salesforce Models API (Agentforce). Authentication uses the Visualforce session pattern by default (works out of the box). Optionally, admins can enable Named Credentials (OAuth 2.0) for stricter security scoping — this requires one-time post-install setup. See Named Credentials Setup.
Q: Can I extend Package Visualizer with custom features? A: Package Visualizer is a managed package, so you cannot modify the packaged components. However, you can create custom LWC components that integrate with Package Visualizer using Lightning Message Service.
Q: Does Package Visualizer support API-only integrations?
A: Package Visualizer is primarily a UI-based tool. For API-only package management, use the Salesforce CLI (sf package) and Tooling API directly.
Package Visualizer has evolved through 170+ versions from v4.24 to v8.5.0. Key milestones:
- v8.5.0 (Current) - Added sandbox tracking for subscriber orgs
- v8.0.0 - Major UI refresh and Agentforce integration
- v7.0.0 - Enhanced push upgrade orchestration
- v6.0.0 - AppAnalytics integration
- v5.0.0 - LMA integration and license management
- v4.24.0 - Initial public release
For detailed version history, see the Configuration Guide.
Package Visualizer is a managed package developed and maintained by the core team. If you have feature requests, bug reports, or suggestions:
- Visit the AppExchange Listing
- Submit feedback via the AppExchange review system
- Contact support via the channels listed below
- Configuration Guide - Salesforce Quip Guide
- AppExchange Listing - Package Visualizer on AppExchange
- In-App Resources - Access curated documentation via the docked utility bar
If you encounter bugs or have feature requests:
- Document the issue with screenshots and steps to reproduce
- Submit via the AppExchange support system
- Include your Package Visualizer version (v8.5.0) and org type
Join the Salesforce Developer Community to connect with other Package Visualizer users, share best practices, and stay updated on new releases.
Package Visualizer | Version 8.5.0 | Namespace: pkgviz | API v65.0
Built with ❤️ for the Salesforce DevHub and ISV Community