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

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 major new release with support for the new Delphi and RAD Studio 11.0 Alexandria, new features, improvements and bugfixes. This release require the use of kbmMemTable v. 7.95.00 or newer.

The release includes:

  • Added support for RAD Studio 11.0 Alexandria.
  • New fixed format object notation streamer (kbmMWTXT)
  • New LINQ features to convert to and from ObjectNotation, fixed format streams/strings and datasets.
  • Enhanced support for multiple concurrent true/false/null/inf+ and inf- values in text based object notation streams.
  • Enhanced TkbmMWStringBuilder.
  • Enhanced TkbmMWDateTimeCompiledFormat.
  • Performance and feature improvements in SmartBinding

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.18.00 Sep 12 2021

        Important notes (changes that may break existing code)
        * Officially dropped support for pre XE7. XE8 and up is recommended.

        New stuff
        - Added support for Delphi 11
        - Added new SQL user functions to kbmMWMemSQL:
           CREATEGUID()      - Returns a full size unique GUID including braces.
           CREATESHORTGUID() - Returns a compact unique GUID (no braces or dashes).
           GETUSERNAME()     - Returns username of currently logged in user.
           GETCOMPUTERNAME() - Returns name of computer.
           QUOTE(string[,quotechar[,endquotechar]])   - Quote a string. Default quotechar/endquotechar is "
           UNQUOTE(string[,quotechar[,endquotechar]]) - Unquote a string. Default quotechar/endquotechar is "
        - Added NAV(property/fieldname) function to SmartBind expressions. Provides access to
          other values of the current position of a navigable bound object.
        - Added HasPassedTimeMS, PassedTimeMS, PassedTimeDiffMS and DiffMS (millisec) functions
          to TkbmMWTiming (kbmMWGlobal.pas) in addition to the US (microsec) variants.
        - Added overridable AllocElements, FreeElements, ZeroElements, ClearElements methods to
          TkbmMWLockFreeHashArray<T> and TkbmMWLockFreeHashArray2<T>, to allow for alternative storage,
          like storing the array in a memory mapped file.

       	Changes/minor additions
        - Officially dropped support for pre XE7. XE8 and up is recommended.
        - Added logging of exceptions as error, if SmartBind expression excepts.
        - Improved kbmMWYAML to allow for cardinal hex or octal values.

        - Fixed potential null A/V when rebinding datasources/dataset in SmartBind.
        - Fixed TkbmMWONFormat.DateTimeAsString in kbmMWObjectNotation to fall back to
          detecting a date/time format index if no specific date nor time format is found.

 5.17.00 Aug 28 2021

        Important notes (changes that may break existing code)
        * Require kbmMemTable v. 7.94 or newer!
        * Changed SmartBind to only set destination if the new value is different from what
          is already in the destination. Old behaviour can be forced by setting property
          yourbinding.AlwaysSet:=true or via 'alwaysSet:true' in expression based binding.
        * Changed SpokeID from integer to Cardinal in kbmMWServerMessagingTransport.pas

        New stuff
        - Added field mapping support in LINQ via new AsMyDataset which
           returns a new developer owned instance of a dataset.
        - Added new date/time format specifiers to TkbmMWDateTimeCompiledFormat:
             %M3 = 2 digit month
             %D2 = 2 digit day
             %H2 = 2 digit hour
        - Added kbmMWTXT.pas containing TkbmMWTXTStreamer. It will parse and generate
           fixed format record/field based text files accoding to a specific
           JSON or YAML described format.
               { "name": "name", "ofs": 15, "len": 80 },
               { "name": "address", "ofs": 95, "len": 40 },
               { "name": "zipcode", "ofs": 135, "len": 8 },
               { "name": "city", "ofs": 143, "len": 32 },
               { "name": "active", "ofs": 194, "type": "boolean", "len": 1, "true":" ", "false":["S","I"], "trim":"false" },
               { "name": "phone", "ofs": 195, "len": 15 },
               { "name": "fax", "ofs": 210, "len": 15 },
               { "name": "value", "ofs": 522, "type": "integer", "len": 4 },
               { "name": "date", "ofs": 538, "type": "date", "dateTimeFormat": "%Y2%M3%D2", "len": 6 },
               { "name": "number", "ofs": 564, "type": "float", "decimalCount": 2, "padChar": "0", "len": 7 },
               { "name": "email", "ofs": 600, "len": 0 }
            Check ObjectNotation demo and LINQ demo for sample data.
         - Added many new methods to kbmMWLINQ:
             AsMyDataset which will return a developer owned dataset.
             AsMyDataset with various mapping arguments, which will allow
               for returning only specified fields under specified names.
               Syntax: OldFieldName=NewFieldName;....
             AsOn with various mapping arguments for field names. See above.
             UsingTXT which will take a TXT JSON definition in the AFields argument.
               It will parse fixed format text fields using some default settings.
               If more detailed settings are needed, use UsingON and provide
                  the result from a TkbmMWTXTStreamer.
        - Updated TkbmMWONFormat in kbmMWObjectNotation.pas to support multiple (max 10) variations
          of text representing boolean false/true, Null, INF+ and INF-
        - Improved TkbmMWStringBuilder with many variations of two new functions:
          Overwrite, Insert, which allows updating existing content, and auto
          size the buffer if the overwrite or insert is outside existing buffer size.

       	Changes/minor additions
        - Improved datasource binding to fall back to binding to the datasource instance itself
          rather than its records, when the binding member is not a field name.
        - Added OnAttemptAutoBind event to TkbmMWBindings instance. Can be used for
          ignoring specific properties or instances while attempting to autobind.
        - Added anonymous function argument to AutoBind which will allow
          filtering which instances and properties should be autobound.
        - Added overloaded PeerSubscribingFor method to be used instead of providing
          -1 as SpokeID in original PeerSubscribingFor, which now only takes a cardinal.
        - Added overloaded AllSubscriptionsFor method to be used instead of providing
          -1 as SpokeID in original AllSubscriptionsFor, which now only takes a cardinal.
        - Added Trunc to TkbmMWDateTime which returns an integer Delphi style datetime value.
        - Added mwsloExceptOnValueError option to kbmMWSQLite connection pool. If specified, value
          conversion errors will not be silently ignored.
        - Improved Use.AsType<T> to support T being an interface as well as an object/class.

        - Changed SpokeID from integer to Cardinal in kbmMWServerMessagingTransport.pas
        - Introduced some FPC compiler support changes. It still do not support FPC.
        - Fixed bug premature freeing data in a LinqStage which was marked as shared or not owned.


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.