Version 2025's AI-based generative code technology provides WLanguage code suggestions as developers type, drastically reducing the time needed for coding.
One of the advantages of AI-powered WLanguage code generation comes into play when developers need to develop for a domain they are not familiar with.
Now developers can simply write a comment describing the desired process and AI will generate suggestions based on the context of the current code and project.
AI-based WLanguage code generation is also useful for developers new to WINDEV, making it easier for them to discover the incredible possibilities of a 5GL.
Here too, writing a comment describing the desired process is all it takes to generate the corresponding code, based on the context of the current code and project.
This powerful generative AI feature is provided at a relatively early stage.
New functionalities will be added over time, and the engine itself will improve through self-learning.
The new Segmented Button control can be understood as a set of ON/OFF buttons grouped together in a single control.
By default, this control uses a cohesive design language.
As users expect, the control supports single or multiple choices.
The content of each choice can be a text or an image. Programming is much simpler.
You can transform a Check Box control into a multiple-choice Segmented Button control, or a Radio Button control into a single choice Segmented Button control.
Programming a Segmented Button is much simpler than programming a set of Radio Button, Check Box or Switch controls.
In the code of a Segmented Button control, you can:
The Reactive keyword indicates that the procedure must observe the variables and controls used in its code. The keyword also tells the procedure to execute if any change is detected.
A Reactive Procedure can be global (and therefore permanently reactive), local to a window or local to a control.
Reactive Procedures offer 2 options:
A Reactive Procedure can modify a variable or a control used by another Reactive Procedure. In this case, the other Reactive Procedure will be executed.
The framework implements the necessary security mechanisms to avoid calls in a loop, for example.
Desired processes in this window:
REACTIVE PROCEDURE Shipping_modes()<delay=1s>
GR_SHIPPING..Grayed = True // Default
IF CBOX_GTC[1] = True THEN
RADIO_SHIPPING_MODE..Grayed = False
SWITCH RADIO_SHIPPING_MODE
CASE 1 // Delivery to one address
COMBO_ADDRESS..Grayed = False
CASE 2 // Delivery to a relay point
COMBO_RELAY_POINT..Grayed = False
CASE 3 // Store pickup
END
END
With a Reactive Procedure, all of these processes come down to 11 simple lines of code! In this example, you can simply create a Local Procedure in the window, and declare it as a Reactive Procedure. That's it.
This procedure will be executed automatically when CBOX_GTC or RADIO_SHIPPING_MODE changes value, e.g. when a user selects an option.
Reactive Procedures are used to automatically trigger the execution of processes.
A Reactive Procedure is executed when a variable or the value or content of a control used in the procedure is modified, either by the end user or programmatically.
Key takeaway: The procedure is automatically executed when a variable or a control changes.
Entering an amount before and after tax.
When an amount is entered in a control, the other controls update automatically.
Of course, you could write this operation in WLanguage, directly in each control.
In that case, you would need to create a procedure that performs the calculation, and include a call to this procedure in the Modification process of each of the 3 controls.
In version 2025, you only need to indicate that the calculation procedure is a Reactive Procedure.
The WINDEV framework listens for changes in controls and variable values and automatically executes the procedure when a change is detected.
There's no need to write the calls in every control where changes can be made.
No manual actions required, no files to load, no parameters to define. When you use a password vault, it's automatically loaded with the executable. Yet another advantage of WINDEV's total integration.
The vault itself is password-protected. You can create several passwords to access the same vault.
There are 2 password levels:
For example, the project manager can hold the master password, and create a secondary password for each developer who is authorized to create or modify passwords.
In version 2025, plain-text passwords in the code are detected and generate a warning at compile time. This check can be enabled in the compiler options.
The new modifier will instantly become an essential tool in your workflow.
This new pane offers a smart, user-friendly view of the properties of the current window, page, control or group of controls.
Properties are sorted by relevance, according to the control. Each property is represented visually, providing a much better user experience.
The new modifier is available for all elements:
The layout adapts to each element, while maintaining overall coherence.
Changes made in the new modifier are immediately reflected in the current element.
The ribbon contains all available controls. With so many controls to choose from, it can become difficult to find your way around.
In version 2025, a new control creation pane allows you to easily create the controls you need.
Of course, the ribbon is still available.
The new pane offers a much clearer layout. Controls are grouped by categories.
Each control is presented in a thumbnail.
The pane can be positioned on the right or left of the environment, or can be undocked.
The control creation pane contains a number of smart and essential features:
WEBDEV 2025's page editor introduces an incredible new feature: a sophisticated 3D view of page controls.
This 3D view will quickly become essential for managing container controls: Flexbox, cells, etc.
You can enable this 3D view either for the entire page, or for a given container.
You can open the description window of any control from this view.
This 3D view includes some essential functionalities:
This makes it easy to visualize nested and stacked controls.
You have the ability to work on 2D and 3D views simultaneously.
When a control is selected in one view, it is automatically selected in the other view.
It is therefore possible to select a control in the 3D view and immediately edit it in 2D.
The presence of a certificate on a server guarantees that users are visiting the domain they searched for.
It makes it impossible to copy the domain name.
Websites are accessible via HTTP.
HTTPS is the secure version of HTTP.
Basically, modern browsers no longer allow visiting websites that do not use HTTPS.
Installing a website therefore requires implementing HTTPS, and therefore requires the presence of a certificate on the server.
Let's Encrypt certificates are widely used. These are free certificates generated automatically by the ISRG organization, which is mainly financially supported by Google.
WEBDEV Application Server 2025 automatically manages:
To use a Let's Encrypt certificate on a WEBDEV server, simply check the "Automatically generate a Let's Encrypt certificate" box in the account for which the certificate is to be activated.
You can specify the domain name(s) that will be protected by the certificate.
WEBDEV Application Server 2025 takes care of everything!
It is of course possible to use certificates other than Let's Encrypt certificates.
In this case, all you need to do is install and manage the certificates manually.
The OAuth protocol is an open standard used to issue secure authorizations.
An OAuth authentication server manages the following aspects:
An OAuth authentication server can be hosted on a physical server of any type: local network ("on premise"), hosting provider, cloud, etc.
WEBDEV Application Server 2025 includes an OAuth authentication server by default.
To use this authentication server, simply activate the OAuth authentication server option when installing WEBDEV Application Server in version 2025.
This authentication server greatly simplifies installation, administration and programming, at no extra cost.
This authentication server can also be used for SSO authentication.
The OAuth authentication server provided with WEBDEV 2025 includes every functionality you might need.
In particular, the server manages an account database, as well as an account administration website, where you can create and edit accounts, import accounts from an LDAP directory, etc.
Once OAuth authentication is implemented in a website or application, users must provide login credentials.
This step is managed by the authentication server.
You can customize the login page.
If a user forgets their password, this page allows them to get a new one.
You can create new accounts from the login page.
2FA (via email or authenticator apps) is supported.
The AuthIdentify WLanguage function manages authentication and opens the login page.
A third-party language can use the WEBDEV authentication server via HTTP requests.
Tokens are generated by the server and identify a given user.
When creating OAuth credentials ("Client ID/Secret" pair), you can define scopes, which determine the authorizations of the token.
The OAuth server automatically handles the user's request to use one or more available scopes.
Tokens are automatically refreshed.
WEBDEV enables you to easily create REST web services.
In version 2025, you can also create REST web services that require an OAuth access token.
WEBDEV 2025 takes care of everything!
To access certain web services, an access token is required.
Users must therefore obtain the token to call those web services.
OAuth is a standard protocol that allows them to obtain this token.
Reminder: OAuth lets you manage access authorizations.
This token is provided by an authentication server, using the OAuth protocol.
Simply create a web service as usual. In the web service description, specify the address of the desired authentication server.
With WEBDEV 2025, that's all you need to do.
oauth_parameters is OAuth2Parameters
...
// Authentication request
MyToken is AuthToken = AuthIdentify(oauth_parametres)
// Retrieve number of invoices for the logged-in user
req is httpRequest
req.AuthToken = MyToken
req.URL = "http://serv.mycompany.com/V1/Billing/Invoice?num_invoice=" + num
req.Send()
For more specific authorizations, you can use detailed permissions, known as "scopes".
This type of authorization is defined through a specific interface in the authentication server.
Some examples include: write access, access to a specific resource, etc.
You can specify the scopes required for each web service entry point.
A secure web service requires an OAuth server. WEBDEV 2025 lets you choose between:
If you are using a third-party authentication server, simply check that it has the necessary services.
Single Sign-On (SSO) offers a practical approach to user authentication processes.
Users enter their login credentials once, and these credentials are then automatically recognized by all the other websites they access. This means users don't need to enter their login credentials multiple times.
The login/password pair is stored only on the authentication server, making access easier and more secure
Everything is managed automatically for sites developed with WEBDEV 2025.
Each site that uses SSO must call an authentication server.
The authentication server:
This authentication server comes as standard with WEBDEV Application Server 2025.
WEBDEV 2025 uses the OpenID Connect protocol, which allows other websites (not developed with WEBDEV) to use this authentication server.
To implement SSO, websites must know a secret key issued by the authentication server.
To authenticate a user, the website must call the AuthIdentify WLanguage function, one of whose parameters is this secret key.
The first time a user tries to log in, a login page defined by the authentication server is displayed. The server issues a token (stored in a cookie).
Next time users try to log in, this cookie will be automatically detected, and access to the site will be granted.
There's no additional programming. The AuthIdentify WLanguage function takes care of everything.
Two methods are available to implement SSO in a WEBDEV site:
The easiest way to use SSO in a WEBDEV site is to use the integrated User Groupware. With this method, all you need to do is specify the authentication server access parameters in the GPU settings window. Can't be any easier than that.
This method is best for sites that don't use the User Groupware.
Programming is simple as always, thanks to the AuthIdentify and OpenIDIdentify WLanguage functions.
A printed report may contain different types of content on the front and back of the page.
A typical example is an invoice, printed on one side of a sheet, with general terms and conditions of sale printed on the reverse.
In version 2025, it becomes possible to print two different reports on both sides of the paper.
The preview of a report containing a different front and back side shows the pages side by side.
The new iInitReportVerso WLanguage function is used to specify the name of the report to be printed on the reverse side.
This report can be printed on a single page, or on several pages.
If there are more pages on the reverse side than on the front side, you can use "blank" pages on the front.
You can also use a PDF document on the back of each page.
// Print the General Terms and Conditions on the back of the invoice
iInitReportVerso(RPT_GTC)
iPrintReport(RPT_Invoice, Invoice_Number)
The new ScanFromCameraToImage and ScanFromCameraToPDF WLanguage functions are used to take photos with a smartphone, and transform them into a ready-to-use document.
All unwanted elements are removed, and perspective distortion is fixed, if necessary.
One common case scenario is scanning a hand-signed document.
The WLanguage function captures the image, detects the document and creates a representation within a parallelogram. The user can adjust the document area.
Once the user confirms changes, any perspective distortion is corrected.
Users can scan several pages in a single series.
A single PDF document containing all the pages will be generated.
The new scan capabilities include some advanced options. In this mode, the result returned is an array of variables of type Image.
This allows you to program any process you may need.
For example, OCR can be applied to scanned images by calling the OCRDetectTextArea and OCRExtractTextBlock WLanguage functions.
A common way to confirm an action within an app is to request a code received by SMS.
For most users, this is a cumbersome process, as it implies navigating between several apps.
The "One-time code authentication" Smart control enables your application to automatically retrieve and use this code.
This Smart control uses the new SMSDetectOneTimeCode WLanguage function.
This Smart control takes into account small differences between Android and iOS.
On Android, the whole process is straightforward, while iOS adds an extra layer of security by requiring a confirmation from the end user.
Simply use this Smart control in your application, and let it handle these aspects automatically.
Of course, this Smart control is fully customizable, just like all other Smart controls. You can edit the control, its code, etc.
Apply your handwritten signature to a PDF document directly from your smartphone.
This PDF document may be a scan made with the device.
Simply take a photo of your signature and initials (feature included in the Smart control) and position them at the desired location.
The new "Handwritten signature in PDF" Smart control is included in version 2025.
Reminder: Electronic signatures are also available on mobile applications using Docusign or Yousign.
With palettes, end users can change the look of your application in 1 click.
In the source code, simply use the PaletteChange WLanguage function, indicating the palette to be applied.
The change is applied dynamically by the WINDEV 2025 graphics engine.
A palette is a set of nearly one hundred colors.
Each color is intended for a specific use in the skin template: background, text, rules, etc.
Each color is named according to its use: main_background_color, main_text_color, banner_color, button_background_color, etc.
Once defined, palettes allocate a color to each "color name". For example, button_background_color = yellow or button_background_color = RGB(125,200,36)
When the current palette is changed, all controls automatically switch to the new colors.
This mechanism lets you change the look of an application easily and dynamically.
The new PaletteChange WLanguage function allows you to change the color palette used by a skin template. It is now possible to revamp an application in 1 line of code.
Numerous color palettes are available in version 2025. For example, the "Dark theme" palette lets you easily switch your applications to dark theme.
The new PaletteGenerate WLanguage function generates a color palette based on the Windows accent color currently in use on the end user's computer. This makes it easy to obtain a UI that matches the dominant color of the PC in use.
The PaletteGenerate function can also be used to create a specific color palette. This is particularly useful when a project has to comply with a specific style book. It is also possible to create additional named colors and include them in a palette.
A skin template defines the style of the controls: control borders, rounding, effects, font and font size, control size, etc. And, of course, skin templates use colors for all these elements. In version 2025, the internal skin template format has been changed from fixed colors to a palette.
When a different palette is applied, icons need to adapt, especially when switching to a dark theme. In particular, icon colors must change automatically to improve readability. For example, in dark theme, icons of any color switch to white.
On disk, palettes are stored as JSON files. This makes it easy to share them between different projects.
You can use a "named color" instead of the value of the color, anywhere in WLanguage code. This includes functions, properties, etc. The same applies to the 7-tab window.
An electronic invoice takes the form of an A/3 PDF document (human-readable) and an XML document (for applications) containing the invoice data. WINDEV allows you to:
WINDEV has all the functionalities that allow vendors to send invoices to a public portal and buyers to retrieve invoices from the portal:
It was already possible to automate links with the French Chorus Pro portal (implemented for public procurement). Now, it is also possible to create electronic invoices in Factur-X format.
The new Pictorial Percentage chart appears in version 2025.
This new chart visually illustrates data as percentages, using shapes, such as bottles, human silhouettes, thermometers, etc.
This makes information easier to understand at a glance.
The new Pictorial Percentage chart uses the same programming as any other standard chart.
You can specify the desired images programmatically, or via the 7-tab window.
Supported formats are vector (SVG) or bitmap (JPEG, PNG, etc.).
Vector format is recommended for images that are likely to be resized, without losing quality.
You can manipulate this type of chart using gr functions.
The new "Apollo" skin template is introduced in version 2025.
Benefint from new customization possibilities.
Use these templates in your applications and software packages, as well as all the skin templates provided with WINDEV.
Don't forget you can apply a palette to change colors, and also create your own skin templates.
Version 2025 includes the new "Emerald" skin template. Feel free to use it to customize your apps!
Feel free to use these templates for your apps, as well as all the templates provided with WINDEV Mobile.
Don't forget you can apply a palette to change colors, and also create your own skin templates.
With WINDEV 2025, your applications can easily integrate Yousign solutions. These electronic signature functionalities comply with European regulations (eIDAS).
All three types of electronic signature are supported:
Yousign includes a useful mode called "Approver".
This mode enables one or more recipients, not necessarily signers, to approve a document before signing it. This can be a legal or technical approval, for example.
This feature is natively supported in version 2025.
WLanguage functions are available in the form of an Internal Component, with their source code.
The functions allow you to:
All aspects of verification, emailing, ID verification and document storage are fully handled by the service provider (Yousign).
To simplify development, an intuitive wizard generates the necessary code.
To handle special cases, all the APIs provided by Yousign can be accessed via a WLanguage call.
All entry points are available directly in the code editor.
Yousign offers several types of subscription, giving access to different types of signatures.
To access all the capabilities of APIs, you need to choose an API subscription.
TLS allows you to provide a unique copy of a global variable for each thread.
This makes it possible for several threads to use global variables without overwriting them.
In version 2025, threads using procedures are executed up to 8 times faster.
Procedure calls in threads are now significantly faster.
In version 2025, you can force conversion from one simple type to another (e.g. Integer to String) without using a local variable.
product_ref is string = (string) 378 + (string) 578
// -> Returns 378578 instead of 956
Developers are having to manipulate increasingly large JSON files, in some cases up to several GB in size.
For instance, the French government provides very large land registry files encoded in JSON format through the OpenData portal.
Version 2025 introduces a new way of accessing JSON content.
This mode allows you to manage content of unlimited size. The usual mode loads the entire JSON content into memory, which could cause performance or memory usage issues depending on the size of the JSON file.
The new jsonReader type and the new JSONOpenReader function make it possible to read JSON content without having to load the whole content into memory.
In version 2025, you can merge a certificate file without a private key and a private key into a new certificate file in pfx format.
This is particularly useful for OpenSSL users (but not only!).
When searching emails in an IMAP session, you can use the EmailSeekFirst WLanguage function to specify a search criterion. Some examples include: sender name, recipient name, subject, message body, etc.
You can write SQL queries directly in the code. In version 2025, the data source of these queries can itself be a query coming directly from the code.
A WINDEV application can launch another application (another process) written in WINDEV or another language. This mainly involves applications in console mode (launched from a command line).
In version 2025, it is possible to read data from the standard output (stdout) and standard error output (stderr).
It is also possible to write data to the standard input (stdin). This allows you to control the process launched, and retrieve the process report.
The ZipAddFile compression function, which adds files to a Zip archive, is up to 4 times faster in version 2025.