What's New in DataFlex 2025
DataFlex 2025 introduces new Dashboards, Composite Classes, a Navigation Designer and more.
Changes Between Releases
This page lists all new features in DataFlex 2025.
See DataFlex 2025 Final Release Changes for the specific list of changes between Release Candidate 1 and the Final Release.
See DataFlex 2025 Release Candidate 1 Changes for the specific list of changes between Beta 2 and Release Candidate 1.
See DataFlex 2025 Beta 2 Changes for the specific list of changes between Beta 1 and Beta 2.
See DataFlex 2025 Beta 1 Changes for the specific list of changes between Beta 1 and Alpha 1.
Compatibility Notes
DF_DATE_4_STATE_ONLY_ON_PARSE is now turned on by default
We added the DF_DATE_4_STATE_ONLY_ON_PARSE attribute in DataFlex 24.0 and left the default as off. We are now changing the default of this property to be on, as this is the better behavior.
Overlap Fields are now obsolete
Overlap fields have been deprecated since we introduced multi-segment relationships in DataFlex 11.0 (2005) and we have been encouraging developers to switch to newer, better alternatives ever since. As of DataFlex 20.0, when we added Unicode support, overlap fields that overlap any non-ASCII fields no longer work and we have no plans to change this. Overlap fields are now officially obsolete.
RunProgram no longer falls back to command prompt calls
RunProgram no longer falls back to command prompt calls (comparable to Shell).
Note: if your program no longer starts, you will have to use the Shell attribute.
- Users that called a
.batfile should now do that usingShell. - Users that depended on capital
.EXE,.COM,.BATbehaviors should now do that usingShellin the.batscenario.
Standard Password Hashing changes to the cWebSessionManagerStandard class
The cWebSessionManagerStandard class now does password hashing out of the box using the PBKDF2_HMAC_SHA_512 algorithm. This means that if you did not already implement a hashing algorithm and abstract the UserLogin and/or other functions, the passwords in the database would previously have been plain text.
See Standard Password Hashing for details and migration information.
The password column of WebAppUser must now be at least 128 characters long
If you have existing workspaces with WebApps using the WebAppUser table, you will need to adjust the password column to accommodate the new password length. New workspaces will automatically get the table with the new column size.
Renamed incorrectly named constants in cWebSessionManagerStandard.pkg and Language_WebApp_xxx.inc
We fixed typos in two constants:
C_$WebAppSesionValidateFailedis nowC_$WebAppSessionValidateFailedC_$WebAppSesionSaveFailedis nowC_$WebAppSessionSaveFailed
Codejock controls updated to the latest released version (24.0.0)
There should be no impact on compiling your programs, but we encourage you to test your Windows applications.
The WebApp Designer is not a panel anymore
Instead of being a dockable panel within the Studio, the WebApp Designer is now shown as a tab. It behaves the same as the Windows Designer, so a file can be toggled between the editor and the designer using F7. A file can also be opened in a separate designer tab using the "Open designer in separate tab" context menu item.
The Default Username and Password for WebApps has changed
The default username and password provided in the WebAppUser table for a new WebApp and the sample WebApps has changed from Guest / guest to admin / admin.
Migration
The migration wizard's only change for workspaces already in versions 20.0 (and later) is to update the SWS file.
Workspaces currently in versions prior to 20.0 will have their file list inspected for any OEM tables and their projects’ CFG files adjusted to accommodate compiling in 64 bits. Those workspaces may be adjusted further depending on the version of DataFlex the workspace is actually coming from.
JavaScript Engine migrated to EcmaScript6 (ES6) Classes
All the JavaScript code of the WebApp Framework has been refactored into actual JavaScript ES6 classes. Previous versions used so-called "pseudo classes" (a custom-built class system using df.defineClass). Now that all supported modern browsers support the class syntax, the pseudo classes have been deprecated. This change is primarily visible for developers doing JavaScript extensions to the WebApp Framework (for example, building custom controls).
- It is recommended to migrate custom controls to the new ES6 format. Pseudo classes were already compatible with ES6 classes (both are prototype-based), so many existing controls will still work.
- Support for subclassing using pseudo classes (
df.defineClass) is added but has limitations: the constructor of the base class is called before the constructor of the subclass, andbase.constructoris now an empty function. Old-style mixins (df.mixin) do not work with the new framework classes.
See the ES6 Conversion Guide for details on migrating your JavaScript classes to ES6.
New Features
Regular Expressions Class
The new cRegEx class is a runtime addition that provides the ability to use regular expressions in DataFlex programs without third-party dependencies. The class is based on PCRE2 (Perl Compatible Regular Expressions). Developers can use this class for finding, matching, substituting, and extracting with improved performance.
Refactored and Extended API (Beta 2 changes)
The cRegEx API has been extended and refactored. To avoid confusion with database find operations, method names were changed:
Find→MatchFindAll→MatchAllFindAllGroups→MatchAllGroupsFindAllExCallback→MatchAllCallback
Note: Match now returns the offset of the first match; 0 means no match.
New methods and properties were added: SubstituteAll, MatchAllOffsets, and properties such as pbMultiline, pbGreedy, pbAnchored, pbIgnoreCase, pbUnicodeProperties.
Demo & Test View
The WebOrder sample now contains a view that demonstrates the regular expression engine and serves as an environment to test and develop regular expressions.
Find the view in the menu under Demo > Regular Expressions.

