Unlock Version
Lock Version
QGIS (https://qgis.org) is the world's most popular (open source) desktop Geographical Information System (GIS). It is used by people around the world to view, edit, analyse, and share spatial data. It can produce professional-grade cartography products and supports hundreds of spatial data formats. QGIS is a member project of OSGEO, the Open Source Geospatial Foundation that is democratising access to spatial platforms (https://osgeo.org).
We are pleased to announce the new major release of QGIS 4.2, which builds on the solid foundation of the Major Version 4.0 update that transitioned the core of QGIS onto the modern Qt6 framework. This release also bundles loads of performance optimizations and newly introduced features, including multiple enhancements to 3D capabilities and processing tools.
For a whirlwind tour of all the new functionalities introduced in this release, you can view the highlight reel video on YouTube.
QGIS is a community effort, and we would like to extend a big thank-you to the developers, documenters, testers, and the many folks out there who volunteer their time and effort (or fund others to do so) to make these releases possible. From the QGIS community, we hope you enjoy this release!
If you wish to donate time, money, or otherwise contribute towards making QGIS more awesome, please wander along to QGIS.ORG and lend a hand!
QGIS is supported by donors and sustaining members. A current list of donors who have made financial contributions, large or small, to the project can be seen on our list of donors. If you would like to become an official project sustaining member, please visit our sustaining member page for more details. Sponsoring QGIS helps us to fund our regular developer meetings, maintain project infrastructure, and fund bug-fixing efforts. A complete list of current sponsors is provided below - our very big thank you to all of our sponsors!
QGIS is free software, and you are under no obligation to pay anything to use it - in fact, we want to encourage people far and wide to use it regardless of their financial or social status - we believe that empowering people with spatial decision-making tools will result in a better society for all of humanity.
In order to prevent configuration file corruption between changes made to user settings on both QGIS3 and QGIS4 on the same system, the QGIS 4 settings are now completely siloed into a separate directory.
PLEASE NOTE: This will affect automated installation scripts, profile management, and enterprise deployments.
On initial startup, QGIS4 will perform a copy of user profile data from the existing QGIS3 path and clone the settings to a new QGIS4 path. Automated deployments and profile management scripts must be updated to target this new location. This resolves reported issues #61636 and #60088.
Please note:
This feature was developed by Nyall Dawson
This adds Load Style... and Save Style... options directly to the layer menu under the Styles submenu. This will provide users with a quick way to load/save style on a layer, without the need to open another interface or menu.
This feature was developed by Jan Caha
Categorized and rule-based rendering is now available for QGIS 3D Symbology.
Both implementations are similar to the existing vector renderers for 2D styling, so that users have familiar controls for 3D scenes, whilst multiple API enhancements have been applied to support this powerful set of functionalities.
A new 3d material type for exposing the physically based material with full texture map support has been added.
Textures can be specified for:
This feature was developed by Nyall Dawson
This extends capabilities already existing for simple line to hashes and markers line symbol layers.
This feature was funded by Stadt Frankfurt am Main and Oslandia
This feature was developed by Julien Cabieces
A data-defined control for metal rough base and emission color has been added, closing one of the few remaining functionality gaps between the legacy phong materials and the physically based material.
This feature was developed by Nyall Dawson
A data-defined control has been added for control over the texture scale, rotation, and offset for 3D polygons when using either the metal rough or phong textured materials.
This feature was developed by Nyall Dawson
A new, non-default, solid emission color setting has been added to the metal rough material, along with a spin box to also control the strength of the emission. Practically, this allows users to create materials that are not impacted by scene lighting.
The attached image shows a comparison of dark scene lighting with no emission, yellow emission at 100%, and yellow emission at 1000% to demonstrate the effect of this functionality.
This feature was developed by Nyall Dawson
Physically based rendering materials now support opacity, bringing their capabilities closer to the older phong material capabilities.
This feature was developed by Nyall Dawson
QGIS now includes support for managing 3d material settings in the style database (and style manager dialog).
Users can create presets of 3d materials and manage them alongside other style objects (e.g., allowing metadata such as tagging, favourites, etc.).
This feature was developed by Nyall Dawson
Instead of always assuming the model file has been created using a z up, y forward axis convention, expose settings to allow users to manually set the forward and up axes.
This makes it easier to use random obj files downloaded from the internet as 3d point symbols in QGIS. Previous workarounds required manually rotating the symbol, but this prevented the reuse of rotation/scale values and data-defined expressions used by other 3d point symbols.
This feature was developed by Nyall Dawson
Tools are now provided to create, move, rotate and delete new markers/hashes for marker/hash line symbol layer.
Those new markers will share the same style as the original markers, the same selected or visibly state.
This is the implementation of QEP #406.
This feature was funded by Stadt Frankfurt am Main and Oslandia**
This feature was developed by Julien Cabieces
New environmental lighting effects have been added to the physically based materials when a cube map skybox is in place. Environmental lights are calculated dynamically from the skybox textures.
These effects use the spherical harmonic approximation for the irradiance to avoid the need for pre-calculated irradiance textures and to simplify the user experience.
This is only enabled when a skybox is in use (not the fixed gradient) and can be disabled if desired.
This feature was developed by Nyall Dawson
Instancing support has been added for 3d symbols.
This introduces a new library, tinyobjloader: https://github.com/tinyobjloader/tinyobjloader
qgsobj3dutils (similar to qgsgltf3dutils) is created, which loads OBJ data into geometry, reading and creating textured material, if it exists.
Other changes:
"And if you gaze long into an abyss, the abyss also gazes into you".
This feature was developed by Dominik Cindric
New settings are exposed for tone mapping, exposure adjustment, and gamma for 3D scenes.
A new "Color Grading" section the in 3d map "Effects" tab allows users to control these options. This allows users to modify a scene to render in a manner that makes colors more dramatic and provides higher contrast, or use bloom effects that can make very bright emitted light display as overexposed light in a nighttime scene.
This feature was developed by Nyall Dawson
A new physically-based light bloom effect has been added, which gives bright portions of the 3d map a realistic bloom. This helps those areas to actually look like they emit light, as opposed to just having bright colors, and can help make 3d scenes look much more dramatic.
This feature was developed by Nyall Dawson
This feature was developed by Dominik Cindric
QGIS now supports configurable gradients as background effects in 3D map views, providing users an effective custom skybox effect without textures.
This feature was developed by Dominik Cindric
Support has been added for instanced meshes in 3D Tiles, allowing users to efficiently display repeated 3D objects like trees or streetlights at varying positions, rotations, and scales. This implementation abstracts away the complex structural differences between 3D Tiles 1.0 and 1.1 to provide seamless rendering.
Support has been added for implicit tiles as specified in the 3D Tiles 1.1 standard. This feature improves the loading and parsing efficiency of massive 3D datasets by utilizing structured subdivision schemes.
Logic runs via a new QgsCesiumImplicitTiling core class, and the quadtree subdivision scheme is currently supported (with octree support possible in a future update).
This feature was developed by Martin Dobias
A new dialog is provided to control the camera looking at XYZ in 3D map CRS coordinates, as well as setting pitch and heading angles and distance from the center point.
The dialog gets a Live update button that mimics the behavior of the Layer Styling panel. When set, user-changed settings are automatically reflected in the 3D map.
This does not affect the values updating from the 3D map. When a user moves the camera, the values are updated in real time, regardless of the Live update checkbox.
This feature was developed by Dominik Cindric
QGIS now includes support for 3D Tiles 1.0 spec Composite Tiles, which combine multiple tiles (e.g., b3dm or i3dm) into a single file. This support is included for both 2D and 3D rendering.
This feature was developed by Martin Dobias
The Y inversion setting for 3D views has been refactored into a QFlag-based configuration, assigning an independent bit for each navigation scenario (walk mode dragging, walk mode mouse captured, and terrain mode).
This feature was developed by David Koňařík
QGIS now supports exporting a 3D scene in the STL format, in addition to the existing OBJ export functionality. The STL format is much simpler than the OBJ and does not handle textures.
A new --overview-length optional parameter has been added to the build VPC algorithm
This feature was developed by Stefanos Natsis
Instead of parsing overview assets by their "overview" id, they are now parsed based on their "overview" role.
VPC files may contain multiple overviews per asset with arbitrary ids. All assets with the "overview" role are now considered as overviews, loaded and rendered when zoomed out.
QgsPointCloudLayer and QgsVirtualPointCloudProvider now have an overviews() method returning a list of all overviews, instead of a single one.
This feature was developed by Stefanos Natsis
Virtual Point Cloud (VPC) files can become quite large, and the ASCII-based JSON format does not really help in keeping the size down.
Leveraging the new support for QGIS to read remote .vpc files, the need for a smaller file size is more apparent, and support for the .vpz format constructed from a zipped .vpc has been added (similar to the .qgz QGIS project files providing a zipped .qgs).
This feature was developed by Stefanos Natsis
QGIS now supports per-layer elevation shading specifically for point cloud layers. This feature provides finer visual control, avoiding the blending and rendering artifacts that can occur when global elevation shading is applied across the entire map scene.
This feature was developed by Dominik Cindric
QGIS now supports modifying color objects on Point Cloud data directly within expressions, using basic arithmetic operations. This simplifies dynamic color manipulation by automatically splitting the color into its base components and applying the mathematical operation to each channel, eliminating the need for complex component extraction formulas.
For Example:
@point_color * scale_linear( @NumberOfReturns, 0, 8, 0.5, 1 )
This feature was developed by Dominik Cindric
An additional modifier has been added to the point cloud renderer that makes it possible to use expressions to for adjusting colors.
All point cloud attributes can be used in the expression, as well as the base color of the renderer. Users can combine the base color value with another attribute of the point, such as intensity, to produce a better result for point classification and styling.
For example:
@point_color * (@intensity / 65535)
This feature was developed by Dominik Cindric
New settings have been added to the layout chart items:
The user can either rely on a blank series to count the number of matching features, or can rely on a custom Y expression (a simple field or a full-fledged expression) to come up with a customized sum (say length of lines, or an attribute referring to a value that can be summed, etc.)
This feature was developed by Mathieu Pellerin
QGIS now provides the ability to clip a layout picture item by a shape-typed item.
This provides a fantastic way to frame cool shapes and mask elements with images (whether dynamically driven by an atlas feature attribute or a static image source).
The clipping is enabled and configured inside a new section of the picture item properties panel.
This feature was developed by Mathieu Pellerin
New options have been added to allow Geospatial PDF Exports to follow the QGIS layer tree configuration (groups, order, names, visibility, group layers). This allows users to preserve the layer structure, including nested groups, when exporting to a Geospatial PDF. This functionality is supported in print layouts, but not in standard map rendering tasks.
Complements the existing scale_linear, scale_exponential functions and adds a new bezier-cubic based interpolation method. This is then used when converting MapBox styles using the "cubic-bezier" interpolation type.
This feature was developed by Nyall Dawson
Concatenate all but the first arguments with separators. The first parameter is used as a separator.
NULL arguments are ignored.
This feature was developed by Nyall Dawson
A new "Field Calculator" menu item is provided in the context menu of column headers in a vector layer's attribute table.
The Field Calculator window will open with "Update existing field" checkbox automatically checked and the corresponding field already selected in the combo box.
The action is only enabled on editable fields.
This feature was developed by Patrice Pineault
As the model is run through the designer dialog, QGIS will now show an updated count of features flowing through the model links. To achieve this, a new flexible "badge" item that is attached to arrows was introduced.
Note:
The check holes processing tool now includes a threshold size which allows users to filter the returned results. If the hole area is higher than the provided threshold, then the hole is not considered an error.
This feature was developed by Jacky Volpes
With SFCGAL 2.3, the approximate media axis algorithm has a new extendToEdges parameter. If this parameter is activated, the medial axis endpoints are extended to the input polygon boundary. The attached media illustrates the difference between running the medial axis algorithm with this option set to false (red) and true (green), respectively.
Users can now add a processing algorithm action to a user-defined menu or toolbar. When triggered, those actions will open a dialog to parametrize and execute the associated processing algorithm.
This feature was funded by Stadt Frankfurt am Main and Oslandia
This feature was developed by Julien Cabieces
The Processing algorithms Random extract within subsets and Random selection within subsets have been ported from Python to C++, providing enhanced performance.
This feature was developed by Alexander Bruy
Topocentric CRS support has been added to QGIS, with a new widget provided for setting the point of origin of the projection, which is enabled when users explicitly select a Topocentric CRS option from the CRS selection menu.
This feature was developed by Dominik Cindric
QGIS now includes support for layers utilising SensorThings 2.0 specifications, including the new Sensing, Sampling and Relations extensions.
This also exposes these choices for SensorThings 2.0-enabled services. The service version and extensions are determined dynamically when connecting to a service via the browser or data source manager.
This feature was developed by Nyall Dawson
QGIS now provides a "Show Profile in 3D Views" option in the profile plot settings menu, which enables the display of the elevation profile curve in 3D.
The curve is retrieved from the elevation profile, and Z values are set from the calculated min and max Z values of the data that fit within the curve.
Polygon and line rubberbands follow the cursor to display over what position in the elevation profile the user is currently hovering over.
This feature was developed by Dominik Cindric
Changes have been made to help de-clutter ESRI REST service content in the browser:
This feature was funded by République et canton de Genève
This feature was developed by Nyall Dawson
QGIS has a significantly more performant refactored approach to fetching data using the FeatureServer Provider, which trims down the number of requests required to fetch a subset of the features within a given map extent.
Note that the actual TOTAL number of requests to get EVERY feature from the service doesn't change, so, for example, opening the attribute table would result in the same total number of requests.
This feature was funded by République et canton de Genève
This feature was developed by Nyall Dawson
QGIS has enabled parallel provider loading for the ArcGIS FeatureServer/MapServer providers, giving much faster project load times when a project contains multiple FeatureServer/MapServer layers.
This feature was funded by République et canton de Genève
This feature was developed by Nyall Dawson
QGIS has added support for STAC assets from other cloud object-store providers, including Azure and Google.
This additionally extends support to other cloud-optimized data types beyond GeoTiff, such as. JPEG2000, TileDB, Point Clouds, and others provided they are published with an appropriate cloud-optimized labelled mimetype or a supported asset type declaration.
This feature was developed by Norman Barker
New parameters for WMS services allow for the configuration of frame style properties on labels, including:
HIGHLIGHT_LABELFRAMEBACKGROUNDCOLORHIGHLIGHT_LABELFRAMEOUTLINECOLORHIGHLIGHT_LABELFRAMEOUTLINEWIDTHHIGHLIGHT_LABELFRAMESIZEFor Example:
&MAP0:HIGHLIGHT_LABELFRAMEBACKGROUNDCOLOR=%23FF0000
&MAP0:HIGHLIGHT_LABELFRAMEOUTLINECOLOR=%230000FF
&MAP0:HIGHLIGHT_LABELFRAMESIZE=5
&MAP0:HIGHLIGHT_LABELFRAMEOUTLINEWIDTH=2
This feature was developed by Sandro Mani
The FlatGeobuf export format has been added to the QGIS Server OAPIF service, implemented in line with QEP 414
This feature was funded by QGIS user group Germany (QGIS Anwendergruppe Deutschland e.V.)
This feature was developed by Alessandro Pasotti
QGIS now supports the Concave Hull of Polygons algorithm from GEOS, which has been exposed in PyQGIS.
Unlike the standard Concave Hull algorithm, a Concave Hull of Polygons is a (possibly) non-convex polygon containing all the input polygons. The computed hull fills the gaps between the polygons without intersecting their interiors. It strictly follows the outer boundaries of the input polygons, allowing you to fill gaps between them without distorting their original shapes. It is particularly useful for cases such as generalizing groups of building outlines, creating 'district' polygons around blocks, or removing gaps and joining disjoint sets of polygons.
See https://lin-ear-th-inking.blogspot.com/2022/05/concave-hulls-of-polygons.html?m=1 for more details
This feature was developed by Nyall Dawson
| Bug Title | URL issues.qgis.org (if reported) | URL Commit (Github) | 3.44 backport commit (GitHub) |
|---|---|---|---|
| .ASC missing from Raster Extraction | #66319 | PR #66368 | N/A |
| [OAPIF] Zooming triggers download of already loaded data | #66358 | Not a bug | |
| Gdb format in QGIS will show also .gdbtable .gdbtablex not only as .gdb | #66279 | Not a bug / not desirable | |
| Expose AZURE_STORAGE_SAS_TOKEN configuration option in Browser Cloud Storage Connection | #66274 | PR #14731 | N/A |
| Filtering WFS causes total failure to display layer | PR #66373 | PR #66373 | PR #66373 |
| [OAPIF][server] Paging not working with format FlatGeobuf from QGIS Server | #66365 | PR #66399 | N/A |
| Gml to Gml- Conversion succeeded, input and output are not the same in QGIS | #66413 | Not a bug | |
| No timeout for vsicurl layers when loading a project | #66496 | PR #66510 | PR #66539 |
| Raster attribute table: convert empty DateTime as string coming from GDAL to NULL value | #66544 | PR #66547 | N/A |
This feature was funded by QGIS.ORG (through donations and sustaining memberships)
This feature was developed by Even Rouault (Spatialys)
| Bug Title | URL issues.qgis.org (if reported) | URL Commit (Github) | 3.44 backport commit (GitHub) |
|---|---|---|---|
| QgsSettings + QGIS4.ini + XYZ Tile provider = crash | #66424 | PR #66450 | N/A |
| Cannot load VT layer from style only from the dialog (works in browser) | not reported | PR #66500 | TODO |
| "fix" every entry in relation reference widget is shown in italic | not reported | PR #66649 |
This feature was funded by QGIS.ORG (through donations and sustaining memberships)
This feature was developed by Denis Rouzaud (OPENGIS.ch)
| Bug Title | URL issues.qgis.org (if reported) | URL Commit (Github) | 3.44 backport commit (GitHub) |
|---|---|---|---|
| [OAPIF] QGIS Server OGC API is detected as WFS 1.1 | #66362 | PR #66369 | N/A |
| [OAPIF] Changing feature format has no effect | #66359 | PR #66386 | N/A |
| represent_value not working | #66339 | PR #66392 | PR #66436 |
| Remove &key=pk from memory layers tests | #66350 | PR #66397 | N/A |
| [server] Fix network cache settings read from environment | #59613 | PR #66425 | N/A |
| [postgres] Fix json/b bytea add feature in transaction group | #65323 | PR #66478 | N/A |
| Unable to load style from datasource database for non geometry layers. | #66341 | PR #66486 | N/A |
| [expressions] Fix IN operator nodes() | #66313 | PR #66485 | PR #66499 |
| No timeout for vsicurl layers when loading a project | #66496 | Cannot reproduce | |
| Field calculator allowed string * float operation and program crashed | #66507 | PR #66508 | N/A |
| Calculating integer field by "id"=@row_number crashed QGIS on save action | #66268 | PR #66508 | N/A |
| Crash when attempting to load OpenHistoricalMap vector tiles | #66466 | PR #66533 | N/A |
| Data-defined override expression on a field is not evaluated until any field in the form is edited | #66504 | Cannot reproduce | |
| Export to PostgreSQL (Available Connection) drops source table | #66228 | PR #66536 | PR #66570 |
| Spatialite data types are not recognized correctly when creating query layers with SQL | #66329 | PR #66538 | N/A |
| Edit layer properties of an invalid layer (broken source) is not working | #66324 | PR #66607 | Not recommended |
| Qgis have problem to render GeometryCollection for Gml, other viewer like mygeodata website render ok | #66225 | Duplicate | |
| 3.44.7-Solothurn Crashes on New Shapefile | #66220 | PR #66609 | PR #66648 |
| Add inja escape() function to HTML escape values | GHSA-cr49-pm9v-m788 | PR #66616 | PR #66670 |
| Regression with decimal values and negative number in color gradient in the layer style panel | #65566 | PR #66619 | PR #66671 |
| QGIS Server: GetProjectSettings returns the error message "Layer(s) not valid" with two WMS layers | #65872 | Cannot reproduce | |
| raster histogram not working for raster with scale factor | #65920 | PR #66640 | TODO |
| Advanced Digitizing Floater is not wide enough to show whole value | #65171 | PR #66663 | TODO |
This feature was funded by QGIS.ORG (through donations and sustaining memberships)
This feature was developed by Alessandro Pasotti (QCooperative)
| Bug Title | URL issues.qgis.org (if reported) | URL Commit (Github) | 3.44 backport commit (GitHub) |
|---|---|---|---|
| Custom Toolbar Position Loss | #65862 | PR #66483 | N/A |
| Export to PDF from layout changes colors | #42935 | Not a bug (Was an Adobe issue IMHO) | |
| Layout bleeding to edge outside map window | #49638 | Fixed | |
| Fix flaky test_gui_fileuploader | Unreported | PR #66543 | |
| Hidden actions from user defined toolbar are still visible. | Unreported | PR #66620 | |
| QGIS should never poll a PostGIS/WMS/WFS/etc connections unless specifically asked to | #58303 | PR #66621 | TODO |
| Password is not removed when it's at the the end of uri | Unreported | PR #66625 | TODO |
This feature was funded by QGIS.ORG (through donations and sustaining memberships)
This feature was developed by Julien Cabieces (Oslandia)
| Bug Title | URL issues.qgis.org (if reported) | URL Commit (Github) | 3.44 backport commit (GitHub) |
|---|---|---|---|
| Allow QGIS to access curves from OGC API provider | Unreported | PR #66452 | N/A |
| Elevation profile - changing layer symbology crashes QGIS / Wrong rendering order of Elevation profile items after changing the color of a profile item / Elevation profile stops respecting layer order on layer properties change | #64952, #62677, #64806 | PR #66360 | N/A |
| QGIS crashes on registering a Custom Profile Source with 'Sync Layers to Project' active | #65056 | PR #66455 | N/A |
| QGIS hangs when opening raster calculator (Meu Qgis está travando ao tentar abrir a calculadora raster) | #66327 | Cannot reproduce | |
| Ensure consistency in MultiCurves: don't allow NurbsCurves | Unreported | PR #66676 | N/A |
This feature was funded by QGIS.ORG (through donations and sustaining memberships)
This feature was developed by Germán Carrillo (OPENGIS.ch)
This feature was funded by QGIS.ORG (through donations and sustaining memberships)
This feature was developed by David Signer (OPENGIS.ch)
| Bug Title | URL issues.qgis.org (if reported) | URL Commit (Github) | 3.44 backport commit (GitHub) |
|---|---|---|---|
| Windows QGIS 4 installs plugin with ACL that do not include SYSTEM or Administrators | #66515 | PR #66576 | N/A |
| Crash when clicking on an unavailable layer in Layers panel | #65913 | PR #66578 | TODO |
| QGIS server OGC API: Limits and offset parameters ignored when plugin changing parameters | #65858 | Fixed | PR #66480 |
This feature was funded by QGIS.ORG (through donations and sustaining memberships)
This feature was developed by Stefanos Natsis (Lutra Consulting)
| Bug Title | URL issues.qgis.org (if reported) | URL Commit (Github) | 3.44 backport commit (GitHub) |
|---|---|---|---|
| Unbreak QGIS with GDAL >= 3.13 | commit ffdb8e3 | PR #66615 | N/A |
| concat() returns NULL when all arguments are NULL: it should return an empty string | #65808 | PR #66618 | TODO |
| Remove all the parts in a geometry creates an empty geometry instead of NULL | #65453 | WIP | TODO / Not recommended ? |
This feature was funded by QGIS.ORG (through donations and sustaining memberships)
This feature was developed by Loïc Bartoletti (Oslandia)
Import PR from Github into Entries