diff --git a/cep-0040.md b/cep-0040.md
new file mode 100644
index 00000000..cf2150d8
--- /dev/null
+++ b/cep-0040.md
@@ -0,0 +1,1218 @@
+# CEP 40 - A new recipe format (part 4): Rendered recipe YAML and serialization
+
+
+| Title | A new recipe format (part 4): Rendered recipe YAML and serialization |
+
| Status | Accepted |
+| Author(s) | Wolf Vollprecht <wolf@prefix.dev> |
+| Created | Apr 13, 2024 |
+| Updated | Apr 17, 2026 |
+| Discussion | https://github.com/conda/ceps/pull/74 |
+| Implementation | https://github.com/prefix-dev/rattler-build |
+
+
+## Abstract
+
+Part of the effort to strictly define a new recipe format. The previous CEPs are:
+
+- [CEP 13: A new recipe format](./cep-0013.md)
+- [CEP 14: A new recipe format (part 2): allowed keys and values](./cep-0014.md)
+- [CEP 39: A new recipe format (part 3): `jinja` functions in recipes](./cep-0039.md)
+
+This CEP defines the structure and contents of the `rendered_recipe.yaml` file
+which captures the complete recipe, build configuration, dependencies and
+sources used to create a conda package.
+
+## Motivation
+
+As part of the metadata, a package might include the "raw" and "rendered" recipe.
+A rendered recipe is a recipe.yaml file that has all Jinja and if/else logic resolved to the final values.
+
+The goal is to have a single file that contains all the information needed to
+reproduce the exact build of a package. This will enable better reproducibility,
+provenance tracking, and debugging of conda packages.
+
+## Specification
+
+A package builder should have a defined way on how to serialize the recipe to the final
+output in the artifact / package.
+
+This "rendered recipe" should contain the following information:
+
+- The fully rendered recipe with all Jinja2 expressions evaluated and if/else
+ logic resolved to the final used values. There should be no more logic in the rendered recipe.
+- The fully resolved environments for the build environments (build and host). This SHOULD at least
+ include the exact versions, a checksum and the full URL for every package that was used as a dependency.
+ The resolved environments should also include the channel URLs that were used for resolution in the correct order.
+
+Additionally, a file MUST be placed in the `info` folder, named `info/used_build_tool.json`. This file MUST record the name and version of the tool that produced the rendered recipe. This JSON file SHOULD AT LEAST have the following keys:
+
+```js
+{
+ "name": "rattler-build", // string
+ "version": "0.14.0" // string
+}
+```
+
+This information can be used to reproduce the build with the same version of the tool.
+This tool version should also be able to read the rendered recipe.
+
+## Implementation details for `rattler-build`
+
+What follows is a thorough description of what is implemented in `rattler-build`. This is not directly relevant to the CEP, but should serve as an illustration for a project that follows these guidelines.
+
+### Storage
+
+The rendered recipe YAML file is stored in the `info/recipe` folder of the final
+package. Alongside the rendered recipe, we copy the entire "recipe folder".
+If the original recipe was not named `recipe.yaml`, then we rename it inside the package.
+
+For example:
+
+```txt
+├── recipe
+ ├── patches
+ │ └── patch1.diff
+ ├── build.sh
+ ├── build.bat
+ └── my_recipe.yaml
+```
+
+Will be copied into the following folder structure in the final package:
+
+```txt
+├── ...
+├── index.json
+├── used_build_tool.json // new file!
+└── recipe
+ ├── build.bat
+ ├── build.sh
+ ├── recipe.yaml
+ ├── patches
+ │ └── patch1.diff
+ ├── rendered_recipe.yaml
+ └── variant_config.yaml
+```
+
+### Implementation details
+
+The rendered recipe YAML file contains the following top-level sections:
+
+1. `rendered_recipe_version`: integer - The version of the rendered recipe format.
+2. `recipe`: The fully rendered recipe with all Jinja2 expressions evaluated and
+ if/else logic resolved to the final used values.
+3. `build_configuration`: Captures all the build-time configuration such as the
+ target platform, build/host prefixes, variant used, package version and build
+ string, channels, etc.
+4. `finalized_dependencies`: Records the exact versions and builds of all
+ dependencies (build, host and run) that were used at build time, like a
+ "lockfile".
+5. `finalized_sources`: Contains the final references to the sources used, e.g.
+ git commit hashes, tarball URLs + sha256, etc.
+6. `system_tools`: Records the tools that were used from the host system in
+ order to warn if reproducing the build on a different host system might lead
+ to different results (patchelf, git, etc).
+
+The version of the rendered recipe format as described here is `1`.
+
+#### Recipe section
+
+This section is the fully rendered recipe in valid YAML format, with all Jinja2
+expressions evaluated and if/else logic resolved to the final values used during
+the build.
+
+Some key things to note:
+
+- Compiler expressions like `${{ compiler('c') }}` are rendered to their final form immediately:
+
+ ```yaml
+ - ${{ compiler('c') }}
+ # becomes (with target_platform linux-64, as an example)
+ - gcc_linux-64
+ ```
+
+- Pin expressions like `${{ pin_subpackage('libtool', upper_bound='x.x') }}` are
+ rendered to:
+
+ ```yaml
+ - ${{ pin_subpackage('libtool', exact=true) }}
+ # becomes
+ - pin_subpackage:
+ name: libtool
+ exact: true
+ ```
+
+- For the following:
+
+ ```yaml
+ - ${{ pin_subpackage('some-pkg-a', lower_bound="x.x.x") }}
+ - ${{ pin_compatible('python', upper_bound="x.x.x") }}
+ - ${{ pin_compatible('numpy', upper_bound="3.2.1", lower_bound="1.2.3") }}
+ ```
+
+ the rendered result is as follows:
+
+ ```yaml
+ - pin_subpackage:
+ name: some-pkg-a # string
+ lower_bound: x.x.x # this is a string or null
+ - pin_compatible:
+ name: python
+ upper_bound: x.x.x # this is a string or null
+ - pin_compatible:
+ name: numpy
+ lower_bound: 1.2.3
+ upper_bound: 3.2.1
+ ```
+
+The pin functions take 4 arguments: `name`, `lower_bound`, `upper_bound` and
+`exact`. lower_bound and upper_bound can be either a "pin expression"
+(x.x.x...), a version string or None. If None, the field CAN be omitted in the
+rendered output. The default values for lower_bound is `x.x.x.x.x.x`, for
+`upper_bound` it's `x`. For `exact` the default value is `false`. If `exact` is
+false, the field CAN be omitted from the rendered output.
+
+The definitions for these entries are:
+
+```yaml
+pin_subpackage:
+ name: string
+ lower_bound: string or null
+ upper_bound: string or null
+ exact: bool
+pin_subpackage:
+ name: string
+ lower_bound: string or null
+ upper_bound: string or null
+ exact: bool
+```
+
+#### Build configuration section
+
+This records all information that was used at build time, incl. variables given
+on the CLI or by environment yaml. Everything necessary to reproduce the build
+should be recorded here.
+
+Here's the documentation for the fields in the provided YAML:
+
+##### `build_configuration`
+
+The `build_configuration` section contains information related to the build
+process.
+
+###### `target_platform`
+
+- Type: string
+- Description: The target platform for which the package is being built (e.g.,
+ `osx-arm64`).
+
+###### `host_platform`
+
+- Type: string
+- Description: The host platform used for building the package. The
+ `host-platform` is equivalent to `target_platform` except when the
+ `target_platform` is `noarch`. If the `target_platform` is `noarch`,
+ the `host_platform` is the platform where the build is being executed.
+
+ If the package is cross-compiled this might not be the current platform,
+ therefore it is recorded in the rendered recipe. If you have a `noarch`
+ package and compile with `--target-platform=linux-64` on a windows
+ machine the following will be set:
+
+ - `target_platform`: `noarch` (from recipe)
+ - `host_platform`: `linux-64` (from CLI)
+ - `build_platform`: `win-64` (the current platform)
+
+###### `build_platform`
+
+- Type: string
+- Description: The platform used for building the package (e.g., `osx-arm64`).
+
+###### `variant`
+
+- Type: object
+- Description: Dictionary with the variant configuration used for the build.
+
+This dictionary contains _only_ the keys of the variant configuration file that were applied during the build (e.g. used in a `jinja` expression or as a dependency).
+
+###### `hash`
+
+- Type: object
+- Description: Contains information related to hashing.
+ - `hash`: The hash value (e.g., `60d57d3`).
+ - `prefix`: Prefix for the hash, which can include values like `py311`
+ based on the variant configuration.
+
+###### `directories`
+
+- Type: object
+- Description: Contains directory paths used during the build process.
+ - `host_prefix`: The host prefix directory with placeholders for the host
+ environment.
+ - `build_prefix`: The build prefix directory for the build environment.
+ - `work_dir`: The working directory with extracted sources.
+ - `build_dir`: The build directory that contains `host_prefix`,
+ `build_prefix`, and `work_dir` as subdirectories.
+
+###### `channels`
+
+- Type: array of URLs
+- Description: The URLs to the conda channels that were used to resolve
+ dependencies (e.g., `https://conda.anaconda.org/conda-forge`).
+
+ The order is significant.
+
+###### `channel_priority`
+
+- Type: string
+- Description: Optionally the channel priority used to solve the dependencies.
+
+ - `strict` (default): Only the repodata in the first channel that contains repodata for a package will be considered.
+ - `disabled`: Any repodata from any channel for a package can be considered.
+
+###### `solve_strategy`
+
+- Type: string
+- Description: Optionally the solve strategy used to solve the dependencies.
+
+ - `highest` (default): Resolve the highest version of each package.
+ - `lowest-version`: Resolve the lowest compatible version for each package.
+
+ All candidates with the same version are still ordered the same as with `highest`.
+ This ensures that the candidate with the highest build number is used and down-prioritization still works.
+
+ - `lowest-version-direct`: Resolve the lowest compatible version for direct dependencies but the
+ highest for transitive dependencies. This is similar to `lowest-version` but only for direct dependencies.
+
+###### `timestamp`
+
+- Type: string / timestamp in ISO 8601 format
+- Description: The timestamp of the build configuration (e.g.,
+ `2024-04-13T14:35:30.774863Z`).
+
+###### `subpackages`
+
+- Type: list of objects
+- Description: Contains information about subpackages that are used in
+ `pin_subpackage` expressions.
+ - `curl`: An example subpackage.
+ - `name`: The name of the subpackage (e.g., `curl`).
+ - `version`: The version of the subpackage (e.g., `8.0.1`).
+ - `build_string`: The build string for the subpackage (e.g., `h60d57d3_0`).
+
+###### `packaging_settings`
+
+- Type: object
+- Description: Contains settings related to the final package output.
+ - `archive_type`: The type of archive used for packaging (either `tar_bz2` or
+ `conda`).
+ - `compression_level`: The numerical compression level used for packaging
+ (e.g., `15`).
+
+#### Example
+
+```yaml
+build_configuration:
+ target_platform: osx-arm64
+ host_platform: osx-arm64
+ build_platform: osx-arm64
+ variant:
+ target_platform: osx-arm64
+ hash:
+ hash: 60d57d3
+ prefix: "" # would contain `py311` and similar prefixes based on variant config
+ directories:
+ host_prefix: # host prefix with placeholders for the host environment
+ build_prefix: # build prefix for the build environment
+ work_dir: # work dir with extracted sources
+ build_dir: # build dir that contains host_prefix, build_prefix and work_dir as subdirectories
+ channels:
+ - conda-forge
+ channel_priority: strict
+ solve_strategy: highest
+ timestamp: 2024-04-13T14:35:30.774863Z
+ subpackages:
+ curl:
+ name: curl
+ version: 8.0.1
+ build_string: h60d57d3_0
+ packaging_settings:
+ archive_type: conda
+ compression_level: 15
+```
+
+### Finalized dependencies
+
+The finalized dependencies section contains a "lockfile" of all the dependencies
+exactly as they were used at build-time, for the two environments `build` and
+`host`. It also includes the final `run` and `constraints` specs that are
+computed based on the `build` and `host` dependencies (resolved all
+`run_exports`).
+
+The `finalized_dependencies` section contains the following keys:
+
+```yaml
+finalized_dependencies:
+ build:
+ specs: [list of spec objects]
+ resolved: [list of resolved dependency objects]
+ run_exports: { package_name: run_export } # all run_exports.json that were found among the packages in this environment
+ host:
+ specs: [list of spec objects]
+ resolved: [list of resolved dependency objects]
+ run_exports: { package_name: run_export } # all run_exports.json that were found among the packages in this environment
+ run:
+ depends: [list of dependencies with dependency source information]
+ constraints: [list of constraints with dependency source information]
+ run_exports: optional run_export dictionary
+```
+
+#### Spec objects
+
+A dependency spec contains the `MatchSpec` and additional information about the
+source of the dependency. There are 6 possible `DependencyInfo` versions:
+
+- `pin_subpackage`: The dependency comes from a `pin_subpackage` expression.
+- `pin_compatible`: The dependency comes from a `pin_compatible` expression.
+- `source`: The dependency comes from the recipe.
+- `run_export`: The dependency comes from a run export.
+- `variant`: The dependency comes from a variant.
+
+Example:
+
+```yaml
+# language specified in ${{ compiler(`c`) }}
+- source: clang_osx-arm64
+- source: make >=1.3
+- pin_compatible: quarto
+ lower_bound: x.x # not present if set to None
+ upper_bound: x.x.x # not present if set to None
+ exact: true # not present if false
+ spec: quarto >=1.4.550,<1.5
+- pin_subpackage: some-pkg-a
+ lower_bound: x.x # not present if set to None
+ upper_bound: x.x.x # not present if set to None
+ exact: true # not present if false
+ spec: some-pkg-a >=1.0.0,<2
+- run_export: zlib
+ spec: libzlib >=1.3.1,<1.4.0a0
+ from: host # environment that exported this dependency
+- variant: setuptools # key from variant coming configuration
+ spec: setuptools 69.*
+```
+
+The list of `resolved` dependencies contains a dictionary with the following
+fields (equivalent to `RepoDataRecord`):
+
+```yaml
+build: hb7217d7_0
+build_number: 0
+depends: []
+license: GPL-2.0-or-later
+license_family: GPL
+md5: fe8efc3385f58f0055e8100b07225055
+name: libtool
+sha256: efe50471d2baea151f2a93f1f99c05553f8c88e3f0065cdc267e1aa2e8c42449
+size: 408403
+subdir: osx-arm64
+timestamp: 1672362003513 # when available
+version: 2.4.7
+fn: libtool-2.4.7-hb7217d7_0.conda
+url: https://conda.anaconda.org/conda-forge/osx-arm64/libtool-2.4.7-hb7217d7_0.conda
+channel: https://conda.anaconda.org/conda-forge/
+```
+
+#### Run exports
+
+The `build` and `host` section contain a `run_exports` dictionary that contains
+collected run_exports from all direct dependencies. The dictionary contains
+`name: run_export` pairs. A `run_export` entry contains the keys:
+
+```yaml
+weak: [list of weak run exports]
+strong: [list of strong run exports]
+weak_constrains: [list of weak constrains]
+strong_constrains: [list of strong constrains]
+noarch: [list of noarch run exports]
+```
+
+The `run` section also contains a single `run_exports` entry that is used to
+generate the `run_exports` metadata for the package that we are currently
+building. Different from the other `run_exports`, these are "outgoing"
+run_exports.
+
+### Finalized sources
+
+This section contains the finalized sources that were used at build-time. For
+`git` sources, this contains a reference to the commit hash that was used. For
+`url` and `path` sources, this contains the URL and the SHA256 hash of the
+downloaded file.
+
+```yaml
+finalized_sources:
+ - path: ../
+ - git: https://github.com/ros2-gbp/rosidl_typesupport_fastrtps-release.git
+ rev: 7af149d83d7e4a2d4c9ce4ae9682bff4a8ebc28e # here we are storing the commit hash
+ target_directory: ros-humble-fastrtps-cmake-module/src/work
+ - url: https://github.com/watchexec/watchexec/archive/refs/tags/v1.25.1.tar.gz
+ sha256: 9609163c14cd49ec651562838f38b88ed2d370e354af312ddc78c2be76c08d37
+```
+
+The following fields are available for each source:
+
+#### Path source
+
+> The `sha256` field is added if it is not already present in the source
+> description. We should compute the SHA hashes of the
+> patches as well and store it in the source description.
+
+```yaml
+path: # path to the source
+sha256: # computed sha256 hash of the source (this is only added if not in the source entry in the original recipe)
+patches: # list of patches that should be applied to the source
+target_directory: # optional target directory where the source should be extracted
+file_name: # optional file name
+use_gitignore: # optional bool whether to use the .gitignore file when copying a directory
+```
+
+#### Git source
+
+```yaml
+git: # git URL
+rev: # resolved commit hash at build time
+depth: # optional depth to clone the repository
+patches: # list of patches that should be applied to the source
+target_directory: # optional target directory where the source should be extracted
+lfs: # optional bool to request the lfs pull in git source
+```
+
+#### URL source
+
+```yaml
+url: # URL to the source code
+sha256: # sha256 hash of the downloaded file
+md5: # md5 hash of the downloaded file
+file_name: # optional file name to rename the downloaded file
+patches: # list of patches that should be applied to the source
+target_directory: # optional target directory where the source should be extracted
+```
+
+### System tools
+
+This section records all system tools that were used during build execution and
+their versions (if available). This is useful for tracking the tools that were
+used from the host system in order to warn if reproducing the build on a
+different host system might lead to different results. It also records the
+version of the build tool (conda-build, rattler-build, etc) itself, so a future build could be reproduced with
+the same version of these tools.
+
+```yaml
+system_tools:
+ rattler-build: "0.14.0"
+ patchelf: "0.12"
+ git: "2.33.0"
+```
+
+## Full Example
+
+```yaml
+rendered_recipe_version: 1
+recipe:
+ schema_version: 1
+ package:
+ name: curl
+ version: 8.0.1
+ source:
+ - url: http://curl.haxx.se/download/curl-8.0.1.tar.bz2
+ sha256: 9b6b1e96b748d04b968786b6bdf407aa5c75ab53a3d37c1c8c81cdb736555ccf
+ build:
+ number: 0
+ string: h60d57d3_0
+ requirements:
+ build:
+ - compiler: c
+ - make
+ - perl
+ - pkg-config
+ - libtool
+ host:
+ - zlib
+ tests:
+ - script:
+ - curl --version
+ about:
+ homepage: http://curl.haxx.se/
+ repository: https://github.com/curl/curl
+ documentation: https://curl.haxx.se/docs/
+ license: curl
+ license_file:
+ - COPYING
+ summary: tool and library for transferring data with URL syntax
+ description: |-
+ Curl is an open source command line tool and library for transferring data
+ with URL syntax. It is used in command lines or scripts to transfer data.
+build_configuration:
+ target_platform: osx-arm64
+ host_platform: osx-arm64
+ build_platform: osx-arm64
+ variant:
+ target_platform: osx-arm64
+ hash:
+ hash: 60d57d3
+ directories:
+ host_prefix: /Users/wolfv/Programs/rattler-build/output/bld/rattler-build_curl_1713018930/host_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold
+ build_prefix: /Users/wolfv/Programs/rattler-build/output/bld/rattler-build_curl_1713018930/build_env
+ work_dir: /Users/wolfv/Programs/rattler-build/output/bld/rattler-build_curl_1713018930/work
+ build_dir: /Users/wolfv/Programs/rattler-build/output/bld/rattler-build_curl_1713018930
+ channels:
+ - conda-forge
+ channel_priority: strict
+ solve_strategy: highest
+ timestamp: 2024-04-13T14:35:30.774863Z
+ subpackages:
+ curl:
+ name: curl
+ version: 8.0.1
+ build_string: h60d57d3_0
+ packaging_settings:
+ archive_type: conda
+ compression_level: 15
+finalized_dependencies:
+ build:
+ specs:
+ # specs record the source, can be one of `raw`, `compiler`, `pin_subpackage`, `pin_compatible`, `variant`, `run_export`
+ - compiler: c
+ spec: clang_osx-arm64
+ - source: make
+ - source: perl
+ - source: pkg-config
+ - source: libtool
+ resolved:
+ - build: he57ea6c_1
+ build_number: 1
+ depends: []
+ license: GPL-3.0-or-later
+ license_family: GPL
+ md5: 1939d04ef89e38fde652ee8c669e092f
+ name: make
+ sha256: a011e3e1c4caec821eb4213d0a0154d39e5f81a44d2e8bafe6f84e7840c3909e
+ size: 253227
+ subdir: osx-arm64
+ timestamp: 1602706492919
+ version: "4.3"
+ fn: make-4.3-he57ea6c_1.tar.bz2
+ url: https://conda.anaconda.org/conda-forge/osx-arm64/make-4.3-he57ea6c_1.tar.bz2
+ channel: https://conda.anaconda.org/conda-forge/
+ - build: hab62308_1008
+ build_number: 1008
+ depends:
+ - libglib >=2.70.2,<3.0a0
+ - libiconv >=1.16,<2.0.0a0
+ license: GPL-2.0-or-later
+ license_family: GPL
+ md5: 8d173d52214679033079d1b0582075aa
+ name: pkg-config
+ sha256: e59e69111709d097f9938e72ba19811ec1ef36aababdbed77bd7c767f15639e0
+ size: 46049
+ subdir: osx-arm64
+ timestamp: 1650239029040
+ version: 0.29.2
+ fn: pkg-config-0.29.2-hab62308_1008.tar.bz2
+ url: https://conda.anaconda.org/conda-forge/osx-arm64/pkg-config-0.29.2-hab62308_1008.tar.bz2
+ channel: https://conda.anaconda.org/conda-forge/
+ - build: h0d3ecfb_2
+ build_number: 2
+ depends: []
+ license: LGPL-2.1-only
+ md5: 69bda57310071cf6d2b86caf11573d2d
+ name: libiconv
+ sha256: bc7de5097b97bcafcf7deaaed505f7ce02f648aac8eccc0d5a47cc599a1d0304
+ size: 676469
+ subdir: osx-arm64
+ timestamp: 1702682458114
+ version: "1.17"
+ fn: libiconv-1.17-h0d3ecfb_2.conda
+ url: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.17-h0d3ecfb_2.conda
+ channel: https://conda.anaconda.org/conda-forge/
+ - build: hb7217d7_0
+ build_number: 0
+ depends: []
+ license: GPL-2.0-or-later
+ license_family: GPL
+ md5: fe8efc3385f58f0055e8100b07225055
+ name: libtool
+ sha256: efe50471d2baea151f2a93f1f99c05553f8c88e3f0065cdc267e1aa2e8c42449
+ size: 408403
+ subdir: osx-arm64
+ timestamp: 1672362003513
+ version: 2.4.7
+ fn: libtool-2.4.7-hb7217d7_0.conda
+ url: https://conda.anaconda.org/conda-forge/osx-arm64/libtool-2.4.7-hb7217d7_0.conda
+ channel: https://conda.anaconda.org/conda-forge/
+ - build: 7_h4614cfb_perl5
+ build_number: 7
+ depends: []
+ license: GPL-1.0-or-later OR Artistic-1.0-Perl
+ md5: ba3cbe93f99e896765422cc5f7c3a79e
+ name: perl
+ sha256: b0c55040d2994fd6bf2f83786561d92f72306d982d6ea12889acad24a9bf43b8
+ size: 14439531
+ subdir: osx-arm64
+ timestamp: 1703311335652
+ version: 5.32.1
+ fn: perl-5.32.1-7_h4614cfb_perl5.conda
+ url: https://conda.anaconda.org/conda-forge/osx-arm64/perl-5.32.1-7_h4614cfb_perl5.conda
+ channel: https://conda.anaconda.org/conda-forge/
+ run_exports:
+ weak:
+ - perl >=5.32.1,<5.33.0a0 *_perl5
+ noarch:
+ - perl >=5.32.1,<6.0a0 *_perl5
+ - build: hfc324ee_4
+ build_number: 4
+ constrains:
+ - glib 2.80.0 *_4
+ depends:
+ - libffi >=3.4,<4.0a0
+ - libiconv >=1.17,<2.0a0
+ - libintl >=0.22.5,<1.0a0
+ - libzlib >=1.2.13,<1.3.0a0
+ - pcre2 >=10.43,<10.44.0a0
+ license: LGPL-2.1-or-later
+ md5: c0de76b2c1f1bee86ca8660684ab6ec4
+ name: libglib
+ sha256: 48f371fcb374020c140b26dbfc9a6ef3fbc834334e8cca984120be7bffa6d1bf
+ size: 2638588
+ subdir: osx-arm64
+ timestamp: 1712590361453
+ version: 2.80.0
+ fn: libglib-2.80.0-hfc324ee_4.conda
+ url: https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.80.0-hfc324ee_4.conda
+ channel: https://conda.anaconda.org/conda-forge/
+ - build: h26f9a81_0
+ build_number: 0
+ depends:
+ - bzip2 >=1.0.8,<2.0a0
+ - libzlib >=1.2.13,<1.3.0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ md5: 1ddc87f00014612830f3235b5ad6d821
+ name: pcre2
+ sha256: 4bf7b5fa091f5e7ab0b78778458be1e81c1ffa182b63795734861934945a63a7
+ size: 615219
+ subdir: osx-arm64
+ timestamp: 1708118184900
+ version: "10.43"
+ fn: pcre2-10.43-h26f9a81_0.conda
+ url: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.43-h26f9a81_0.conda
+ channel: https://conda.anaconda.org/conda-forge/
+ - build: h8fbad5d_2
+ build_number: 2
+ depends:
+ - libiconv >=1.17,<2.0a0
+ license: LGPL-2.1-or-later
+ md5: 3d216d0add050129007de3342be7b8c5
+ name: libintl
+ sha256: 21bc79bdf34ffd20cb84d2a8bd82d7d0e2a1b94b9e72773f0fb207e5b4f1ff63
+ size: 81206
+ subdir: osx-arm64
+ timestamp: 1712512755390
+ version: 0.22.5
+ fn: libintl-0.22.5-h8fbad5d_2.conda
+ url: https://conda.anaconda.org/conda-forge/osx-arm64/libintl-0.22.5-h8fbad5d_2.conda
+ channel: https://conda.anaconda.org/conda-forge/
+ - build: h53f4e23_5
+ build_number: 5
+ constrains:
+ - zlib 1.2.13 *_5
+ depends: []
+ license: Zlib
+ license_family: Other
+ md5: 1a47f5236db2e06a320ffa0392f81bd8
+ name: libzlib
+ sha256: ab1c8aefa2d54322a63aaeeefe9cf877411851738616c4068e0dccc66b9c758a
+ size: 48102
+ subdir: osx-arm64
+ timestamp: 1686575426584
+ version: 1.2.13
+ fn: libzlib-1.2.13-h53f4e23_5.conda
+ url: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.2.13-h53f4e23_5.conda
+ channel: https://conda.anaconda.org/conda-forge/
+ - build: h93a5062_5
+ build_number: 5
+ depends: []
+ license: bzip2-1.0.6
+ license_family: BSD
+ md5: 1bbc659ca658bfd49a481b5ef7a0f40f
+ name: bzip2
+ sha256: bfa84296a638bea78a8bb29abc493ee95f2a0218775642474a840411b950fe5f
+ size: 122325
+ subdir: osx-arm64
+ timestamp: 1699280294368
+ version: 1.0.8
+ fn: bzip2-1.0.8-h93a5062_5.conda
+ url: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h93a5062_5.conda
+ channel: https://conda.anaconda.org/conda-forge/
+ - build: h3422bc3_5
+ build_number: 5
+ depends: []
+ license: MIT
+ license_family: MIT
+ md5: 086914b672be056eb70fd4285b6783b6
+ name: libffi
+ sha256: 41b3d13efb775e340e4dba549ab5c029611ea6918703096b2eaa9c015c0750ca
+ size: 39020
+ subdir: osx-arm64
+ timestamp: 1636488587153
+ version: 3.4.2
+ fn: libffi-3.4.2-h3422bc3_5.tar.bz2
+ url: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2
+ channel: https://conda.anaconda.org/conda-forge/
+ - build: h54d7cd3_11
+ build_number: 11
+ depends:
+ - clang_impl_osx-arm64 18.1.3 hda94301_11
+ license: BSD-3-Clause
+ license_family: BSD
+ md5: 7bdafeb8d61d59551df2417995bc3d46
+ name: clang_osx-arm64
+ sha256: 595cbec0f835ba16ad551315079193d16fc7f3a4e136aa1045ab9104cac79bf7
+ size: 20490
+ subdir: osx-arm64
+ timestamp: 1712621394350
+ version: 18.1.3
+ fn: clang_osx-arm64-18.1.3-h54d7cd3_11.conda
+ url: https://conda.anaconda.org/conda-forge/osx-arm64/clang_osx-arm64-18.1.3-h54d7cd3_11.conda
+ channel: https://conda.anaconda.org/conda-forge/
+ - build: hda94301_11
+ build_number: 11
+ depends:
+ - cctools_osx-arm64
+ - clang 18.1.3.*
+ - compiler-rt 18.1.3.*
+ - ld64_osx-arm64
+ - llvm-tools 18.1.3.*
+ license: BSD-3-Clause
+ license_family: BSD
+ md5: 90e54a957e833f7cd2412b6d2e1d84fa
+ name: clang_impl_osx-arm64
+ sha256: f00e3930fa341ad5fa87a90f297b385a949bf2ee100a3a2cc2a135629fde6d7e
+ size: 17571
+ subdir: osx-arm64
+ timestamp: 1712621386541
+ version: 18.1.3
+ fn: clang_impl_osx-arm64-18.1.3-hda94301_11.conda
+ url: https://conda.anaconda.org/conda-forge/osx-arm64/clang_impl_osx-arm64-18.1.3-hda94301_11.conda
+ channel: https://conda.anaconda.org/conda-forge/
+ - build: h30cc82d_0
+ build_number: 0
+ constrains:
+ - llvm 18.1.3
+ - clang-tools 18.1.3
+ - clang 18.1.3
+ - llvmdev 18.1.3
+ depends:
+ - libllvm18 18.1.3 h30cc82d_0
+ - libxml2 >=2.12.6,<3.0a0
+ - libzlib >=1.2.13,<1.3.0a0
+ - zstd >=1.5.5,<1.6.0a0
+ license: Apache-2.0 WITH LLVM-exception
+ license_family: Apache
+ md5: 505aef673d805f9efe0c61954a6a99d0
+ name: llvm-tools
+ sha256: 48eb7b17ca6de1b43dfddc3b4a629a8a9764c9da3f3012980e1b917c71f06a4f
+ size: 23023681
+ subdir: osx-arm64
+ timestamp: 1712517958538
+ version: 18.1.3
+ fn: llvm-tools-18.1.3-h30cc82d_0.conda
+ url: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-tools-18.1.3-h30cc82d_0.conda
+ channel: https://conda.anaconda.org/conda-forge/
+ - build: h3808999_0
+ build_number: 0
+ depends:
+ - clang 18.1.3.*
+ - clangxx 18.1.3.*
+ - compiler-rt_osx-arm64 18.1.3.*
+ license: Apache-2.0 WITH LLVM-exception
+ license_family: APACHE
+ md5: 09f614cf0dc4ea2b249c2e522b337730
+ name: compiler-rt
+ sha256: dfada604649fb2cfa6fb3dbd657fccf81cd01e00a7f6f29da24fc40e36cd51fa
+ size: 96152
+ subdir: osx-arm64
+ timestamp: 1712580507858
+ version: 18.1.3
+ fn: compiler-rt-18.1.3-h3808999_0.conda
+ url: https://conda.anaconda.org/conda-forge/osx-arm64/compiler-rt-18.1.3-h3808999_0.conda
+ channel: https://conda.anaconda.org/conda-forge/
+ - build: default_h4cf2255_0
+ build_number: 0
+ constrains:
+ - clang-tools 18.1.3.*
+ - llvm 18.1.3.*
+ - llvm-tools 18.1.3.*
+ - llvmdev 18.1.3.*
+ depends:
+ - clang-18 18.1.3 default_he012953_0
+ license: Apache-2.0 WITH LLVM-exception
+ license_family: Apache
+ md5: efbaa3d968b1dcacba9eb980d1ab66f4
+ name: clang
+ sha256: 613f4c4773f1dd274d2682a9170d52cb466f437a47ebcad2c2634c3b37aeb73f
+ size: 22913
+ subdir: osx-arm64
+ timestamp: 1712569692457
+ version: 18.1.3
+ fn: clang-18.1.3-default_h4cf2255_0.conda
+ url: https://conda.anaconda.org/conda-forge/osx-arm64/clang-18.1.3-default_h4cf2255_0.conda
+ channel: https://conda.anaconda.org/conda-forge/
+ - build: h4f39d0f_0
+ build_number: 0
+ depends:
+ - libzlib >=1.2.13,<1.3.0a0
+ license: BSD-3-Clause
+ license_family: BSD
+ md5: 5b212cfb7f9d71d603ad891879dc7933
+ name: zstd
+ sha256: 7e1fe6057628bbb56849a6741455bbb88705bae6d6646257e57904ac5ee5a481
+ size: 400508
+ subdir: osx-arm64
+ timestamp: 1693151393180
+ version: 1.5.5
+ fn: zstd-1.5.5-h4f39d0f_0.conda
+ url: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.5-h4f39d0f_0.conda
+ channel: https://conda.anaconda.org/conda-forge/
+ - build: h30cc82d_0
+ build_number: 0
+ depends:
+ - libcxx >=16
+ - libxml2 >=2.12.6,<3.0a0
+ - libzlib >=1.2.13,<1.3.0a0
+ - zstd >=1.5.5,<1.6.0a0
+ license: Apache-2.0 WITH LLVM-exception
+ license_family: Apache
+ md5: fad73e8421bcd0de381d172c2224d3a5
+ name: libllvm18
+ sha256: 5a8781ab13b163fd028916d050bb209718b14de85493bb7a4b93ea798998b9fe
+ size: 25782519
+ subdir: osx-arm64
+ timestamp: 1712517407600
+ version: 18.1.3
+ fn: libllvm18-18.1.3-h30cc82d_0.conda
+ url: https://conda.anaconda.org/conda-forge/osx-arm64/libllvm18-18.1.3-h30cc82d_0.conda
+ channel: https://conda.anaconda.org/conda-forge/
+ - build: h3808999_0
+ build_number: 0
+ constrains:
+ - compiler-rt 18.1.3
+ depends:
+ - clang 18.1.3.*
+ - clangxx 18.1.3.*
+ license: Apache-2.0 WITH LLVM-exception
+ license_family: APACHE
+ md5: 78c11131b59e53aedcf7854956a9347c
+ name: compiler-rt_osx-arm64
+ noarch: generic
+ sha256: 4bbe97d77ae12edd5c0206d014e0473ae8c4fcacbc1e1b21e8e92fd694608301
+ size: 10165573
+ subdir: noarch
+ timestamp: 1712580450851
+ version: 18.1.3
+ fn: compiler-rt_osx-arm64-18.1.3-h3808999_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/compiler-rt_osx-arm64-18.1.3-h3808999_0.conda
+ channel: https://conda.anaconda.org/conda-forge/
+ - build: default_h4cf2255_0
+ build_number: 0
+ depends:
+ - clang 18.1.3 default_h4cf2255_0
+ license: Apache-2.0 WITH LLVM-exception
+ license_family: Apache
+ md5: fd98656c5b62774633c84c41f42bdd6d
+ name: clangxx
+ sha256: 1f9c1605d4f74b1d5df7d44676a5a6c53d542fc8c44d94fcc1d4d1977cede661
+ size: 22939
+ subdir: osx-arm64
+ timestamp: 1712569715149
+ version: 18.1.3
+ fn: clangxx-18.1.3-default_h4cf2255_0.conda
+ url: https://conda.anaconda.org/conda-forge/osx-arm64/clangxx-18.1.3-default_h4cf2255_0.conda
+ channel: https://conda.anaconda.org/conda-forge/
+ - build: default_he012953_0
+ build_number: 0
+ constrains:
+ - clang-tools 18.1.3
+ - clangxx 18.1.3
+ - llvm-tools 18.1.3
+ - clangdev 18.1.3
+ depends:
+ - libclang-cpp18.1 18.1.3 default_he012953_0
+ - libcxx >=16.0.6
+ - libllvm18 >=18.1.3,<18.2.0a0
+ license: Apache-2.0 WITH LLVM-exception
+ license_family: Apache
+ md5: 931dd6124b399ae12172f235f5ace407
+ name: clang-18
+ sha256: edb5c1e2ffc7704b0e0bce0f5315eb1aba8fd9710e61bcbdeb40e340720123c6
+ size: 754206
+ subdir: osx-arm64
+ timestamp: 1712569562918
+ version: 18.1.3
+ fn: clang-18-18.1.3-default_he012953_0.conda
+ url: https://conda.anaconda.org/conda-forge/osx-arm64/clang-18-18.1.3-default_he012953_0.conda
+ channel: https://conda.anaconda.org/conda-forge/
+ - build: h4653b0c_0
+ build_number: 0
+ depends: []
+ license: Apache-2.0 WITH LLVM-exception
+ license_family: Apache
+ md5: 9d7d724faf0413bf1dbc5a85935700c8
+ name: libcxx
+ sha256: 11d3fb51c14832d9e4f6d84080a375dec21ea8a3a381a1910e67ff9cedc20355
+ size: 1160232
+ subdir: osx-arm64
+ timestamp: 1686896993785
+ version: 16.0.6
+ fn: libcxx-16.0.6-h4653b0c_0.conda
+ url: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-16.0.6-h4653b0c_0.conda
+ channel: https://conda.anaconda.org/conda-forge/
+ - build: default_he012953_0
+ build_number: 0
+ depends:
+ - libcxx >=16.0.6
+ - libllvm18 >=18.1.3,<18.2.0a0
+ license: Apache-2.0 WITH LLVM-exception
+ license_family: Apache
+ md5: d8e0decc03dadc234e0885bb2a857c68
+ name: libclang-cpp18.1
+ sha256: a528f933aa430c86591ed94e7eb5e4c16947232f149920250ba78e104d91e0b3
+ size: 12809223
+ subdir: osx-arm64
+ timestamp: 1712569190982
+ version: 18.1.3
+ fn: libclang-cpp18.1-18.1.3-default_he012953_0.conda
+ url: https://conda.anaconda.org/conda-forge/osx-arm64/libclang-cpp18.1-18.1.3-default_he012953_0.conda
+ channel: https://conda.anaconda.org/conda-forge/
+ - build: h5e7191b_0
+ build_number: 0
+ constrains:
+ - ld 711.*
+ - cctools 986.*
+ - cctools_osx-arm64 986.*
+ - clang >=18.1.1,<19.0a0
+ depends:
+ - libcxx
+ - libllvm18 >=18.1.1,<18.2.0a0
+ - sigtool
+ - tapi >=1100.0.11,<1101.0a0
+ license: APSL-2.0
+ license_family: Other
+ md5: c751b76ae8112e3d516831063da179cc
+ name: ld64_osx-arm64
+ sha256: 82f964dcff2052b327762ca44651407451ad396a1540c664928841c72b7cf3c0
+ size: 1064448
+ subdir: osx-arm64
+ timestamp: 1710484550965
+ version: "711"
+ fn: ld64_osx-arm64-711-h5e7191b_0.conda
+ url: https://conda.anaconda.org/conda-forge/osx-arm64/ld64_osx-arm64-711-h5e7191b_0.conda
+ channel: https://conda.anaconda.org/conda-forge/
+ - build: hd11630f_0
+ build_number: 0
+ constrains:
+ - cctools 986.*
+ - clang 18.1.*
+ - ld64 711.*
+ depends:
+ - ld64_osx-arm64 >=711,<712.0a0
+ - libcxx
+ - libllvm18 >=18.1.1,<18.2.0a0
+ - libzlib >=1.2.13,<1.3.0a0
+ - sigtool
+ license: APSL-2.0
+ license_family: Other
+ md5: cce200c91b2d291c85e66098fe0d31c2
+ name: cctools_osx-arm64
+ sha256: 4152323bbb78e2730fea9004333c9c51fb82a9ddd935f005280bf621849ec53d
+ size: 1123368
+ subdir: osx-arm64
+ timestamp: 1710484635601
+ version: "986"
+ fn: cctools_osx-arm64-986-hd11630f_0.conda
+ url: https://conda.anaconda.org/conda-forge/osx-arm64/cctools_osx-arm64-986-hd11630f_0.conda
+ channel: https://conda.anaconda.org/conda-forge/
+ - build: he4954df_0
+ build_number: 0
+ depends:
+ - libcxx >=11.0.0.a0
+ license: NCSA
+ license_family: MIT
+ md5: d83362e7d0513f35f454bc50b0ca591d
+ name: tapi
+ sha256: 1709265fbee693a9e8b4126b0a3e68a6c4718b05821c659279c1af051f2d40f3
+ size: 191416
+ subdir: osx-arm64
+ timestamp: 1602687595316
+ version: 1100.0.11
+ fn: tapi-1100.0.11-he4954df_0.tar.bz2
+ url: https://conda.anaconda.org/conda-forge/osx-arm64/tapi-1100.0.11-he4954df_0.tar.bz2
+ channel: https://conda.anaconda.org/conda-forge/
+ - build: h0d0cfa8_1
+ build_number: 1
+ depends:
+ - icu >=73.2,<74.0a0
+ - libiconv >=1.17,<2.0a0
+ - libzlib >=1.2.13,<1.3.0a0
+ - xz >=5.2.6,<6.0a0
+ license: MIT
+ license_family: MIT
+ md5: c08526c957192192e1e7b4f622761144
+ name: libxml2
+ sha256: f18775ca8494ead5451d4acfc53fa7ebf7a8b5ed04c43bcc50fab847c9780cb3
+ size: 588539
+ subdir: osx-arm64
+ timestamp: 1711318256840
+ version: 2.12.6
+ fn: libxml2-2.12.6-h0d0cfa8_1.conda
+ url: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.12.6-h0d0cfa8_1.conda
+ channel: https://conda.anaconda.org/conda-forge/
+ - build: h57fd34a_0
+ build_number: 0
+ depends: []
+ license: LGPL-2.1 and GPL-2.0
+ md5: 39c6b54e94014701dd157f4f576ed211
+ name: xz
+ sha256: 59d78af0c3e071021cfe82dc40134c19dab8cdf804324b62940f5c8cd71803ec
+ size: 235693
+ subdir: osx-arm64
+ timestamp: 1660346961024
+ version: 5.2.6
+ fn: xz-5.2.6-h57fd34a_0.tar.bz2
+ url: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2
+ channel: https://conda.anaconda.org/conda-forge/
+ - build: hc8870d7_0
+ build_number: 0
+ depends: []
+ license: MIT
+ license_family: MIT
+ md5: 8521bd47c0e11c5902535bb1a17c565f
+ name: icu
+ sha256: ff9cd0c6cd1349954c801fb443c94192b637e1b414514539f3c49c56a39f51b1
+ size: 11997841
+ subdir: osx-arm64
+ timestamp: 1692902104771
+ version: "73.2"
+ fn: icu-73.2-hc8870d7_0.conda
+ url: https://conda.anaconda.org/conda-forge/osx-arm64/icu-73.2-hc8870d7_0.conda
+ channel: https://conda.anaconda.org/conda-forge/
+ - build: h44b9a77_0
+ build_number: 0
+ depends:
+ - openssl >=3.0.0,<4.0a0
+ license: MIT
+ license_family: MIT
+ md5: 4a2cac04f86a4540b8c9b8d8f597848f
+ name: sigtool
+ sha256: 70791ae00a3756830cb50451db55f63e2a42a2fa2a8f1bab1ebd36bbb7d55bff
+ size: 210264
+ subdir: osx-arm64
+ timestamp: 1643442231687
+ version: 0.1.3
+ fn: sigtool-0.1.3-h44b9a77_0.tar.bz2
+ url: https://conda.anaconda.org/conda-forge/osx-arm64/sigtool-0.1.3-h44b9a77_0.tar.bz2
+ channel: https://conda.anaconda.org/conda-forge/
+ - build: h0d3ecfb_1
+ build_number: 1
+ constrains:
+ - pyopenssl >=22.1
+ depends:
+ - ca-certificates
+ license: Apache-2.0
+ license_family: Apache
+ md5: eb580fb888d93d5d550c557323ac5cee
+ name: openssl
+ sha256: 519dc941d7ab0ebf31a2878d85c2f444450e7c5f6f41c4d07252c6bb3417b78b
+ size: 2855250
+ subdir: osx-arm64
+ timestamp: 1710793435903
+ version: 3.2.1
+ fn: openssl-3.2.1-h0d3ecfb_1.conda
+ url: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.2.1-h0d3ecfb_1.conda
+ channel: https://conda.anaconda.org/conda-forge/
+ - build: hf0a4a13_0
+ build_number: 0
+ depends: []
+ license: ISC
+ md5: fb416a1795f18dcc5a038bc2dc54edf9
+ name: ca-certificates
+ sha256: 49bc3439816ac72d0c0e0f144b8cc870fdcc4adec2e861407ec818d8116b2204
+ size: 155725
+ subdir: osx-arm64
+ timestamp: 1706844034242
+ version: 2024.2.2
+ fn: ca-certificates-2024.2.2-hf0a4a13_0.conda
+ url: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.2.2-hf0a4a13_0.conda
+ channel: https://conda.anaconda.org/conda-forge/
+ host:
+ specs:
+ - source: zlib
+ resolved:
+ - build: h0d3ecfb_0
+ build_number: 0
+ depends:
+ - libzlib 1.3.1 h0d3ecfb_0
+ license: Zlib
+ license_family: Other
+ md5: 7ae2a86abebc82333e585a40b60fb1ab
+ name: zlib
+ sha256: c6c947aa8bf6f471f58c37aa7a20bc121adfd1b3a92e3f73e7962b2cfb288990
+ size: 85372
+ subdir: osx-arm64
+ timestamp: 1709241186776
+ version: 1.3.1
+ fn: zlib-1.3.1-h0d3ecfb_0.conda
+ url: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h0d3ecfb_0.conda
+ channel: https://conda.anaconda.org/conda-forge/
+ run_exports:
+ weak:
+ - libzlib >=1.3.1,<1.4.0a0
+ - build: h0d3ecfb_0
+ build_number: 0
+ constrains:
+ - zlib 1.3.1 *_0
+ depends: []
+ license: Zlib
+ license_family: Other
+ md5: 2a2463424cc5e961a6d04bbbfb5838cf
+ name: libzlib
+ sha256: 9c59bd3f3e3e1900620e3a85c04d3a3699cb93c714333d06cb8afdd7addaae9d
+ size: 47040
+ subdir: osx-arm64
+ timestamp: 1709241137619
+ version: 1.3.1
+ fn: libzlib-1.3.1-h0d3ecfb_0.conda
+ url: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h0d3ecfb_0.conda
+ channel: https://conda.anaconda.org/conda-forge/
+ run:
+ depends:
+ - source: run_export
+ spec: libzlib >=1.3.1,<1.4.0a0
+ from: host
+ source_package: zlib
+ constraints: []
+finalized_sources:
+ - url: http://curl.haxx.se/download/curl-8.0.1.tar.bz2
+ sha256: 9b6b1e96b748d04b968786b6bdf407aa5c75ab53a3d37c1c8c81cdb736555ccf
+system_tools:
+ codesign: ""
+ rattler-build: 0.14.2
+```
+
+## Changelog
+
+- 2026-04-17. Minted as CEP 40. Added missing header table, abstract section, and adjusted formatting slightly.
+- 2024-07-22. Accepted.
+- 2024-04-13. Submitted to .
+
+## Copyright
+
+All CEPs are explicitly [CC0 1.0 Universal](https://creativecommons.org/publicdomain/zero/1.0/).