Skip to main content
Version: 3.0.0

v3.0.0

Release Date: February 2026

This major release introduces a unified configuration system across all packages, including route providers, policy names, extensions systems, and guards. The config subpackages from Angular have been merged into the main packages for simplified imports.

Highlights

  • Route Providers - New RoutesService-based route configuration system in all packages
  • Policy Names - Centralized permission policy constants for all modules
  • Extensions System - Customizable entity actions, toolbar actions, entity props, and form props
  • Extensions Guards - Route guards for loading extensions before activation
  • Config Options - Module configuration interfaces for extensibility

Breaking Changes

Route Names: Administration Key Removed

The Administration key has been removed from all package route names. Use eThemeSharedRouteNames.Administration from @abpjs/theme-shared instead.

Affected packages: @abpjs/identity, @abpjs/tenant-management, @abpjs/identity-pro, @abpjs/language-management, @abpjs/saas, @abpjs/text-template-management

// Before (v2.9.0)
import { eIdentityRouteNames } from '@abpjs/identity';
const admin = eIdentityRouteNames.Administration; // ❌ Removed

// After (v3.0.0)
import { eThemeSharedRouteNames } from '@abpjs/theme-shared';
const admin = eThemeSharedRouteNames.Administration; // ✅ Use this instead

@abpjs/core

  • Toaster.Status removed - Use Confirmation.Status instead
  • RoutesService.visible property removed from route configuration

@abpjs/theme-shared

  • NavItem.permission renamed to NavItem.requiredPolicy
  • NavItem.id is now required
  • Toaster.Status removed - Use Confirmation.Status

@abpjs/identity

  • eIdentityRouteNames.Administration removed
  • Route name values changed (e.g., Identity::Users instead of AbpIdentity::Users)

@abpjs/identity-pro

  • eIdentityRouteNames.Administration removed
  • getClaimTypeNames() replaced with getRolesClaimTypes() and getUsersClaimTypes()
  • dispatchGetClaimTypeNames() removed from IdentityStateService

@abpjs/language-management

  • eLanguageManagementRouteNames.Administration removed
  • eLanguageManagementRouteNames.Languages value changed
  • getLanguagesTotalCount() removed from LanguageManagementStateService

@abpjs/setting-management

  • selectedTab type changed from null to undefined when no tab is selected

New Features

Route Providers (All Packages)

All packages now include route providers for configuring routes using RoutesService:

import { getRoutesService } from '@abpjs/core';
import { initializeIdentityRoutes } from '@abpjs/identity';
import { initializeSaasRoutes } from '@abpjs/saas';

const routes = getRoutesService();

// Initialize routes for each module
initializeIdentityRoutes(routes);
initializeSaasRoutes(routes);

Or use the configureRoutes pattern:

import { configureRoutes } from '@abpjs/identity';

const addRoutes = configureRoutes(routes);
addRoutes();

Policy Names (All Packages)

Centralized policy name constants for permission checking:

import { eIdentityPolicyNames } from '@abpjs/identity';
import { eSaasPolicyNames } from '@abpjs/saas';

// Check permissions
if (hasPolicy(eIdentityPolicyNames.Users)) {
// User has users permission
}

Extensions System

All packages now support customizable extensions:

import {
EntityAction,
ToolbarAction,
EntityProp,
FormProp,
DEFAULT_TENANTS_ENTITY_ACTIONS,
SAAS_ENTITY_ACTION_CONTRIBUTORS,
} from '@abpjs/saas';

// Add custom entity actions
const customActions: EntityAction<Saas.Tenant>[] = [
...DEFAULT_TENANTS_ENTITY_ACTIONS,
{
text: 'Custom Action',
icon: 'fa fa-star',
permission: 'Custom.Permission',
},
];

Extensions Guards

Route guards for loading extensions before route activation:

import { useSaasExtensionsGuard } from '@abpjs/saas';

function ProtectedRoute({ children }) {
const { isLoaded, loading } = useSaasExtensionsGuard();

if (loading) return <Loading />;
return children;
}

@abpjs/core

  • RoutesService - Centralized route management
  • SettingTabsService - Setting tabs management
  • AbstractTreeService - Base class for tree data operations
  • Tree utilities - createTreeFromList(), addTreeNode(), removeTreeNode(), findTreeNode()
  • Array utilities - pushIfNotExists(), removeIfExists()
  • Route utilities - getNavItemFromRoute()
  • Generic ListService - ListService<T, Q> for paginated data

@abpjs/theme-shared

  • NavItemsService - Centralized navigation item management
  • eThemeSharedRouteNames - Route name constants including Administration
  • Nav Item Providers - Configure nav items via service

@abpjs/theme-basic

  • CurrentUserComponent - Standalone current user display
  • LanguagesComponent - Standalone language selector
  • Nav Item Provider - initializeNavItems()
  • Styles Provider - initializeThemeBasicStyles()

@abpjs/account

  • Route providers - initializeAccountRoutes(), configureRoutes()
  • accountOptionsFactory - Configuration factory for account module

@abpjs/identity

  • Policy names - eIdentityPolicyNames with Users, Roles constants
  • Route providers - initializeIdentityRoutes(), configureRoutes()
  • getUserAssignableRoles() - New method for role assignment

@abpjs/permission-management

  • getAssignedCount() - Get count of assigned permissions

@abpjs/setting-management

  • Route providers - initializeSettingManagementRoutes(), configureRoutes()
  • hideRoutes() - Hide setting management from navigation

