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

5.22.00 is a release with containing new stuff, refinements and bugfixes.

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:

  • Optionally grab host mouse and keyboard actions in RemoteDesktop server (default not enabled, and can be completely left out of the final compiled application as it is should be used carefully!)
  • Updated native socket support
  • Updated application configuration framework
  • Lots of improvements to existing features
  • Bug fixes

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.

Notice that Community Edition (CE) is currently only available on request, and after signing up with COMPLETE and CORRECT info on the portal, due to export restrictions to Russia and Belarusia.


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.22.00 Jun 11 2023

        New stuff
        - Added ShowHostMouseActions:boolean (default false) to kbmMWRemoteDesktopClient.pas.
          If set to true, it will live track the hosts mouse position and show its
          position on the remote client.
        - Added TrackHostMouseEvents:boolean (default false) and
          TrackHostKeyboardEvents:boolean (default false) to 
          If set to true, system wide mouse and/or system wide keyboard events will
          be tracked and reported to remote clients.
          The features can be completely turned off by defining 
          before compiling applications using kbmMWRemoteDesktopServer.pas.
        - Added kbmMWCreateTimestampedFile function to kbmMWGlobal.pas.
        - Added function kbmMWXMLContainsInvalidCharacter to kbmMWXML.pas
          Will check if string contains invalid XML character.
        - Added StrictSyntax:boolean property to TkbmMWCustomSAXXMLParser class 
          (default false)
          Will check if tag or attribute contains invalid characters and throw 
          Will also check if attribute names are duplicated and throw 
        - Added MaxOutstandingSends:integer (default 0) and
          Options:TkbmMWSocketOptions (default [mwsoSkipOnMaxOutstandingSend]) to
          TkbmMWCustomTCPMessagingClientTransport and 
          Governs how many non acknowledged outstanding sends can be queued up
          before new sends are either dropped or a disconnection is happening.
          Default there are no limit (except for OS restrictions).
        - Added property AdditionalBindings to 
          It allows for adding additional ports and/or network cards to listen and
          accept connections from.
        - Added AddSampleLanguage method to TkbmMWI18N.
          Adds an "empty" language with the given name and description.
          That way it is possible to learn from scratch.
          A new instance of TkbmMWI18N will always contain a single
          sample langauge called 'Default'.
        - Added BatchSize:integer (default 0) to TkbmMWCustomResolver.
          If set to >0, the resolver will resolve in batches.
          Notice that in that case AllOrNothing will only have effect
          on the last handled batch.
        - Added property XRequestedWith:string to TkbmMWHTTPTransportStreamHelper.
        - Added property IsXMLHttpRequest to TkbmMWHTTPTransportStreamHelper.
          It will specifically be used for checking if the optional
          (but defacto standard) XRequestedWith indicates that the request
          was made by a JSON XMLRequest call (REST).
          If so, and the request could not be authorized, it will
          not require the client browser to popup a username/password dialog.
        - Added TryGetValue to TkbmMWCustomLockFreeHashArray<K,T> and
          TkbmMWCustomLockFreeHashArray2<K,T> (kbmMWLockFree.pas).
        - Updated kbmMWSQLite.pas to support SQLite custom functions.
        - Added new UCUpper and UCLower SQLite custom functions to do
          proper unicode upper and lower case if mwsloAddCustomFunctions
          is set in SQLiteOptions.
        - Added OnOpenedDBConnection to TkbmMWSQLiteConnectionPool.
        - Added LogException:boolean property to TkbmMWCustomMessageProcessor.
          If true, it will log whatever exception has happened while executing
          the message processor. Else it will ignore it.
        - Added option to define section name for TkbmMWBinaryParser. Allows
          for having multiple separate configurations in the same storage.
        - Added class function TkbmMWBPParser.CreateFromString
        - Added mwlbpmRawFile as a new "pretty mode" option to kbmMWLog.
          If used, it will output data in binary raw form in a separate file.
          Copies/backups are governed by MaxRawFileCount:integer;
        - Added class function IskbmMWDateTime(const ATypeInfo:PTypeInfo):boolean; 
          to TkbmMWRTTI.
        - Added class function IskbmMWNullable(const ATypeInfo:PTypeInfo):boolean; 
          to TkbmMWRTTI.
        - Added class function GetValueFromPath(const APath:string; const 
             AInstance:TValue):TValue to TkbmMWRTTI.
        - Added class function GetValuesFromPath(const APaths:array of string; 
          const AInstance:TValue):TArray<TValue>; to TkbmMWRTTI.
        - Added protected function GetConfigName(const 
             ADefaultExtension:string):string; to TkbmMWConfiguration.
          It will be called to figure out what the name of the configuration should 
          Default it is the same as the executables name + _config,
          but now all applications automatically supports /config (Windows) or 
          -config (others) command line parameter, which should be followed by the 
          name or full path and name of the configuration file to use.

       	Changes/minor additions
        - Added SaveToAnsixxx and LoadFromAnsixxx to TkbmMWYAMLStreamer 
          where xxx is String, Stream and File.
        - Added LoadFromxxx variants to TkbmMWYAMLStreamer (kbmMWYAML.pas)
          where xxx is String, Stream and File, that accepts a default encoding.
        - Added support for decoding \uNNNN and \UNNNNNNNN syntax in 
        - Added property &Variant:variant to kbmMWNullable.
          allows getting or setting basic nullable datatypes as a variant.
        - Improved garbage collection of sent async requests in 
          Now will also detect (and GC) orphaned reponses for requests that has 
          already timed out.
        - Added Tag optional argument to TkbmMWLog and many log methods and to 
        - Changed use of specific thread code in kbmMWCustomTransport.pas to
          instead use the Scheduler. That results in the removal of:
          TkbmMWTransportIdleThread and TkbmMWTransportHeartbeatThread classes.
        - Added Scheduler:TkbmMWScheduler property to TkbmMWCustomTransport.
          Default it retrieves the kbmMW system scheduler, but it is
          possible to instantiate a separate scheduler and use that instead.
        - Improved TkbmMWCustomThread.WorkDone.
        - Changed TkbmMWCustomConnectionPool to not use its own thread for garbage 
          collection. Instead it will use a recurring scheduled event.
        - Added property Scheduler:TkbmMWScheduler that default returns the system 
          It allows setting to a different instantiated scheduler if needed.
        - Removed class TkbmMWPooledGarbageThread.
        - Added optional Replace:boolean argument to TkbmMWI18N.Load method.
          If set to true, the loaded language will completely replace
          already existing languages in TkbmMWI18N. If not it will
          append extra language(s).
        - Updated the native socket code.
        - Added Data property to TkbmMWDIB class.
        - Updated TkbmMWCustomGroupedMultithreadMessageQueueProcessor 
          to use a scheduled event instead of its own thread for GC.
        - Removed TkbmMWMessageGroupsGarbageThread class from 

        - Fixed \xNN decoding in TkbmMWYAMLStreamer.
        - Fixed decoding exponential numbers in TkbmMWYAMLStreamer.
        - Fixed decoding exponential numbers in TkbmMWJSONStreamer.
        - Fixed incorrect conditional compiling in TkbmMWYAMLStreamer.LoadFromStream
          when KBMMW_SUPPORTSENCODING not defined.
        - Fixed TkbmMWMSSQLRewriter methods:
          ExistsTable, RewriteExistsIndex, RewriteListIndexes, RewriteDescribeIndex
        - Fixed detecting system wide kbmMW shutdown in kbmMWSmartEvent.pas.
        - Fixed setting smartevent as done (when it has been run), even if OnDone is 
          not used.
        - Fixed FMX compilation of kbmMWRemoteDesktopClient.pas
        - Fixed shutdown scenarios in TkbmMWInnerThread.
        - Fixed TkbmMWThreadEntry.Destroy.
        - Fixed TkbmMWCustomThreadPool.Reserve not attempting
          to reuse thread which has been marked for shutdown.
        - Fixed TkbmMWDOMXMLNode.GetData function so it will decode data before 
          returning it.
        - Fixed TkbmMWCustomSQLParamsResolver.BuildSQLStatements that used wrong 
        - Fixed socket close on TkbmMWCustomTCPMessagingClientTransport.
        - Improved kbmMWORM.
        - Fixed kbmMWDIB.pas.
        - Improved shutdown detection in 
        - Improved shutdown detection in 
          ProcessBlockAll, ProcessOne, ProcessBlockOne.
        - Fixed parsing data starvation issue in TkbmMWBinaryParser.
        - Fixed trailing spaces being removed when getting string data from an XML 
          based configuration.


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.