v2.9.0
Release Date: February 2026
This release introduces the new Chat package for real-time messaging, full Organization Unit management in Identity Pro, new DTO classes and loading strategies in Core, and version alignment across all packages.
Highlights
- New Package: @abpjs/chat - Real-time messaging components for ABP Commercial
- Organization Unit Management - Full hierarchy management in @abpjs/identity-pro
- TreeAdapter Utility - Convert flat lists to tree structures for UI rendering
- Standard DTO Classes - New ABP-standard DTO classes in @abpjs/core
- Loading Strategies - Strategy-based script/style loading in @abpjs/core
New Package
@abpjs/chat
A new package for real-time messaging in ABP Commercial applications:
import {
ChatComponent,
useChatService,
eChatComponents,
eChatRouteNames,
} from '@abpjs/chat';
function ChatPage() {
return <ChatComponent />;
}
Features:
- Real-time messaging UI
- Conversation management
- Message history
- Full TypeScript support
See the Chat documentation for details.
New Features
@abpjs/core
Standard DTO Classes
New DTO classes for consistent data transfer patterns:
import {
ListResultDto,
PagedResultDto,
EntityDto,
AuditedEntityDto,
FullAuditedEntityDto,
PagedAndSortedResultRequestDto,
} from '@abpjs/core';
// Use for API responses
interface UserListResult extends PagedResultDto<UserDto> {}
// Use for entities with audit info
interface MyEntity extends AuditedEntityDto<string> {
name: string;
}
// Use for paginated requests
const request = new PagedAndSortedResultRequestDto({
maxResultCount: 10,
skipCount: 0,
sorting: 'name asc',
});
Loading Strategies
Strategy-based approach for loading external resources:
import {
LazyLoadService,
LOADING_STRATEGY,
DOM_STRATEGY,
CROSS_ORIGIN_STRATEGY,
} from '@abpjs/core';
const lazyLoadService = new LazyLoadService();
// Load script with pre-configured strategy
await lazyLoadService.load(
LOADING_STRATEGY.AppendAnonymousScriptToHead(
'https://cdn.example.com/library.js'
)
);
// Load stylesheet
await lazyLoadService.load(
LOADING_STRATEGY.AppendAnonymousStyleToHead(
'https://cdn.example.com/styles.css'
)
);
Content Strategies
For inserting inline scripts and styles:
import {
getDomInsertionService,
CONTENT_STRATEGY,
} from '@abpjs/core';
const domInsertionService = getDomInsertionService();
// Insert inline style
domInsertionService.insertContent(
CONTENT_STRATEGY.AppendStyleToHead(`
.my-class { color: red; }
`)
);
New Utilities
import {
isUndefinedOrEmptyString,
generateHash,
fromLazyLoad,
noop,
} from '@abpjs/core';
isUndefinedOrEmptyString(''); // true
const hash = generateHash('my-string');
REST API Name Configuration
import { RestService } from '@abpjs/core';
// Specify which API to use for requests
const reports = await RestService.get('/api/reports', {
apiName: 'reporting',
});
Deprecations
ABP.Root.requirements- Deprecated, will be removed in v3.0
@abpjs/identity-pro
Organization Unit Management
Full support for ABP's organization unit hierarchy:
import { OrganizationUnitService } from '@abpjs/identity-pro';
const orgUnitService = new OrganizationUnitService(restService);
// Get all organization units
const units = await orgUnitService.getListByInput({
maxResultCount: 100,
});
// Create organization unit hierarchy
const engineering = await orgUnitService.createByInput({
displayName: 'Engineering',
parentId: null,
});
const frontend = await orgUnitService.createByInput({
displayName: 'Frontend Team',
parentId: engineering.id,
});
// Manage members and roles
await orgUnitService.addMembersByIdAndInput(
{ userIds: ['user-id-1', 'user-id-2'] },
engineering.id
);
await orgUnitService.addRolesByIdAndInput(
{ roleIds: ['role-id-1'] },
engineering.id
);
// Move in hierarchy
await orgUnitService.moveByIdAndInput(
{ newParentId: anotherUnitId },
frontend.id
);
TreeAdapter Utility
Convert flat lists to tree structures for UI rendering:
import { TreeAdapter } from '@abpjs/identity-pro';
const units = await orgUnitService.getListByInput();
const adapter = new TreeAdapter(units.items);
// Get tree structure
const tree = adapter.getTree();
// Tree operations
adapter.expandAll();
adapter.collapseAll();
adapter.expandPathToNode('target-id');
// Get/set expanded keys for controlled components
const keys = adapter.getExpandedKeys();
adapter.setExpandedKeys(['id-1', 'id-2']);
User Organization Unit Assignment
// Create user with organization unit assignments
await identityService.createUser({
userName: 'john',
email: 'john@example.com',
password: 'SecurePassword123!',
roleNames: ['Manager'],
organizationUnitIds: ['org-unit-id-1', 'org-unit-id-2'],
});
New Components and Routes
import { eIdentityComponents, eIdentityRouteNames } from '@abpjs/identity-pro';
// New component keys
eIdentityComponents.OrganizationUnits
eIdentityComponents.OrganizationMembers
eIdentityComponents.OrganizationRoles
// New route name
eIdentityRouteNames.OrganizationUnits
Packages
| Package | Version | Changes |
|---|---|---|
| @abpjs/core | 2.9.0 | Standard DTOs, Loading/Content/DOM strategies, utilities, apiName config |
| @abpjs/theme-shared | 2.9.0 | Version alignment |
| @abpjs/theme-basic | 2.9.0 | Version alignment |
| @abpjs/account | 2.9.0 | Version alignment |
| @abpjs/feature-management | 2.9.0 | Version alignment |
| @abpjs/identity | 2.9.0 | Version alignment |
| @abpjs/permission-management | 2.9.0 | Version alignment |
| @abpjs/setting-management | 2.9.0 | Version alignment |
| @abpjs/tenant-management | 2.9.0 | Version alignment |
| @abpjs/account-pro | 2.9.0 | Version alignment |
| @abpjs/audit-logging | 2.9.0 | Version alignment |
| @abpjs/chat | 2.9.0 | New package - Real-time messaging |
| @abpjs/identity-pro | 2.9.0 | Organization units, TreeAdapter, user org unit assignment |
| @abpjs/language-management | 2.9.0 | Version alignment |
| @abpjs/saas | 2.9.0 | Version alignment |
| @abpjs/text-template-management | 2.9.0 | Version alignment |
Upgrade
npm install @abpjs/core@2.9.0 @abpjs/theme-shared@2.9.0 @abpjs/theme-basic@2.9.0 @abpjs/account@2.9.0 @abpjs/identity@2.9.0 @abpjs/feature-management@2.9.0 @abpjs/permission-management@2.9.0 @abpjs/setting-management@2.9.0 @abpjs/tenant-management@2.9.0
For Pro packages:
npm install @abpjs/account-pro@2.9.0 @abpjs/audit-logging@2.9.0 @abpjs/chat@2.9.0 @abpjs/identity-pro@2.9.0 @abpjs/language-management@2.9.0 @abpjs/saas@2.9.0 @abpjs/text-template-management@2.9.0