@abpjs/tenant-management

  • Policy names - eTenantManagementPolicyNames
  • Route providers - initializeTenantManagementRoutes(), configureRoutes()

@abpjs/account-pro

  • Route providers - initializeAccountRoutes(), configureRoutes()
  • Setting tab providers - configureSettingTabs()
  • AccountConfigOptions - Module configuration interface

@abpjs/audit-logging

  • Route providers - initializeAuditLoggingRoutes(), configureRoutes()
  • EntityChangeModalService - Service for entity change details
  • Extensions system - Full extension support

@abpjs/chat

  • Route providers - initializeChatRoutes(), configureRoutes()
  • Nav item providers - initializeChatNavItems()
  • Policy names - eChatPolicyNames

@abpjs/identity-pro

  • Route providers - initializeIdentityRoutes(), configureRoutes()
  • Setting tab providers - configureSettingTabs()
  • Policy names - eIdentityPolicyNames with extended permissions
  • Setting tab names - eIdentitySettingTabNames
  • Identity settings models - Settings, Password, Lockout, SignIn, User interfaces
  • Extensions system - Full extension support with IdentityExtensionsGuard

@abpjs/language-management

  • Route providers - initializeLanguageManagementRoutes(), configureRoutes()
  • Policy names - eLanguageManagementPolicyNames
  • Extensions system - Full extension support

@abpjs/saas

  • Route providers - initializeSaasRoutes(), configureRoutes()
  • Policy names - eSaasPolicyNames
  • Config options - SaasConfigOptions interface
  • Extensions system - Full extension support

@abpjs/text-template-management

  • Route providers - initializeTextTemplateManagementRoutes(), configureRoutes()
  • Policy names - eTextTemplateManagementPolicyNames
  • Config options - TextTemplateManagementConfigOptions interface
  • Extensions system - Full extension support

Packages

PackageVersionChanges
@abpjs/core3.0.0RoutesService, SettingTabsService, AbstractTreeService, tree/array/route utilities, generic ListService
@abpjs/theme-shared3.0.0NavItemsService, eThemeSharedRouteNames, NavItem changes (id required, permission→requiredPolicy)
@abpjs/theme-basic3.0.0CurrentUserComponent, LanguagesComponent, Nav Item Provider, Styles Provider
@abpjs/account3.0.0Route providers, accountOptionsFactory
@abpjs/feature-management3.0.0Version alignment
@abpjs/identity3.0.0Route providers, policy names, getUserAssignableRoles(), route name changes
@abpjs/permission-management3.0.0getAssignedCount() method
@abpjs/setting-management3.0.0Route providers, hideRoutes(), selectedTab type change
@abpjs/tenant-management3.0.0Route providers, policy names
@abpjs/account-pro3.0.0Route providers, setting tab providers, AccountConfigOptions
@abpjs/audit-logging3.0.0Route providers, EntityChangeModalService, extensions system
@abpjs/chat3.0.0Route providers, nav item providers, policy names
@abpjs/identity-pro3.0.0Route providers, setting tab providers, policy names, claim type API changes, extensions system
@abpjs/language-management3.0.0Route providers, policy names, extensions system, removed getLanguagesTotalCount()
@abpjs/saas3.0.0Route providers, policy names, config options, extensions system
@abpjs/text-template-management3.0.0Route providers, policy names, config options, extensions system

Upgrade

Free Packages

npm install @abpjs/core@3.0.0 @abpjs/theme-shared@3.0.0 @abpjs/theme-basic@3.0.0 @abpjs/account@3.0.0 @abpjs/identity@3.0.0 @abpjs/feature-management@3.0.0 @abpjs/permission-management@3.0.0 @abpjs/setting-management@3.0.0 @abpjs/tenant-management@3.0.0

Pro Packages

npm install @abpjs/account-pro@3.0.0 @abpjs/audit-logging@3.0.0 @abpjs/chat@3.0.0 @abpjs/identity-pro@3.0.0 @abpjs/language-management@3.0.0 @abpjs/saas@3.0.0 @abpjs/text-template-management@3.0.0

Migration Guide

1. Update Route Name Imports

Replace Administration references:

// Before
import { eIdentityRouteNames } from '@abpjs/identity';
const admin = eIdentityRouteNames.Administration;

// After
import { eThemeSharedRouteNames } from '@abpjs/theme-shared';
const admin = eThemeSharedRouteNames.Administration;

2. Update NavItem Configuration

// Before
const navItem: NavItem = {
name: 'My Item',
permission: 'MyPermission',
};

// After
const navItem: NavItem = {
id: 'my-item', // Now required
name: 'My Item',
requiredPolicy: 'MyPermission', // Renamed from permission
};

3. Update Toaster.Status Usage

// Before
import { Toaster } from '@abpjs/theme-shared';
const status = Toaster.Status.Success;

// After
import { Confirmation } from '@abpjs/theme-shared';
const status = Confirmation.Status.Success;

4. Update Identity Pro Claim Type Calls

// Before
const claimTypes = await identityService.getClaimTypeNames();

// After
const rolesClaimTypes = await identityService.getRolesClaimTypes();
const usersClaimTypes = await identityService.getUsersClaimTypes();

5. Update Language Management State Service

// Before
const total = stateService.getLanguagesTotalCount();

// After
const languages = stateService.getLanguages();
// Access totalCount from response if needed

See Also