Skip to main content
Version: Next

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

PackageVersionChanges
@abpjs/core2.9.0Standard DTOs, Loading/Content/DOM strategies, utilities, apiName config
@abpjs/theme-shared2.9.0Version alignment
@abpjs/theme-basic2.9.0Version alignment
@abpjs/account2.9.0Version alignment
@abpjs/feature-management2.9.0Version alignment
@abpjs/identity2.9.0Version alignment
@abpjs/permission-management2.9.0Version alignment
@abpjs/setting-management2.9.0Version alignment
@abpjs/tenant-management2.9.0Version alignment
@abpjs/account-pro2.9.0Version alignment
@abpjs/audit-logging2.9.0Version alignment
@abpjs/chat2.9.0New package - Real-time messaging
@abpjs/identity-pro2.9.0Organization units, TreeAdapter, user org unit assignment
@abpjs/language-management2.9.0Version alignment
@abpjs/saas2.9.0Version alignment
@abpjs/text-template-management2.9.0Version 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

See Also