What's new in version 7.0
This article describes how version 7.0 differs from versions 6.x: which capabilities it adds and what has to be taken into account when moving to it. Version 7.0 has not been released yet: the article describes the current state of the master branch and is extended along with it.
The full list of issues included in a release is in the changelog CHANGELOG.md, which is generated when the release is made, in the branch of its version. Changes that can break an application after an upgrade, together with the ways to restore the previous behavior, are described in MIGRATION.md.
Moving to version 7.0
- The client and the server are upgraded together: the API version has changed, and a client of version 6.x does not connect to a server of version 7.0.
- The external API is disabled by default: the working parameter
enableAPIis now0(it used to be1), so/exec,/evaland HTTP calls of actions are refused until the API is enabled globally or for the roles that need it. A user with access to theSystem.interpreterform keeps access to the API. Which other calls are allowed and how to restore the previous behavior is described in MIGRATION.md. - Incorrect logic no longer goes unnoticed: an application that used to start may fail to start or fail at run time if another session or a user interaction runs inside a transaction (#1726), a property depends on itself, a top-level navigator folder has no
WINDOW, or theCUSTOMof a window or a container is inconsistent. The error messages and the ways back for each case are given in MIGRATION.md. - Query results and plans may change: order-dependent aggregations and the order of independent global events have become deterministic, and the planner uses indexes more often (see Query planning and performance and MIGRATION.md).
- Removed are the JKanban, FrappeGantt, Chart and Carousel bundled modules (#1739), the design properties
showGroup,changeKeyPriorityandchangeMousePriority, and the working parameters that had no effect or had not changed for years (#1809–#1812, #1820). - Deprecated are
USERFILTERS(FILTERS ... USERis used instead),NEWTHREAD ... CONNECTIONand theDOCKEDkeyword when opening a form (WINDOWis used instead). - Custom Java code (
INTERNALactions, Spring beans) may need changes because of library upgrades: jdom 1 is replaced with jdom2 (theorg.jdompackage becameorg.jdom2), log4j 1.2 with reload4j, and Apache POI is upgraded from 4.1 to 5.5.
Language
- Action return values. The
RETURNoperator can return the value of an expression,TOwrites the result of a call to a property, and actions can be used in expressions (#1561). HTTP actions pass the returned value in the response (#1562). - Dates and times. Arithmetic operators are defined for dates and times (#1570), and a loop can iterate over numeric ranges and date and time intervals (#1571). Iteration operators respect explicitly specified parameter classes (#1489).
- Threads and executors.
NEWTHREAD ... TOwrites the result of a thread to a property,NEWEXECUTOR CLIENTexecutes actions on the client, including with a delay (DELAY) and periodically (PERIOD) (#1626, #1627), and waiting withNEWEXECUTOR ... WAITcan be limited in time. - The
XMLtype. TheXMLbuilt-in class is added; XML namespaces are determined by theEXTIDof the form (#1584, #1585, #1591).JSON,JSONTEXTandXMLvalues are displayed formatted. - New operators. Capture (
SCREENSHOT) captures the current state of the user interface as an image or HTML markup (#1629), the selection operators (SELECT) report which rows and columns of an object group the user has selected, andINPUT MULTIlets the user choose several files (#1608). - Time formulas return a whole number of seconds of class
LONG(#1785),currentYear()returns a value of classYEAR.
Forms
- Form extension, inheritance and composition (#1559) are described in the Form extension article.
- Filters and sortings.
FILTER(S)andORDER(S)use oneUSER | FIXEDnotation (#1594). TheORDER,FILTERandFILTERGROUPoperators change the sortings and filters of a form from an action, on the server (#1856, #1857). TheORDERSandFILTERShandlers fire only on a change made by the user (#1871). - Windows for forms. Windows of the
FORMSkind and theAUTOSIZEwindow option are added (WINDOW); a form can be opened in a named window, andSHOW ... ACTIVATEactivates a form that is already open instead of opening another one.ACTIVATE FORMandCLOSE FORMaddress open forms (#1842–#1844). - Opening and editing.
SHOWandDIALOGaccept an init action (#1588). TheAPPLYproperty option saves the changes right after editing (#1647). An action with an explicitSHOWIFis not hidden because it is implicitly inapplicable in the current state of the form, for example when the current object isNULL(#1613). - User form customizations. A broken customization no longer prevents the form from opening, and the administrator sees and resets the customizations of other users (#1765, #1766).
- Export to Excel includes the
FOOTERrow (#1593).
Custom views and the client
- React views. React draws object groups, containers (
DESIGN ... custom), the forms window and the log window (#1679, #1742, #1743)..jsxmodules work without a separate build step and are processed by the React Compiler without Node (#1708, #1709); a full build is also available forsrc/main/web(#1678). Custom views support trees, sortings and user filters (#1672, #1859, #1860), and theBucketsprimitive simplifies building pivot views (#1703). See How-to: Custom React form views. - Custom view controller.
exec,eval,evalActionandchangeare available from JavaScript in custom views and inINTERNAL CLIENT(#1648); theCUSTOMSform block exposes properties and actions of the form to the controller (#1650, #1692). See How-to: Custom view controller API. - Tables. Rows and columns of a table can be selected, the selection copied, everything selected with
Ctrl+A, and one value pasted into all selected columns (#1597). The sum and the count on the toolbar are calculated over the marked rows (#1712); theTOOLBARBOXcontainer stays last in theBOXof the form, so the components a design adds are placed above the toolbar (#1764). - Modal dialogs.
Esccloses only the topmost dialog, and the focus does not leave it (#1788–#1790). - Web agent. Through a local agent, the web client prints to the printers of the user's computer and writes files to it.
- The desktop client shows HTML captions of forms and navigator elements (#1190) and runs on Java 24 and newer (#1815).
Server, integration and AI
- MCP server. An application can act as an MCP server (#1620) with a built-in OAuth 2.1 authorization server (#1621), through which AI clients access it. The File API lets external systems browse the server resources (#1639).
- Horizontal database scaling with a master server and replica servers (#1458, #1518).
- Checking logic without a database. The
dryRunparameter checks the logic and finds cyclic property dependencies without connecting to the database (#1737, #1757). The check can report several errors at once (#1797, #1798), andlogics.topModuleaccepts a list of modules (#1740). - Working parameters. Any working parameter can be set in
.propertiesfiles, environment variables or with-Dsettings.*(#1814); all parameters are now described. - Other.
INTERNALactions are compiled from.javasources located in the resources (#1707). An exchange can be specified for RabbitMQ (#1768).IMPORT XMLdoes not process external entities (#1728).
Query planning and performance
- Determinism. Order-dependent aggregations and row picks always give the same result (#1700). Global events with no dependency between them run in an order that follows from the logic and does not change from start to start (#1835).
- Indexes. The planner uses indexes for ordered aggregations over columns that allow
NULL(#1727) and when the session has unsaved changes (#1767), and takes into account an interval on any index field, not only on the first one (#1761). Pushing conditions down into aggregations has been reworked (#1699). - Resources. Inside a transaction, temporary tables are emptied with
DELETE(#1792). Startup memory no longer grows with the number of dependency cycles (#1831), and parsing of modules and server startup are faster.