In this release, the static_query API has been extended to cover about 90% of the auto_property and config_specification queries.
Queries in config_query marked in green will be automatically migrated. More will be added during the month.
All customer databases will be analyzed to determine how the remaining queries will be migrated.
A new function namespace called query can now be used in certain expression_calls.
In auto_property, by selecting expression_query, it’s possible to use these queries.
The queries available in aircalc 2025.11 are the static_queries.
Here’s a comparison between a Cypher query and its equivalent expression query:
Cypher query 0.2 ms internal execution, 1 ms query roundtrip
OPTIONAL MATCH (a1) WHERE a1.key = 'SUP'
OPTIONAL MATCH (a2) WHERE a2.key = 'EHA'
OPTIONAL MATCH (a3) WHERE a3.key = 'M2'
RETURN CASE
WHEN count(a1) = 0 THEN 2
WHEN count(a2) = 0 THEN 1
WHEN count(a3) = 1 THEN 4
ELSE 3
END
Expression query 0 ms internal execution, 0.1 ms roundtrip
CASE
WHEN query.count_by_key({ product_key: "SUP" }) = 0 THEN 2 // exhaust unit
WHEN query.count_by_key({ product_key: "EHA" }) = 0 THEN 1 // supply unit
WHEN query.count_by_key({ product_key: "M2" }) = 1 THEN 4 // inline unit
ELSE 3 // double flow unit
END
Performance
Expressions are typically 10× faster than Cypher queries.
JavaScript-native
Expressions run in JavaScript, meaning they can execute directly in the browser.
This enables functionality like inserting components without any server roundtrips — significantly improving user experience.
Harmonized expressions
config_query has often been frustrating to use since it couldn’t include logic from expression.
With expression queries, everything can be written in one consistent language.
Less code
Dropping support for Cypher queries allows us to focus entirely on improving and extending the expression system.
The ambition is to fully drop support for Cypher queries by aircalc 2026.1.
static_query_casing, static_query_panel, static_query_profile, static_query_corner, static_query_external, static_query_hole.frontFeet and backFeet to make it possible to customize the placement of the feet.climate_defaults for setting default climate and RLT-selections in unit creator. Just set them in aircalc and click the Copy-icon at the top, and then paste into this table.params column to unit_creator_steps. First supported parameters are hiding climate- and/or RLT-selections.holes to be able to make both square and round holes.diagram_path table. Put two lines with same key in two different products and it will draw a line between those two points.diagram_shape.air.applyTotalPowerAsEnthalpyChangeOnFlowingAir(tempIn, humIn, pressureIn, pressureOut, flow, power) function to expressions. Returns outlet temperature (t) and humidity (x).Show translation keys is toggled we now also show which additional parameters are available for that translation text. For example the alert_performance_no_suitable_variant_found text has a parameter called error which is the detailed error(s) returned by the calculations, so the UI will show {alert_performance_no_suitable_variant_found(error)} in this case. In Promaster the translation can then for example be No suitable variants found: {error}.header for perf_cases result visualizer table.message_key from dll_component_filter was not translated.design_exchangerHeight.myArray[1][2] did not work properly.One from " " (space) to "". This caused some problems in REPORTS.Custom supplier to all component types. It will do a simple calculation (heating/cooling the air for coils, calculating pressure for fans, setting humidity for humidifiers). Also added dll_specification_correction table which allows you to override any design_-specification. Together these tools allow you to create a completely custom component calculator.active column to all air outlet tables. This is used to toggle whether this component is active in a specific performance case and if so, what outlet air it should aim for. This has access to design_outdoor_temperature, design_extract_temperature and design_supply_temperature, so you can set a different target in summer and winter depending on these temperatures. This adds support for many functions:
design_exchangerBaseLength and design_exchangerNoseHeight specifications to PTD, indicating the additional length and height for counter flow heat exchangers.params column to dll_component_calculator. Used by SplitBox which now supports dynamic number of openings. The outlets will be called split, split2, split3 etc. This enables opening components with multiple real outlets (air graph is branched).New Rotor Supplier DRI
New Sound Attenuator Supplier DLLuftTechnik
dll_inputs table.design_-specifications directly. Set name column to design_xxx. Note that for example overriding design_temperatureEfficiencyEn308 for a heat exchanger will not automatically adjust outlet temperatures etc.Inditer,CustomAlMg,AlPaintedAlMg,AlPaintedAlMg,AlPaintedAlMg,AlPaintedAlMg,AlPaintedR452ACustomSwissRotors,CustomCustomCustomCustomEri_PlainAluminium,Eri_GoldEpoxyPainted,Eri_GoldEpoxyPaintedExtra,Eri_Hygienic,Eri_PlainAluminiumCoatedDriRHE,CustomDri_CondensationEC,Dri_SorptionEZDri_1p65mm,Dri_1p85mmWd270mmHeatex_ES,Heatex_ERCustom,DlLuftTechnikCustom