All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased - Draft
2.0.0-rc.2 - 2026-02-02
- Implementation guide for implementing OGC API - Processes in openEO
- Unit Tests (see folder
tests, moved specification tests and CI tools todev) date_difference: Allowweekas a unit #506export_collection: New processexport_workspace: New processrun_ogcapi: New processrun_ogcapi_externally: New processstac_modify: New processtext_find: New process
- Processes that have been marked as stable:
apply_polygon,date_between,date_shift,filter_labels,inspect - Clarified for various mathematical functions the defined input and output ranges.
Mention that
NaNis returned outside of the defined input range where possible. - Clarified for several comparison processes how
NaNvalues have to be handled. - Clarified for various processes the handling of no-data values and
null, see also the implementation guide. #480 - Added a section about character encodings to the implementation guide. Removed any character encoding related wording from the process specifications itself.
- Added a uniqueness contraint to various array-typed parameters (e.g. lists of dimension names or labels)
all: For empty arrays, returnstrueinstead of no-data. #494any: For empty arrays, returnsfalseinstead of no-data. #494apply_polygon: Renamedpolygonsparameter togeometriesfor better alignment with other geometry handling processes. #511clip: Throw an exception if min > max #472is_nan: Returnfalseinstead oftruefor non-numerical data types. #486save_results: Returns the STAC resource instead of booleantrueAPI#376
- Clarified for various mathematical functions the defined input and output ranges. Mention that
NaNis returned outside of the defined input range where possible. - Clarified for various processes the handling of no-data values and null, see also the implementation guide. #480
add_dimension: Clearly define behaviour for adding spatial dimensionsapply_polygon: Replaced outdated usage ofraster-cubesubtype withdatacubeand dimensions. #524aggregate_spatialandload_geojson: Dimensions must by of typegeometry, notgeometriesaggregate_spatial: Clarified that the output geometries are unchanged compared to the input geometries. #499aggregate_temporalandaggregate_temporal_period: Clarified that the process throws aDimensionNotAvailableexception when no temporal dimension exists.aggregate_temporal_period: Removed unused exceptionDistinctDimensionLabelsRequired.aggregate_temporal_period: Clarified that the definition of weeks follows ISO 8601.apply_polygon: Replaced outdated usage ofraster-cubesubtype withdatacubeand dimensions. #524array_interpolate_linear: Apply interpolation to NaN and no-data values.cummax,cummin,cumproduct,cumsum: Clarified the descriptions around theignore_nodataparameter.divide: Clarified behavior for division by 0between: Clarify thatnullis passed through.eqandneq: Explicitly set the minimum value for thedeltaparameter.filter_bbox,load_collection,load_stac: Clarified that the bounding box is reprojected to the CRS of the spatial data cube dimensions if required.filter_spatial: Clarified that masking is applied using the given geometries. #469load_collectionandload_stac:load_stac: Clarify handling of thepropertiesparameter in the context of STAC APIs and static catalogs. #536load_uploaded_filesandrun_udf: Clarify handling of file paths and addedFileNotFoundexception. #461mask: Add missing exceptionIncompatibleDataCubes#538mod: Clarified behavior for y = 0run_udf: Simplified and clarified the schema fordata- no functional change.sqrt: Clarified that NaN is returned for negative numbers.- Clarify allowed
FeatureCollectiongeometries inload_collection,mask_polygon,apply_polygon, andload_stac#527
2.0.0-rc.1 - 2023-05-25
array_append: Addednumbertype for labels to be consistent with other processes. Default to numerical index instead of string. Clarify that thelabelparameter only applies to labeled arrays.
- New processes in proposal state:
date_betweendate_differencefilter_vectorflatten_dimensionsload_geojsonload_urlunflatten_dimensionvector_buffervector_reprojectvector_to_random_pointsvector_to_regular_points
add_dimension: Added new dimension typegeometry. #68
- Moved from proposals to stable processes:
array_appendarray_concatarray_createarray_interpolate_linearresample_cube_temporal
- Added better support for labeled arrays. Labels are not discarded in all cases anymore. Affected processes:
array_appendarray_concatarray_modify
array_modify: Change the default value forlengthfrom1to0. #312- Renamed
text_mergetotext_concatfor better alignment witharray_concatand existing implementations. apply_neighborhood:- Allow
nullas default value for units. - Input and Output for the
processcan either be data cubes or arrays (if one-dimensional). #387
- Allow
run_udf: Allow all data types instead of just objects in thecontextparameter. #376load_collectionandload_result/load_stac:- Require at least one band if not set to
null. #372 - Added a
NoDataAvailableexception
- Require at least one band if not set to
aggregate_temporal,filter_temporal,load_collectionandload_result/load_stac:inspect: The parametermessagehas been moved to be the second argument. #369maskandmerge_cubes: The spatial dimensionsxandycan now be resampled implicitly instead of throwing an error. #402save_result: Added a more concreteDataCubeEmptyexception.- New definition for
aggregate_spatial: - Renamed
create_raster_cubetocreate_data_cube. #68 - Updated the processes based on the subtypes
raster-cubeorvector-cubeto work with the subtypedatacubeinstead. #68 sortandorder: The ordering of ties is not defined anymore. #409quantiles: Parameterprobabilitiesprovided as array must be in ascending order. #297fit_curveandpredict_curve: Heavily modified specifications.fit_curveworks on arrays instead of data cubes,predict_curvedoesn't support gap filling anymore, clarify no-data handling, ... #425climatological_normal: Theclimatology_periodparameter accepts an array of integers instead of strings. #331
aggregate_spatial,filter_spatial,load_collection,mask_polygon: GeoJSON input is deprecated in favor ofload_geojson. #346
- The
examplesfolder has been migrated to the openEO Community Examples repository. between: Support for temporal comparison. Usedate_betweeninstead. #331- Deprecated
GeometryCollectionsare not supported any longer. #389 - Deprecated PROJ definitions for the CRS are not supported any longer.
load_result:- The comparison processes
eq,neq,lt,lte,gt,gteandarray_contains:- Removed support for temporal comparison. Instead explicitly use
date_difference. - Removed support for the input data types array and object. #208
- Removed support for temporal comparison. Instead explicitly use
sortandorder: Removed support for time-only values. #331
aggregate_spatial:- Clarified that feature properties are preserved for vector data cubes and all GeoJSON Features. #270
- Clarified that a
TargetDimensionExistsexception is thrown if the target dimension exists.
applyandarray_apply: Fixed broken references to theabsoluteprocessapply_dimension: Clarify the behavior for when a dimension gets 'dropped'. #357apply_neighborhood:array_containsandarray_find: Clarify that givingnullasvaluealways returnsfalseornullrespectively, also fixed the incorrect examples. #348array_interpolate_linear: Return value was incorrectly specified asnumberornull. It must return an array instead. #333is_nan: Fixed a wrong description of the return value and simplified/clarified the process descriptions overall. #360is_nodata: Clarified thatNaNcan be considered as a no-data value only if it is explicitly specified as no-data value. #361merge_cubes: Clarified descriptions to better describe when a merge is possible. #379rename_labels: Clarified that theLabelsNotEnumeratedexception is thrown ifsourceis empty instead of iftargetis empty. #321round: Clarify that the rounding for ties applies not only for integers. #326save_result: Clarified that the process always returnstrue(and otherwise throws). #334- Handling of empty geometries is clarified throughout the processes. #404
1.2.0 - 2021-12-13
- New processes in proposal state
apply_polygonfit_curvepredict_curve
ard_normalized_radar_backscatterandsar_backscatter: Addedoptionsparameterarray_find: Added parameterreverse. #269load_result:- Added ability to load by (signed) URL (supported since openEO API v1.1.0).
- Added parameters
spatial_extent,temporal_extentandbands. #220
run_udf: ExceptionInvalidRuntimeadded. #273- A new category "math > statistics" has been added #277
array_labels: Allow normal arrays to be passed for which the process returns the indices. #243debug:- Renamed to
inspect. - The log level
errordoes not need to stop execution. - Added proposals for logging several data types to the implementation guide.
- Renamed to
quantiles: The parameterprobabilitiesalso accepts an integer value to compute q-quantiles. #293
quantiles: The parameterqhas been deprecated in favor of the extended parameterprobabilities. #293
- Removed the explicit schema for
raster-cubein thedataparameters and return values ofrun_udfandrun_udf_externally. It's still possible to pass raster-cubes via the "any" data type, but it's discouraged due to scalability issues. #285
aggregate_temporal_period: Clarified which dimension labels are present in the returned data cube. #274ard_surface_reflectance: The process has been categorized as "optical" instead of "sar".array_modify: Clarified behavior.save_result: Clarify how the process works in the different contexts it is used in (e.g. synchronous processing, secondary web service). #288quantiles:
1.1.0 - 2021-06-29
- New processes in proposal state
ard_normalized_radar_backscatterard_surface_relectancearray_appendarray_concatarray_createarray_create_labeledarray_find_labelarray_interpolate_linear#173array_modifyatmospheric_correctioncloud_detectiondate_shiftis_infinitenanreduce_spatial
- Added return value details (property
returns) for the schemas with the subtypeprocess-graph. API#350 apply_neighborhood: Clarify behavior for data cubes returned by the child processes and for that add the exceptionDataCubePropertiesImmutable.- Added a guide for implementors that describes numerours implementation details for processes that could not be covered in the specifications itself, for example a recommended implementation for the
ifprocess. #246
- Added
proposalsfolder for experimental processes. Experimental processes are not covered by the CHANGELOG and MAY include breaking changes! #196, #207, PSC#8- Moved the experimental process
run_udf_externallyto the proposals. - Moved the rarely used and implemented processes
cummax,cummin,cumproduct,cumsum,debug,filter_labels,load_result,load_uploaded_files,resample_cube_temporalto the proposals.
- Moved the experimental process
- Exception messages have been aligned always use ` instead of '. Tooling could render it with CommonMark.
load_collectionandmask_polygon: Also support multi polygons instead of just polygons. #237run_udfandrun_udf_externally: Specify specific (extensible) protocols for UDF URIs.resample_cube_spatialandresample_spatial: Aligned with GDAL and addedrmsandsumoptions to methods. Also added better descriptions.resample_cube_temporal: Process has been simplified and only offers the nearest neighbor method now. Theprocessparameter has been removed, thedimensionparameter was made less restrictive, the parametervalid_withinwas added. #194
GeometryCollections are discouraged in all relevant processes.
- Removed the experimental processes
aggregate_spatial_binaryandreduce_dimension_binary. #258
- Clarify that the user workspace is server-side. #225
- Clarify that the
conditionparameter forarray_filterworks also on indices and labels. - Clarify contradicting statements in
filter_temporalfor the default value of thedimensionparameter. By default all temporal dimensions are affected by the process. #203 - Clarify how the parameters passed to the overlap resolver correspond to the data cubes. #184
- Improve and clarify specifications for
is_nan,is_nodata,is_valid. #189 - Improve and clarify specifications for
allandany. #189 array_element: Clarify thatArrayNotLabeledexception is thrown when parameterlabelis specified and the given array is not labeled.array_apply,array_element,array_filter: Added theminimum: 0constraint to all schemas describing zero-based indices (parameterindex).array_labels: Clarified the accepted data type for array elements passed to the parameterdata.merge_cubes: Clarified the dimension label order after the merge. #212merge_cubes: Clarified the fourth example. #266- Fixed typos, grammar issues and other spelling-related issues in many of the processes.
- Fixed the examples
array_contains_nodataandarray_find_nodata. - Fixed links to openEO glossary and added links to data cube introduction. #216
- Fixed description of
apply_dimensionwith regards to reference systems. Made description easier to understand, too. #234 - Clarified disallowed characters in subtype
file-path. - Clarified that UDF source code must contain a newline/line-break (affects
run_udf). aggregate_spatial,aggregate_spatial_binary: Clarified that Features, Geometries and GeometryCollections are a single entity in computations. Only FeatureCollections are multiple entities. #252aggregate_spatial: Clarified that the values have no predefined order and reducers such asfirstandlastreturn unpredictable results. #260load_collection, parameterspatial_extent: Clarified that all pixels that are inside the bounding box of the given polygons but do not intersect with any polygon have to be set to no-data (null). #256load_collection: Clarified that the parameters are recommended to be used in favor offilter_*processes.aggregate_temporalandaggregate_temporal_period: Clarified that reducers are also executed for intervals/periods with no data. #263dimension_labels: Clarified that the process fails with aDimensionNotAvailableexception, if a dimension with the specified name does not exist.
1.0.0 - 2020-07-31
subtype-schemas.json: A list of predefined subtypes is available as JSON Schema; Moved over from openeo-api.- Processes:
aggregate_temporal_periodanomalyapply_neighborhoodclimatological_normalconstant
- Process graphs added to:
meanmedian
apply_kernel: Added parametersborderandreplace_invalid#170- Folder with examples (
examples/). #136
anyandall: Renamed parametervaluestodata. #147load_collection: Parameterpropertieshas subtypemetadata-filter.- Examples adapted to latest API version for
aggregate_temporal,array_contains,array_find,filter_labels,load_collectionandrename_labels. #136, API#285 - Some processes were assigned to different categories.
- Process graph examples from
arccos,arcsin,arctan,arsinh,artanh,e,lnandpi. API#285
apply_kernel:load_collection: Removed outdatedrequireproperty fromvaluecallback parameter in process parameterproperties.filter_bbox,load_collection,resample_spatial: Fixed invalid EPSG code examples.aggregate_temporal: Fixed outdated message for exceptionTooManyDimensions.clip: Fixed examples.linear_scale_range: Clarify that the process implicitly clips the values. #159mean: Clarify behavior for arrays withnull-values only.mod: Clarified behavior. #168resample_*: Clarified behavior.first,last,max,mean,median,min,sd,variance: Clarify behavior for arrays withnull-values only.- Clarified (and fixed if necessary) for all processes in the "cubes" category the descriptions for the returned data cube. #149
1.0.0-rc.1 - 2020-01-31
- Processes:
addaggregate_spatialaggregate_spatial_binaryallanyarray_applyarray_containsarray_filterarray_findarray_labelsdimension_labelsdrop_dimensionfilter_labelsfilter_spatialload_uploaded_filesmask_polygonreduce_dimensionreduce_dimension_binaryrename_labels
- Support for labeled arrays. API#245
- Process graphs for processes that can be implemented using other pre-defined processes. #137
contextparameters to all processes which support passing process graphs (callbacks) as parameters. #25- Added further examples.
- The JSON Schema keyword
formathas been replaced with the custom keywordsubtype. - Schema format/subtype
callbackhas been renamed toprocess-graph. - Default values are now specified on the parameter-level, not in the JSON schemas.
- Parameters are now required by default.
- Parameters are defined as array.
parameter_orderis therefore removed and the name is part of the parameter object. API#239 - Callback parameters have a new, more advanced schema, allowing to define more aspects of the callback parameters. API#239
- Processes supporting multiple data types in parameters or return values with
anyOfare now listing the data types directly as array.anyOfis discouraged. - Comparison processes
eq,gt,gte,lt,lte,neqandbetweenaccept all data types as input for the operands. add_dimension: Parametervaluerenamed tolabel.aggregate_polygon,aggregate_temporal,apply_dimension,array_elementandresample_cube_temporal: Support labeled arrays. API#245aggregate_polygon: The data cube implicitly gets restricted to the bounds of the polygons as iffilter_polygonwould have been used beforehand. #101aggregate_temporal: Parameterlabelsis optional. #19apply_dimension: Replaced with a completely new definition. #73apply_kernel: Only supported 2D kernels on the horizontal spatial dimensions. #69clip: Works on a single value instead on arrays (replaced parameterdatawithx). #75count: Renamed parameterexpressiontocondition.debug: Replaced with a completely new definition. #82, API#100, API#214filter_bands: Merged parametersbandsandcommon_names. #77if:- Doesn't pass through
null, but insteadnullleads to rejecting the condition. - Parameter
expressionrenamed tovalue. - Parameter
acceptis required. - Parameter
rejectdefaults tonull.
- Doesn't pass through
load_collection:- Parameter
bandsaccepts common band names. #77 - Parameter
properties: Callback parametervaluerenamed tox.
- Parameter
mask: Clarifies behavior for missing dimensions in the mask. #55merge_cubesworks with binary reduction operators instead of list-based reducers. #94ndviandnormalized_difference: Rewrite of the processes with a completely new behavior. #60not: Parameterexpressionrenamed tox.resample_spatial: Default value of parameteralignchanged fromlower-lefttoupper-left. #61- The following operations work on two values instead on a sequence of values:
and,divide,multiply,or,subtract,xor. #85 productworks as before, but is not an alias ofmultiplyany longer. #85text_begins,text_contains,text_ends:nullvalues are supported and get passed through.trim: Renamed totrim_cube.
filter_bbox,load_collection,resample_spatial: PROJ definitions are deprecated in favor of EPSG codes and WKT2. #58
- The following processes don't support
ignore_nodataany longer:and,divide,multiply,or,subtract,xor. #85 - The following processes don't support
binaryany longer:aggregate_temporal,merge_cubes,resample_cube_temporal. #94 - Support for vector data cubes, except for the processes
aggregate_poylgonandsave_result. #68 filter_temporalandload_collection: Temporal extents don't support time-only intervals any longer. #88mask: The mask parameter doesn't accept vectors (polygons) any longer. Use processmask_polygoninstead. #110- Processes:
aggregate_polygon. Useaggregate_spatialoraggregate_spatial_binaryinstead. #62find_collections: Useload_collectionand manual data discovery through the clients. API#52filter: Usefilter_labelsinstead.filter_polygon. Usefilter_spatialinstead. #37output: Usedebuginstead.property#84reduce: Usereduce_dimensionordrop_dimensioninstead.run_process_graph: Use user-defined processes directly in the process graph instead.
- Several clarifications in written texts. #86
betweenmay return anullvalue.filter_bbox,load_collection: The schema for the propertycrsin the parametersextent/spatial_extentcontained invalid JSON Schema.merge_cubes: Clarified merging behavior with several examples.
0.4.2 - 2019-06-11
- Added examples.
- Fixed outdated process examples.
0.4.1 - 2019-05-29
- Added
band-nameformat toload_collectionandfilter_bandsproperties.
product: Added exceptions and examples- Clarified error handling related to dimension parameters.
0.4.0 - 2019-03-07
First version which is separated from the openEO API. Complete rework of all processes.
Older versions of the processes were released as part of the openEO API, see the corresponding changelog for more information.