Studio Find in Files
Regular expressions can now be used when searching through multiple files. The Find in Files dialog has been modified to allow regular expressions to be entered.

Dashboards
A set of controls has been added to create dynamic dashboards in DataFlex WebApps or via FlexTron in Windows applications. Dashboards are customizable by end users and consist of configurable tiles/widgets that function independently.
See Dashboards Quick Start for more information.

Key classes:
- cWebWidgetContainer hosts a dashboard and stores the dashboard configuration (layout, widget positions, widget configuration).
- cWebWidget represents a widget; multiple instances of a single widget can be placed on the dashboard with different configurations.
- cWebWidgetPalette is a helper class used to render a widget.
Studio support is added with the WebApp Designer able to model widgets; templates are available for the dashboard and widget.
Composite Classes
The Composite Class is a new object-oriented class type that allows creating compositions of multiple objects. A Composite can be instantiated like a Class, but the scope between Composite and End_Composite is written like an object. This allows nested objects and procedures and is comparable to an instantiable template.
This class is useful for creating components that instantiate multiple objects as a single component (for example, a cWebWidget) and for handling complex Dynamic Objects where the framework automatically picks up nested objects.
Navigation Designer
The Studio includes a new Navigation Designer panel to help develop drill-down applications. It visualizes navigation paths between views and widgets by reading WebRegisterPath instructions. It also allows generation of new views by dragging from the palette onto the designer and suggests views based on tables and relations. From the Navigation Designer, views can be opened, deleted, and removed.
See Using the Navigation Designer for more information.

Configurable Object Names for Navigation Designer
Previously, objects created by dragging a view block from the palette onto the Navigation Designer had fixed names (oSelect, oZoom, oZoomDetail). That naming is now configurable in Studio, enabling developers to define the naming pattern.
Configure this in Tools > Configure Workspace. On the Workspace Preferences tab, Navigation Designer options include forms for Select, Zoom, and Detail where a name format can be entered using ${TableName} to determine the pattern for new objects.
Note: objects already created will not be renamed to follow the new pattern.

Standard Password Hashing
The WebApp Framework now supports out-of-the-box password hashing.
Automatic Primary Key Columns
When creating a new table in the Studio, you can now automatically add an auto-increment column. The Create New Table dialog includes a checkbox which, when checked, adds an aId column and a unique index based on this column. When using SQL, the index will be marked as primary key and the column will be marked as an identity column.
When using the embedded database, a system table named DFLastId will be used for auto-increment behavior. New workspaces will include this DFLastId table.
Read more in Automatic Primary Key Columns.
Changes in Primary Key Creation (Beta 2)
In Beta 1 the auto-created primary key was configured through a checkbox defaulting to true. In Beta 2 this was enhanced to offer an option for creating a primary key and to remember the table selection for the Studio session.
Read more in Automatic Primary Key Columns.
Configurable name for ID columns
The automatically created ID column name format is now configurable via Tools > Configure Workspace. In the Table Editor group, the "Primary key format" form lets developers define the name format for new ID columns using ${TableName}.
Note: column length is limited to 32 characters and the table name will be truncated to fit the defined format.

Added COMP$TIMESTAMP for compile-time build timestamp
A new Define/Replace is globally available: COMP$TIMESTAMP. It is defined as the UNIX UTC timestamp (number of seconds since 1 January 1970) as a constant UBigInt. This provides a locale-independent build timestamp.
Example:
Move COMP$TIMESTAMP to ullUnixUTC
For date/time calculations, see the Date & Time library.
Improved Performance when loading Workspaces
Collecting view-generation information previously required opening every table and parsing every DDO, causing delays when starting the Studio. This process has been moved to the initial opening of the Navigation Designer, reducing startup time. Also, "Cannot open table…" errors when a database connection was not successful at workspace opening have been eliminated.
Web Themes are now configurable using CSS variables
Web themes now use CSS variables for main colors and some dimensions, allowing configuration without changing the theme files (easier updates). The full list of variables is at the top of the Theme.css file. Place custom variable overrides in CssStyle/Application.css.
Example (changes main colors for the Df_Material theme):
:root{
--df-MainDark: #567d2e;
--df-MainRegular: #7CB342;
--df-MainMedium: #89ba54;
--df-MainLight: #a3c97a;
--df-MainLight2: #cae0b3;
--df-MainLight3: #e4efd9;
--df-MainLight4: #f1f7ec;
}
Improvements and Bug Fixes
Studio
- Redesigned the Start Center with new tabs and a clean, modern look.

