We are happy to announce v. 5.21.00 of the most complete development toolkit for Delphi and C++Builder for building native modular and fast multi-tier solutions.

5.21.00 replaces 5.20.01 and is mostly fixing reported bugs although a few additional new things are included.

If you like kbmMW, please let others know! Share the word!

We strive hard to ensure kbmMW continues to set the bar for what an n-tier product must be capable of in the real world!

This is a significant new release with new high performance transports, OpenSSL v3 support, WebSocket support, further improvements to SmartBind, new high performance hashing algorithms, improved RemoteDesktop sample and much more.
This release require the use of kbmMemTable v. 7.97.00 or newer.

The release includes:

  • Native TCP Request/Response transport (server and client) with TLS 1.3 support
  • Native TCP Messaging transport (server and client) with TLS 1.3 support
  • Native TCP WebSocket transport (server) with TLS 1.3 support
  • OpenSSL v3 support
  • SmartBinding aggregate functions, Min, Max, Avg, StdAvg, Count, Sum
  • New Metro hash 64 and 128 support
  • Improved TkbmMWRegExp with search and replace
  • Improved logging
  • New native DIB manipulation features to avoid use of TBitmap in threaded environments.
  • Updated Remote Desktop demo
  • Optional decoration of strings to prevent translation/learning those specific strings (5.20.01+)
  • Memoryleak detection/runtime debugging support of interfaced based references (5.21.00)
  • and more!

Please check the end of this post for a detailed change list.

Professional and Enterprise Edition is available for all with a current active SAU. If your SAU has run out, please visit our shop to extend it with another 12 months.

Community Edition (CE) can be used as a 60 day trial, alternatively as a free product, provided the license is followed. Please read license.txt file for details. CE supports a large subset of the Enterprise Edition features, but may have technical and artificial limitations in certain areas. It only supports a specific Delphi/Win32 SKU, produce Win32 executables and do not include source.

Please visit https://portal.components4developers.com to download.


kbmMW is the premiere n-tier product for Delphi, C++Builder and FPC on Win32, Win64, Linux, Java, PHP, Android, IOS, .Net, embedded devices, websites, mainframes and more.

Please visit http://www.components4developers.com for more information about kbmMW.


Components4Developers is a company established in 1999 with the purpose of providing high quality development tools for developers and enterprises. The primary focus is on SOA, EAI and systems integration via our flagship product kbmMW.

