Skip to main content
Version: 2.1.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