- Implemented a new style for the Studio Dashboard.

- Added Close Workspace button.
- Properties Panel: allow multiple quotes in before & after compile parameters.
- Table Explorer: added context menu option to view table in Database Explorer.
- Workspace Explorer: no longer automatically closes missing files.
- Automatically saves invisible files when closing the Studio/Workspace. Invisible files are open in background (non-visible editors), such as those used by the Navigation Designer. These will now be saved automatically instead of showing as pending changes. Files with pending changes that are open as tabs will still prompt for confirmation.
- Moving a Web Control horizontally within the flow layout with
piColumnIndexnot set will place it one column to the left. - Find in Files now seeds Code Editor find so that F3 can find the next hit within a file.
- Custom class can now be specified for fields dragged from DDO Explorer.
- Improved Studio performance when switching between tabs.
- Fixed error "LINK ERROR: UNABLE TO OPEN FILE" when compiling a WebApp.
- After/Before compile no longer strips quotes from parameters.
- Added option to 'Close Workspace' to the File menu in the Studio.
- Added option to view a table via Database Explorer to Table Explorer's floating menu.
Compiler
- Optimizations for the compiler (gaining ~10% compile speed).
- Fixed linker issue with files that have non-ASCII characters in their file name.
Connectivity
- Fixed memory leak in SaveRecord for MS SQL.
- Fixed SQLBindFile error for DateTime columns.
- Improved
EnumerateServersLocalwhich could sometimes return nothing. - Database driver DLLs are now code-signed.
- Triggers larger than 2,000 characters in SQL Server were not recreated during restructuring.
cSQLExecutor: DB2 prepared execution generated "Invalid cursor state" when executed a second time.
SQL Executor
- Fixed issue where SQLExecutor returned no result set after INSERT of empty result set.
DataDictionary Inspectors
- Added Ctrl+Q as an accelerator to Windows and Web DD Inspectors (in addition to Ctrl+D). Ctrl+D was fine for Windows (D = debug), but Ctrl+D in browsers opens "Add bookmark". Ctrl+Q avoids that conflict. Focus must be in a focusable object for the inspector to pop up. Ctrl+D is retained for backward compatibility.
Database Explorer
- Different icons now identify descending or case-insensitive index segments.
- Error dialog in Database Explorer can now be resized while maintaining layout.
- Fixed errors when accessing filters in Database Explorer.
Debugger
- Dragged global or local variables can now be dropped onto the Watches window.
Examples
- Added a new example in Specialized Components to demonstrate collations using ICU.
DemoCollate.vwwas added toShowCollate.src. - Adjusted WebOrder examples to use theme colors rather than hard-coded background colors.
- Fixed RAW file error in Basic Report of Order Entry Example when choosing Print instead of Preview.
- Installed Examples now use
DFLastIDas the Auto Increment table.
Installer
- Fixed case sensitivity issue with path to
WorkstationSetup.exe.
Packages
- Fixed message displayed for client/server version check.
UpdatePageTitlenow correctly updatespsApplicationTitle.- Added
SetUserPasswordfunction tocWebSessionManagerinterface. cWebParentCombodid not expand/show list whenpeLabelPositionwas set tolpFloat— fixed.- Removed legacy
SelectWorkspace.dgand related translation constants (used in DataFlex v8-11).
Registration Program
- Registration Program can now be resized for better display of license information.
Runtime
- Fixed sizing issue with a
dbViewbeing maximized then reopened. - Changed
Modfunction return type back toLongPtrto fix expression typing issues. - Fixed CodeJock Windows 10 and Windows 11 themes that displayed black on black.
Studio (additional fixes)
- Restrict calls to Reconciling/Rebuilding libraries to processes that update
classlist.xml— should help load workspaces faster. - Fixed resizing Codejock grid columns in the Windows Designer.
- The Studio no longer adds a BOM to non-DataFlex source files.
- Web Designer did not get focus when switching back from Table Explorer — fixed.
- Studio no longer saves an extra space to the end of
64BitSuffixif that setting is blank. - Corrected code placement for Properties when objects are created via a DFO file.
- Enhanced options to make setting identity column easier.
- Corrected label in Conversion Wizard for MSSQL from Owner to Schema.
- SQL Conversion Wizard: selected wrong index for PK when there was a gap in index numbers — fixed.
- Adjusted Workspace Dashboard style to better accommodate numbers above 100.
Web Controls
- Fixed rendering issue with
cWebTabContainerwhen navigating back. - Labels of cWebList grouping selector are now translated.
ActionMode scModeWaitwas not blocking when insidecWebModalDialog— fixed.- Fixed sizing issue with lazy rendering of tabs in
cWebTabContainer. - Fixed
cWebDrawinglocalization issues with floats. - Improved
df.defineClasscompatibility for non-ES6 custom controls. - Fixed
cWebTagsFormnot showing initial tags. - Fixed bug in Dynamic Object Container when using nested dynamic objects.
- Fixed Dynamic Object Container storing handles in server web properties.
- Fixed
cWebMenuButtonJavaScript error and positioning issue. - Added
peVerticalAlignproperty tocWebColumn. cWebDynamicObjectcontainer now checks for#and$characters in dynamic object IDs (those are not allowed).- Fixed Web Control locking issue exposing itself with
cWebFormOnChangeevent. UpdateSubNodesofcWebTreeViewbefore expand no longer causes error when expanding later.cWebParentComboshould not callEstablish_Find_Directionas this might clear the first item'sRowId.- Escape key no longer closes
cWebModalDialogwhenpbServerOnEscapeis true andOnEscapedoes not close the modal dialog. - Fixed uncaught error in dev tools console when removing all groups from web lists.
- For
cWebDDOHost_mixinclasses (cWebGroup,cWebCard),Main_DDat runtime now delegates to its parent if there is no DDO structure in the object. This restores backwards compatibility with the Server behavior. cWebComborequired 2 clicks to expand — fixed.- WebListExpandPanel swiping did not work when a swipe button was present in the main list — fixed.
FlexTron
- Improved focus control when using Web Controls in a
cDbLocalWebControlHost. - DataFlex Reports report generated an error in FlexTron example — fixed.
Web Framework
- Take
pbScrollinto account when calculating center panel height; make it work without settingpbFillHeight. - Fixed a CSS issue in the Windows-Like theme for
cWebMultiSelectList. - Fixed a memory leak in
cWebDynamicObjectContainer. - Fixed
cWebServiceauto-generated documentation parameters. - Fixed issue where
cJsonHttpTransferwould not send anapplication/jsonAccept header.
WebApp Administrator
- Fixed Web Application Administrator becoming very small.
Documentation Changes
What's New
- Replaced many screenshots with higher-quality versions.
- Added ES6 Conversion Guide.
Tutorials
- Updated Tutorials to DataFlex 25.0 standards.
- Replaced many screenshots.
- Renamed tables and columns in samples to match updated sample workspaces.
- Added
DFLastIDsystem table usage. - Removed "Skinning Your Windows Applications" tutorial (no longer recommended).
Tools / Studio
- Renamed Visual Designer to Windows Designer (help page names kept for compatibility).
- Clarified WebProperty pages with supported data types.
- Updated documentation for menus and toolbars in the current Studio.
- Copied Navigation Designer page from What's New to Studio documentation.
Development Guide
- Added info on using
displayViewanddisplayAppto "The JavaScript Engine" page. - Added info and samples for grouping manual web lists to WebList Grouping topic and
cWebListclass page. - Updated JavaScript / Custom Web Control pages with new ES6 syntax after framework refactor.
- Added "Configurable Widgets" page.
- Corrected
dfdebugreferences (wasvdfdebug). - Documentation of
Trim_Varchar_Valueswas completed and added toDB2DRV.INTandODBC_DRV.INTpages.
Language Reference
- Fixed indentation of arguments in
Include_Text. - Added documentation for the
Compositecommand. - Added docs for:
tWidgetConfigProp.mdtWidgetConfigPropSettings.mdtWidgetConfigPropValue.mdtWidgetDef.md- Corrected explanation in
DF_DATE_4_STATE_ONLY_ON_PARSE(String and Date types were reversed). - Fixed
SearchArrayreference toSortArrayin theBinarySearchparagraph. - Completed documentation of
Trim_Varchar_Valuesand associated attributes.
Class Reference
- Added predefined values to constants in Class Reference (values now appear in parentheses).
OnDefineRowCssClass: corrected CSS example and added note about global buffers having the proper record loaded for a data-aware grid.- Updated
cRegExdoc with latest changes. - Added docs for widget classes:
cWebWidgetcWebWidgetConfigurationWizardcWebWidgetConfigurationWizardStandardcWebWidgetContainercWebWidgetContainerContextMenucWebWidgetPalette- Added doc for
pbUpdateApplicationTitle. - Added doc for
cPasswordHasherclass. - Clarified
DfDateToSqlDateexample differences between SQL Server and other drivers. - Updated docs to reflect
Main_DDdelegation behavior forcWebDDOHost_mixinclasses.
Deployment Guide
- Installation & Environment Guide: fixed naming for DataFlex Windows Client installation EXE; updated to 25.0.
Miscellaneous
- Fixed a number of typos (including "paramater").