Skip to main content
Version: 2.0.0

v2.0.0

Release Date: January 2026

This major release introduces comprehensive State Services with dispatch methods across all packages, improved TypeScript support with component interface types, and several breaking changes as deprecated APIs have been removed.

Highlights​

  • State Services with Dispatch Methods - All packages now include state services that mirror the Angular NGXS store pattern
  • Component Interface Types - TypeScript interfaces for all component inputs/outputs
  • Breaking Changes - Deprecated routes and constants from v1.x have been removed
  • Improved Type Safety - Callback signatures updated from any to proper types

Breaking Changes​

@abpjs/core​

  • eLayoutType.setting removed - Use a custom layout instead (deprecated in v1.0.0)
  • ConfigService alias removed - Use ConfigStateService directly (deprecated in v1.1.0)

@abpjs/account​

  • ACCOUNT_ROUTES removed - Use useSelfRegistrationEnabled hook and ABP settings instead

@abpjs/identity​

  • IDENTITY_ROUTES removed - Use identity config services for route configuration
  • IdentityProviders removed - Use identity config services instead

@abpjs/tenant-management​

  • TENANT_MANAGEMENT_ROUTES removed - Use TENANT_MANAGEMENT_ROUTE_PATHS and TENANT_MANAGEMENT_POLICIES instead

New Features​

State Services with Dispatch Methods​

All packages now include state services that provide programmatic access to state management, mirroring the Angular NGXS store pattern. These services maintain internal state and provide dispatch methods for API operations.

@abpjs/core​

New session actions and selectors:

import { sessionActions } from '@abpjs/core';

// New actions
dispatch(sessionActions.setSessionDetail(detail));
dispatch(sessionActions.patchSessionDetail(partialDetail));
dispatch(sessionActions.clearSessionDetail());

New configActions.addRoute for dynamic route registration:

import { configActions } from '@abpjs/core';

dispatch(configActions.addRoute({
path: '/custom',
name: 'Custom Page',
}));

@abpjs/identity​

New IdentityStateService:

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

const stateService = new IdentityStateService();

await stateService.dispatchGetRoles();
await stateService.dispatchGetUsers();
await stateService.dispatchCreateRole({ name: 'Manager', isDefault: false, isPublic: true });

@abpjs/tenant-management​

New TenantManagementStateService:

import { TenantManagementStateService } from '@abpjs/tenant-management';

await stateService.dispatchGetTenants();
await stateService.dispatchCreateTenant({ name: 'NewTenant', adminEmailAddress: 'admin@example.com', adminPassword: 'Password123!' });

@abpjs/permission-management​

New dispatch methods for PermissionManagementStateService:

import { PermissionManagementStateService } from '@abpjs/permission-management';

await stateService.dispatchGetPermissions({ providerKey: 'role-id', providerName: 'R' });
await stateService.dispatchUpdatePermissions({ providerKey: 'role-id', providerName: 'R', permissions: [...] });

Pro Packages​

All pro packages now include comprehensive state services:

PackageState Service
@abpjs/identity-proIdentityStateService with 17 dispatch methods
@abpjs/audit-loggingAuditLoggingStateService
@abpjs/language-managementLanguageManagementStateService
@abpjs/saasSaasStateService

Component Interface Types​

All packages now export TypeScript interfaces for component inputs and outputs:

import type { Identity } from '@abpjs/identity';

// Component input/output types
type RolesInputs = Identity.RolesComponentInputs;
type RolesOutputs = Identity.RolesComponentOutputs;
type UsersInputs = Identity.UsersComponentInputs;
type UsersOutputs = Identity.UsersComponentOutputs;

New Component Props​

@abpjs/identity & @abpjs/identity-pro​

  • onVisiblePermissionChange prop on RolesComponent and UsersComponent

@abpjs/tenant-management​

  • onVisibleFeaturesChange prop on TenantManagementModal

@abpjs/account & @abpjs/account-pro​

  • enableLocalLogin option for AccountProProvider
  • isSelfRegistrationEnabled prop on LoginForm and RegisterForm
  • ABP settings support: Abp.Account.EnableLocalLogin, Abp.Account.IsSelfRegistrationEnabled

Type Improvements​

@abpjs/theme-shared​

  • Toaster methods now return number (toast ID) instead of Promise<Status>
  • Severity 'warn' renamed to 'warning'
  • New 'neutral' severity added
  • New show() method, subscribe() method, listenToEscape() for confirmation
  • containerKey support for scoped toasters

Packages​

PackageVersionChanges
@abpjs/core2.0.0Breaking: removed deprecated APIs; New: session detail, addRoute
@abpjs/theme-shared2.0.0Breaking: toaster return types; New: neutral severity, subscribe
@abpjs/theme-basic2.0.0Version alignment
@abpjs/account2.0.0Breaking: ACCOUNT_ROUTES removed; New: ABP settings support
@abpjs/identity2.0.0Breaking: IDENTITY_ROUTES removed; New: IdentityStateService
@abpjs/feature-management2.0.0New: Component interface types
@abpjs/permission-management2.0.0New: dispatch methods, interface types
@abpjs/setting-management2.0.0Version alignment
@abpjs/tenant-management2.0.0Breaking: TENANT_MANAGEMENT_ROUTES removed; New: StateService
@abpjs/account-pro2.0.0New: enableLocalLogin, isSelfRegistrationEnabled
@abpjs/audit-logging2.0.0New: AuditLoggingStateService
@abpjs/identity-pro2.0.0New: IdentityStateService with 17 methods
@abpjs/language-management2.0.0New: LanguageManagementStateService
@abpjs/saas2.0.0New: SaasStateService

Upgrade​

npm install @abpjs/core@2.0.0 @abpjs/theme-shared@2.0.0 @abpjs/theme-basic@2.0.0

Or update all packages:

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

Migration Guide​

1. Remove deprecated route constants​

// Before (v1.x)
import { IDENTITY_ROUTES, ACCOUNT_ROUTES, TENANT_MANAGEMENT_ROUTES } from '@abpjs/...';

// After (v2.0.0) - use route paths and policies
import { IDENTITY_ROUTE_PATHS, IDENTITY_POLICIES } from '@abpjs/identity';
import { TENANT_MANAGEMENT_ROUTE_PATHS, TENANT_MANAGEMENT_POLICIES } from '@abpjs/tenant-management';

2. Update ConfigService imports​

// Before
import { ConfigService } from '@abpjs/core';

// After
import { ConfigStateService } from '@abpjs/core';

3. Update Toaster usage​

// Before (v1.x)
const status = await toaster.success('Message'); // Promise<Status>

// After (v2.0.0)
const toastId = toaster.success('Message'); // number
toaster.remove(toastId); // Remove by ID

4. Update severity naming​

// Before
toaster.warn('Warning message');

// After
toaster.warning('Warning message');

5. Update Confirmation yesCopy/cancelCopy​

// Before
confirmation.show({ yesCopy: 'Delete', cancelCopy: 'Keep' });

// After
confirmation.show({ yesText: 'Delete', cancelText: 'Keep' });

See Also​