kbmMW is currently used as the backbone in hundreds of central systems, in hospitals, courts, private, industries, offshore industry, finance, telecom, governments, schools, laboratories, rentals, culture institutions, FDA approved medical devices, military and more.

 5.21.00 Nov 30 2022

        Important notes (changes that may break existing code)
        * Updated code to match kbmMemTable v. 7.97.xx (it is a requirement for this release)

        New stuff
        - Improved TkbmMWDebugMemory to support tracking interface reference counting.
        - Added TkbmMWDebugMemory.Silent boolean class variable that is default false. 
           Set to true if you do not want the messagebox popping up with leak information upon
           application shutdown when TkbmMWDebugMemory.ReportLeaksOnShutdown is true.
        - Updated code to match kbmMemTable v. 7.97.xx (it is a requirement for this release)

       	Changes/minor additions
        - Added kbmMWGetImplementingObject (Win32 and Win64) to kbmMWGlobal.pas.
           It is a fast way to return the implementing object from an interface pointer
           without risking additional reference counting arithmetics.
        - Improved TkbmMWDebugMemory output to be prettier and include statistics.
        - Improved TkbmMWDebugMemory output to separate statistics for various memory allocation types.
        - Changed TkbmMWAuthorizations.Get to have an additional argument AExact:boolean default false.
           Get will normally try to return a relevant authorization rather than the exact one.
           A relevant authorization is one where the resource use will be authorized based on lesser 
           specific authorizations where for example the role is unknown/undefined, the actor 
           unknown/undefined or both unknown/undefined. 
           If you need the very specific one, where actor and role both must be an exact match,
           set AExact argument to true.
        - Added TkbmMWAuthorizationManager.IsAuthorized overloaded variant, that returns 
           access permissions along with access state.

        - Fixed pesky leak in native transports.
        - Fixed warnings in kbmMWLockFree.pas
        - Fixed FMX variant of kbmMWFindComponentByName in kbmMWGlobal.pas to 
           enable search thru TGridPanelLayout owned child controls.
        - Fixed warnings when compiling for Win64 in kbmMWDebugStackTrace.pas.
        - Fixed TkbmMWBindings.AutoBind for FMX to now also scan child controls in
        - Fixed TkbmMWAuthorizationManager.InternalIsAuthorized to handle denials correctly.
           I.e. when a resource specifically has been denied access for specific roles/actors/conditions.

  5.20.01 Nov 08 2022

        New stuff
        - Added global function: kbmMWShutdown() which when called indicates to 
           long running parts of kbmMW that kbmMW is about to shut down. It affects
           kbmMW threads, waitloops, SmartBind, SmartEvent, Scheduler, client messaging request/response,
           which will cease running as soon as possible.
           Global variable: kbmMWShuttingDown:boolean can be probed to test for if a shutdown is imminent.
        - Added new decorator functionality to I18n so specific texts can be given an option to be not translated
           and/or not learned. 
           Eg. Label1.Caption:=i18n.DontLearn('Setting caption without learning');
           Eg. Label1.Caption:=i18n.DontTranslate('Setting caption without translating nor learning');
           Eg. Label1.Caption:=i18n._X('Setting caption without translating nor learning');
           Notice that if you need to use decorated strings in non i18n scenarios, you will need to undecorate 
           them before use. eg. sUndecoratedString:=i18n.Undecorate(somedecoratedstring);
           It is usually safe to call this for regular non decorated strings that will be returned as is.
        - Added several GetDefAttribByNamexxxx methods to TkbmMWDOMXMLNode. Will return user defined default value
           if named attribute is not found on node.

       	Changes/minor additions
        - Improved OnLogout2 event in TkbmMWAuthorizationManager so it will not only receive a context
           but also have populated the context with login information in addition to the token.

        - Fixed one more type issue in kbmMWCipherHash.pas.
        - Fixed disconnection detection in TkbmMWTCPClientMessagingTransport and TkbmMWTCPClientTransport.
        - Fixed leak of state object upon server disconnecting in TkbmMWTCPClientMessagingTransport and 
        - Improved I18n deregistration and reregistration of components to ensure that original value is correctly 
           detected and that original value for deregistered components and children are removed.
        - Fixed unused variable warnings.
        - Fixed bogus PixelPerInch property in kbmMWServer.dfm file.  

  5.20.00 Oct 27 2022

        Important notes (changes that may break existing code)
        * Changed default value for delay on congestion on queue to 0 (none) instead of 500ms.
        * Removed call to OnLoginSuccess when login attempt on already logged in user in
        * Changed TkbmMWHTTPTransportStreamHelper to support HTTP headers of default max.
           KBMMWHTTPDEFAULTMAXHEADERSIZE (8192) bytes instead of 1024 bytes.

        New stuff
        - Added kbmMWTCPMessagingServerTransport native TCP WIB transport with TLS/SSL support.
        - Added kbmMWTCPMessagingClientTransport native TCP WIB transport with TLS/SSL support.
        - Added kbmMWTCPServerTransport native TCP request/response transport with TLS/SSL support.
        - Added kbmMWTCPClientTransport native TCP request/response transport with TLS/SSL support.
        - Added kbmMWTCPWebSocketServerTransport native Websocket compliant server transport with TLS/SSL support.
        - Added support for OpenSSL v3 and TLS 1.3.
           include {$DEFINE KBMMW_NATIVETRANSPORT_SUPPORT_OPENSSL_V3} to support OpenSSL v3
           Require DLL's: libcrypto-3.dll and libssl-3.dll in relevant bitness.
           If not defined, falls back to support OpenSSL v1.
           Require DLL's: libeay32.dll and ssleay32.dll (0.9x)
        - Added support for aggregates in SmartBinding. It will aggregate over a
           navigable source using COUNT, SUM, AVG, STDDEV, MIN, MAX
           Example: {bind:@test2.Val3, to:statictext2.caption, aggregate:SUM}
           Will sum all values of property Val3 of navigable source
           test2 (placeholder in this example) and output sum to statictext2.caption.
           SmartBinding will maintain a cache of already aggregated data, and only
           reaggregate when nequired.
        - Added Swap64, Int1621Memory, UInt162Memory, Int322Memory, UInt322Memory,
           Int642Memory, Single2Memory, Double2Memory to TkbmMWPlatformMarshal.
        - Added Replace, ReplaceAll, TryReplace, TryReplaceAll to TkbmMWRegExp.
        - Added global function kbmMWCmdLineParamValue and kbmMWCmdLineContainsParam to kbmMWGlobal.pas
        - Added TkbmMWHashMetro64 and TkbmMWHashMetro128 hash classes.
        - Added simple support for accepting selfsigned certificates and expired certificates
           in all native SSL/TLS transports.
        - Added support for blocking specific SSL/TLS protocols (SSLv3, TLSv1, TLSv1.2, TLSv1.3).
           Default for all transports is blocking for SSLv3, TLSv1 and TLSv1.2.
        - Added support for protocol upgrade request in TkbmMWCustomHTTPService.
        - Added support for Firemonkey TCustomListBox and TCustomComboBox and descendants
           in SmartBinding.
        - Added support for logging complex values using kbmMWLog.
        - Added UpdateDebug property to TkbmMWBindings (Binding.Bindings.UpdateDebug).
           Can be set to mwbudIgnore, mwbudLogException or mwbudExcept. Default mwbudLogException.
           Controls what happens in case an update of a binding fails.
        - Added kbmMWDIB.pas unit. It is a high performance replacement for relevant
           functionality used by kbmMW RemoteDesktop, to avoid thread deadlock problems
           in TBitmap.Canvas.

       	Changes/minor additions
        - Added Delete(aobject) and Remove alias methods to TkbmMWONArray.
        - Added Delete(aobject) and Remove alias methods to TkbmMWONObject.
        - Added Delete method to TkbmMWConfiguration.
           Provides a mean to remove a configuration setting.
        - Added DeleteByValue to TkbmMWHTTPCustomValues.
        - Added ContainsValueFieldsValue[..] to TkbmMWHTTPMimeHeaderValues.
        - Added kbmMWWSKeyToAccept function to kbmMWHTTPUtils.pas
           Converts a Websocket secret key to an accept key.
        - Added CongestionDelayThreshold and CongestionDelayThresholdLow properties to
           TkbmMWCustomMessageQueue. Controls when to delay push of messages to queue
           for regular and low prioritized new messages, when queue is congested.
        * Changed default value for delay on congestion to 0 (none) instead of 500ms.
        * Removed call to OnLoginSuccess when login attempt on already logged in user in
        * Changed TkbmMWHTTPTransportStreamHelper to support HTTP headers of default max.
           KBMMWHTTPDEFAULTMAXHEADERSIZE (8192) bytes instead of 1024 bytes.
           The value can always be overridden by setting the header size parameter before use:
        - Updated kbmMW Remote Desktop server classes to use TkbmMWDIB instead of TBitmap.
        - Updated Remote Desktop server demo to use new native kbmMW TCP messaging transport.

        - Fixed TkbmMWEvent signal detection bug.
        - Fixed kbmMWGetCurrentThreadID returning incorrect type.
        - Fixed performance issue in TkbmMWNullable<>, TkbmMWAutoValue debug visualizers.
        - Fixed parsing bugs in kbmMWYAML.pas.
        - Fixed 64 bit compilation issues with kbmMW's bundled cipher hashes.
        - Fixed errorhandling in ServeStream and ServeRequest in TkbmMWServer.
        - Fixed occatiional A/V in kbmMWORM.pas upon reraising exception from underlying
        - Fixed % at end bug in I18n translation support.
        - Fixed potential leaks in TkbmMWCustomLockFreeHashArray for user allocated items.
        - Fixed several issues in kbmMWSmartBinding.
        - Fixed kbmMW Remote Desktop screen diffing algorithm.


Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.