diff --git a/docker/osm-nushell-krm-functions/krm/convert.nu b/docker/osm-nushell-krm-functions/krm/convert.nu
new file mode 100644
index 0000000..07578a0
--- /dev/null
+++ b/docker/osm-nushell-krm-functions/krm/convert.nu
@@ -0,0 +1,147 @@
+#######################################################################################
+# Copyright ETSI Contributors and Others.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#######################################################################################
+
+# Module with functions to convert between the different alternative representations of a set of Kubernetes resources: folders with manifests, lists of records (concatenated manifests), or ResourceLists.
+
+
+use ./concatenate.nu
+
+
+
+# Substitute environment variables in text from stdin.
+#
+# Environment variables can be listed either as a string in the format accepted by the `envsubst` command (e.g. `$VAR1,$VAR2`) or as a list of strings with the environment variable names that will be formatted by the function. In case the parameter is empty, it should invoke `envsubst` with no parameters, so that it replaces all the environment variables that are found.
+export def "replace environment variables" [vars_to_replace: any = ""]: [
+    string -> string
+] {
+    # Gather reference to stdin before it is lost
+    let text: string = $in
+
+    # Adapt the input as needed
+    let filter: string = (if ($vars_to_replace | describe) == "string" {
+        # If it is a string, it can be used directly as filter for envsubst
+        $vars_to_replace
+        } else if ($vars_to_replace | describe) == "list<string>" {
+        # If it is a list of strings, we can concatenate them in a single string with the right format for envsubst
+        ($vars_to_replace | each {|var| $"${($var)}" } | str join ',')
+    } else {
+        # Handle unexpected type for $vars_to_replace
+        error make {msg: $"Error: Expected a string or list of strings, but received ($vars_to_replace | describe)"}
+    })
+
+    # Proceed with the substitution
+    if ($filter | is-empty) {
+        $text | ^envsubst
+    } else {
+        $text | ^envsubst $filter
+    }
+}
+
+alias replace_env_vars = replace environment variables
+
+
+# Convert manifests in a source folder to a ResourceList
+export def "folder to resourcelist" [
+    --subst-env,   # Set if environment variables should be replaced
+    folder: path,
+    env_filter?: any = ""
+]: [
+    record -> record
+    nothing -> record
+] {
+    # Gather the input and convert to record if empty
+    let in_list: record = if $in == null { {} } else { $in }
+
+    # Create a ResourceList from the source folder and substitute environment variables if needed
+    let source_list: record = (
+        kpt fn source $folder
+        | if $subst_env {
+            $in | replace environment variables $env_filter
+        } else {
+            $in
+        }
+        | from yaml
+    )
+
+    # Merge both resource lists carefully
+    $in_list | concatenate resourcelists $source_list
+}
+
+export alias "folder to rl" = folder to resourcelist
+export alias folder2list_generator = folder to resourcelist
+
+
+# Convert a manifest from stdin to a ResourceList
+## NOTE: It is an equivalent with type-checks to:
+## kustomize cfg cat --wrap-kind ResourceList
+export def "manifest to resourcelist" []: [
+    any -> record
+] {
+    # Gather the input and convert to list
+    let manifest_in: list<any> = (if $in == null { [] }
+        else if ($in | describe | str starts-with "record") { [ $in ] }
+        else if ($in | describe | str starts-with "list") or ($in | describe | str starts-with "table") { $in }
+        else { error make {msg: $"Error: Expected a record or a list of records, but received ($in | describe)."}})
+
+    {
+        apiVersion: "config.kubernetes.io/v1"
+        kind: "ResourceList"
+        items: $manifest_in
+    }
+}
+
+export alias manifest2list = manifest to resourcelist
+
+
+# Convert a ResourceList to file manifests in a target folder
+export def "resourcelist to folder" [
+    --sync,                 # If sync is true, replaces all contents in the folder, otherwise just copies over.
+    folder: path,
+    dry_run?: bool = false  # If true, just prints the ResourceList but does not render any file
+]: [
+    record -> any
+] {
+
+    # Preserves the input value
+    let list_in: record = $in
+
+    # As optional parameter, defaults to $env.DRY_RUN when not set
+    let is_dry_run: bool = if $dry_run == null { $env.DRY_RUN | into bool } else { $dry_run }
+
+    # If it is a dry-run, just prints the input ResourceList and exits
+    if $is_dry_run {
+        return ($list_in | to yaml)
+    }
+
+    # First, render the manifests to a temporary folder
+    let tmp_folder: string = (mktemp -t -d)
+    let tmp_target: string = ($tmp_folder | path join manifests)
+    $list_in | to yaml | ^kpt fn sink $tmp_target
+
+    # Writes the contents to the target folder
+    if $sync {
+        # Sync actually removes any previous contents in the folder
+        rm -rf $folder
+    }
+    mkdir $folder
+    ls $tmp_target | get name | cp -r ...$in $folder
+
+    # Removes the temporary folder
+    rm -rf $tmp_folder
+}
+
+export alias list2folder = resourcelist to folder
