<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Standard library on Grafana Labs</title><link>https://grafana.com/docs/alloy/v1.15/reference/stdlib/</link><description>Recent content in Standard library on Grafana Labs</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="/docs/alloy/v1.15/reference/stdlib/index.xml" rel="self" type="application/rss+xml"/><item><title>array</title><link>https://grafana.com/docs/alloy/v1.15/reference/stdlib/array/</link><pubDate>Mon, 30 Mar 2026 15:47:22 +0000</pubDate><guid>https://grafana.com/docs/alloy/v1.15/reference/stdlib/array/</guid><content><![CDATA[&lt;h1 id=&#34;array&#34;&gt;array&lt;/h1&gt;
&lt;p&gt;The &lt;code&gt;array&lt;/code&gt; namespace contains functions related to arrays.&lt;/p&gt;
&lt;h2 id=&#34;arrayconcat&#34;&gt;array.concat&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;array.concat&lt;/code&gt; function concatenates one or more lists of values into a single list.
Each argument to &lt;code&gt;array.concat&lt;/code&gt; must be a list value.
Elements within the list can be any type.&lt;/p&gt;
&lt;h3 id=&#34;examples&#34;&gt;Examples&lt;/h3&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Alloy&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-alloy&#34;&gt;&amp;gt; array.concat([])
[]

&amp;gt; array.concat([1, 2], [3, 4])
[1, 2, 3, 4]

&amp;gt; array.concat([1, 2], [], [bool, null])
[1, 2, bool, null]

&amp;gt; array.concat([[1, 2], [3, 4]], [[5, 6]])
[[1, 2], [3, 4], [5, 6]]&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;arraycombine_maps&#34;&gt;array.combine_maps&lt;/h2&gt;


&lt;div data-shared=&#34;stability/experimental_feature.md&#34;&gt;
            &lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;EXPERIMENTAL&lt;/strong&gt;: This is an &lt;a href=&#34;/docs/release-life-cycle/&#34;&gt;experimental&lt;/a&gt; feature.
Experimental features are subject to frequent breaking changes, and may be removed with no equivalent replacement.
To enable and use an experimental feature, you must set the &lt;code&gt;stability.level&lt;/code&gt; 
    &lt;a href=&#34;/docs/alloy/v1.15/reference/cli/run/&#34;&gt;flag&lt;/a&gt; to &lt;code&gt;experimental&lt;/code&gt;.&lt;/p&gt;&lt;/blockquote&gt;
&lt;/div&gt;

        
&lt;p&gt;The &lt;code&gt;array.combine_maps&lt;/code&gt; function allows you to join two arrays of maps if certain keys have matching values in both maps. It&amp;rsquo;s particularly useful when combining labels of targets coming from different &lt;code&gt;prometheus.discovery.*&lt;/code&gt; or &lt;code&gt;prometheus.exporter.*&lt;/code&gt; components.
It takes three arguments:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The first two arguments are a of type &lt;code&gt;list(map(string))&lt;/code&gt;. The keys of the map are strings.
The value for each key could be of any Alloy type such as a &lt;code&gt;string&lt;/code&gt;, &lt;code&gt;integer&lt;/code&gt;, &lt;code&gt;map&lt;/code&gt;, or a &lt;code&gt;capsule&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The third input is an &lt;code&gt;array&lt;/code&gt; containing strings. The strings are the keys whose value has to match for maps to be combined.&lt;/li&gt;
&lt;li&gt;(optional) The fourth input is a &lt;code&gt;boolean&lt;/code&gt; which defaults to &lt;code&gt;false&lt;/code&gt;.
When it is set to &lt;code&gt;true&lt;/code&gt;, each item from the first argument will be passed through even if there is no match.
This is helpful if you want to enrich the first list with attributes from the second list, without losing any of the information from the first list.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The maps that don&amp;rsquo;t contain all the keys provided in the third argument will be discarded. When maps are combined and both contain the same keys, the last value from the second argument will be used.&lt;/p&gt;
&lt;p&gt;Pseudo function code:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;text&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-text&#34;&gt;for every map in arg1:
  for every map in arg2:
    if the condition key matches in both:
       merge maps and add to result&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;examples-1&#34;&gt;Examples&lt;/h3&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Alloy&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-alloy&#34;&gt;&amp;gt; array.combine_maps([{&amp;#34;instance&amp;#34;=&amp;#34;1.1.1.1&amp;#34;, &amp;#34;team&amp;#34;=&amp;#34;A&amp;#34;}], [{&amp;#34;instance&amp;#34;=&amp;#34;1.1.1.1&amp;#34;, &amp;#34;cluster&amp;#34;=&amp;#34;prod&amp;#34;}], [&amp;#34;instance&amp;#34;])
[{&amp;#34;instance&amp;#34;=&amp;#34;1.1.1.1&amp;#34;, &amp;#34;team&amp;#34;=&amp;#34;A&amp;#34;, &amp;#34;cluster&amp;#34;=&amp;#34;prod&amp;#34;}]

// Second map overrides the team in the first map
&amp;gt; array.combine_maps([{&amp;#34;instance&amp;#34;=&amp;#34;1.1.1.1&amp;#34;, &amp;#34;team&amp;#34;=&amp;#34;A&amp;#34;}], [{&amp;#34;instance&amp;#34;=&amp;#34;1.1.1.1&amp;#34;, &amp;#34;team&amp;#34;=&amp;#34;B&amp;#34;}], [&amp;#34;instance&amp;#34;])
[{&amp;#34;instance&amp;#34;=&amp;#34;1.1.1.1&amp;#34;, &amp;#34;team&amp;#34;=&amp;#34;B&amp;#34;}]

// If multiple maps from the first argument match with multiple maps from the second argument, different combinations will be created.
&amp;gt; array.combine_maps([{&amp;#34;instance&amp;#34;=&amp;#34;1.1.1.1&amp;#34;, &amp;#34;team&amp;#34;=&amp;#34;A&amp;#34;}, {&amp;#34;instance&amp;#34;=&amp;#34;1.1.1.1&amp;#34;, &amp;#34;team&amp;#34;=&amp;#34;B&amp;#34;}], [{&amp;#34;instance&amp;#34;=&amp;#34;1.1.1.1&amp;#34;, &amp;#34;cluster&amp;#34;=&amp;#34;prod&amp;#34;}, {&amp;#34;instance&amp;#34;=&amp;#34;1.1.1.1&amp;#34;, &amp;#34;cluster&amp;#34;=&amp;#34;ops&amp;#34;}], [&amp;#34;instance&amp;#34;])
[{&amp;#34;instance&amp;#34;=&amp;#34;1.1.1.1&amp;#34;, &amp;#34;team&amp;#34;=&amp;#34;A&amp;#34;, &amp;#34;cluster&amp;#34;=&amp;#34;prod&amp;#34;}, {&amp;#34;instance&amp;#34;=&amp;#34;1.1.1.1&amp;#34;, &amp;#34;team&amp;#34;=&amp;#34;A&amp;#34;, &amp;#34;cluster&amp;#34;=&amp;#34;ops&amp;#34;}, {&amp;#34;instance&amp;#34;=&amp;#34;1.1.1.1&amp;#34;, &amp;#34;team&amp;#34;=&amp;#34;B&amp;#34;, &amp;#34;cluster&amp;#34;=&amp;#34;prod&amp;#34;}, {&amp;#34;instance&amp;#34;=&amp;#34;1.1.1.1&amp;#34;, &amp;#34;team&amp;#34;=&amp;#34;B&amp;#34;, &amp;#34;cluster&amp;#34;=&amp;#34;ops&amp;#34;}]&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Examples using discovery and exporter components:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Alloy&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-alloy&#34;&gt;&amp;gt; array.combine_maps(prometheus.exporter.postgres.example.targets, discovery.kubernetes.k8s_pods.targets, [&amp;#34;instance&amp;#34;], true)

&amp;gt; array.combine_maps(prometheus.exporter.redis.default.targets, [{&amp;#34;instance&amp;#34;=&amp;#34;1.1.1.1&amp;#34;, &amp;#34;testLabelKey&amp;#34; = &amp;#34;testLabelVal&amp;#34;}], [&amp;#34;instance&amp;#34;], true)&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;In the examples above the fourth argument is set to &lt;code&gt;true&lt;/code&gt; so that the original targets from the exporters will still be preserved and scraped
even if they cannot be enriched with values from the second argument.&lt;/p&gt;
&lt;p&gt;You can find more examples in the &lt;a href=&#34;https://github.com/grafana/alloy/blob/main/syntax/vm/vm_stdlib_test.go&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;tests&lt;/a&gt;.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;&lt;code&gt;array.combine_maps&lt;/code&gt; can be useful for enriching Prometheus service discovery targets prior to a Prometheus scrape.
It cannot be used to enrich Prometheus metrics with labels from service discovery components.
You can use the [prometheus.enrich][] component for this purpose.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;../components/prometheus/prometheus.enrich&#34;&gt;prometheus.enrich&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h2 id=&#34;arraygroup_by&#34;&gt;array.group_by&lt;/h2&gt;


&lt;div data-shared=&#34;stability/experimental_feature.md&#34;&gt;
            &lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;EXPERIMENTAL&lt;/strong&gt;: This is an &lt;a href=&#34;/docs/release-life-cycle/&#34;&gt;experimental&lt;/a&gt; feature.
Experimental features are subject to frequent breaking changes, and may be removed with no equivalent replacement.
To enable and use an experimental feature, you must set the &lt;code&gt;stability.level&lt;/code&gt; 
    &lt;a href=&#34;/docs/alloy/v1.15/reference/cli/run/&#34;&gt;flag&lt;/a&gt; to &lt;code&gt;experimental&lt;/code&gt;.&lt;/p&gt;&lt;/blockquote&gt;
&lt;/div&gt;

        
&lt;p&gt;The &lt;code&gt;array.group_by&lt;/code&gt; function groups an array of objects by a given key.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The first argument is an array of objects.&lt;/li&gt;
&lt;li&gt;The second argument is a string that is the key to group by. The value of the key must be a string and should be present at the top level of the object.&lt;/li&gt;
&lt;li&gt;The third argument is a boolean that indicates whether the elements that don&amp;rsquo;t match the key should be dropped (true) or added to the empty group (false).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;examples-2&#34;&gt;Examples&lt;/h3&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Alloy&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-alloy&#34;&gt;&amp;gt; array.group_by([{&amp;#34;type&amp;#34; = &amp;#34;fruit&amp;#34;, &amp;#34;name&amp;#34; = &amp;#34;apple&amp;#34;}, {&amp;#34;type&amp;#34; = &amp;#34;fruit&amp;#34;, &amp;#34;name&amp;#34; = &amp;#34;banana&amp;#34;}, {&amp;#34;type&amp;#34; = &amp;#34;vegetable&amp;#34;, &amp;#34;name&amp;#34; = &amp;#34;carrot&amp;#34;}, {&amp;#34;name&amp;#34; = &amp;#34;rock&amp;#34;}], &amp;#34;type&amp;#34;, false)
[{&amp;#34;type&amp;#34; = &amp;#34;fruit&amp;#34;, &amp;#34;items&amp;#34; = [{&amp;#34;type&amp;#34; = &amp;#34;fruit&amp;#34;, &amp;#34;name&amp;#34; = &amp;#34;apple&amp;#34;}, {&amp;#34;type&amp;#34; = &amp;#34;fruit&amp;#34;, &amp;#34;name&amp;#34; = &amp;#34;banana&amp;#34;}]}, {&amp;#34;type&amp;#34; = &amp;#34;vegetable&amp;#34;, &amp;#34;items&amp;#34; = [{&amp;#34;type&amp;#34; = &amp;#34;vegetable&amp;#34;, &amp;#34;name&amp;#34; = &amp;#34;carrot&amp;#34;}]}, {&amp;#34;type&amp;#34; = &amp;#34;&amp;#34;, &amp;#34;items&amp;#34; = [{&amp;#34;name&amp;#34; = &amp;#34;rock&amp;#34;}]}]

&amp;gt; array.group_by([{&amp;#34;type&amp;#34; = &amp;#34;fruit&amp;#34;, &amp;#34;name&amp;#34; = &amp;#34;apple&amp;#34;}, {&amp;#34;type&amp;#34; = &amp;#34;fruit&amp;#34;, &amp;#34;name&amp;#34; = &amp;#34;banana&amp;#34;}, {&amp;#34;type&amp;#34; = &amp;#34;vegetable&amp;#34;, &amp;#34;name&amp;#34; = &amp;#34;carrot&amp;#34;}, {&amp;#34;name&amp;#34; = &amp;#34;rock&amp;#34;}], &amp;#34;type&amp;#34;, true)
[{&amp;#34;type&amp;#34; = &amp;#34;fruit&amp;#34;, &amp;#34;items&amp;#34; = [{&amp;#34;type&amp;#34; = &amp;#34;fruit&amp;#34;, &amp;#34;name&amp;#34; = &amp;#34;apple&amp;#34;}, {&amp;#34;type&amp;#34; = &amp;#34;fruit&amp;#34;, &amp;#34;name&amp;#34; = &amp;#34;banana&amp;#34;}]}, {&amp;#34;type&amp;#34; = &amp;#34;vegetable&amp;#34;, &amp;#34;items&amp;#34; = [{&amp;#34;type&amp;#34; = &amp;#34;vegetable&amp;#34;, &amp;#34;name&amp;#34; = &amp;#34;carrot&amp;#34;}]}]&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The following example shows how to use the &lt;code&gt;array.group_by&lt;/code&gt; function with a &lt;code&gt;foreach&lt;/code&gt; block to group targets by match labels and create a &lt;code&gt;prometheus.scrape&lt;/code&gt; component for each group dynamically.
The targets in this example should have a label &amp;ldquo;match&amp;rdquo; that contains instant vector selectors separated by slash (refer to &lt;a href=&#34;https://prometheus.io/docs/prometheus/latest/federation/#configuring-federation&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Federation&lt;/a&gt; for more information on the match parameter).&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Alloy&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-alloy&#34;&gt;foreach &amp;#34;federation&amp;#34; {
 collection = array.group_by(discovery.file.example.targets, &amp;#34;match&amp;#34;, false)
 var = &amp;#34;each&amp;#34;
 id  = &amp;#34;match&amp;#34;

 template {
   prometheus.scrape &amp;#34;default&amp;#34; {
     targets    = each[&amp;#34;items&amp;#34;]
     honor_labels = true
     metrics_path = &amp;#34;/federate&amp;#34;
     params = {
       &amp;#34;match[]&amp;#34; = string.split(coalesce(each[&amp;#34;match&amp;#34;], &amp;#34;{__name__!=\&amp;#34;\&amp;#34;}&amp;#34;), &amp;#34;/&amp;#34;),
     }
     forward_to = [prometheus.remote_write.default.receiver]
   }
 }
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="array">array&lt;/h1>
&lt;p>The &lt;code>array&lt;/code> namespace contains functions related to arrays.&lt;/p>
&lt;h2 id="arrayconcat">array.concat&lt;/h2>
&lt;p>The &lt;code>array.concat&lt;/code> function concatenates one or more lists of values into a single list.
Each argument to &lt;code>array.concat&lt;/code> must be a list value.
Elements within the list can be any type.&lt;/p></description></item><item><title>coalesce</title><link>https://grafana.com/docs/alloy/v1.15/reference/stdlib/coalesce/</link><pubDate>Mon, 30 Mar 2026 15:47:22 +0000</pubDate><guid>https://grafana.com/docs/alloy/v1.15/reference/stdlib/coalesce/</guid><content><![CDATA[&lt;h1 id=&#34;coalesce&#34;&gt;coalesce&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;coalesce&lt;/code&gt; takes any number of arguments and returns the first one that isn&amp;rsquo;t null, an empty string, empty list, or an empty object.
It&amp;rsquo;s useful for obtaining a default value, such as if an environment variable isn&amp;rsquo;t defined.
If no argument is non-empty or non-zero, the last argument is returned.&lt;/p&gt;
&lt;h2 id=&#34;examples&#34;&gt;Examples&lt;/h2&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Alloy&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-alloy&#34;&gt;&amp;gt; coalesce(&amp;#34;a&amp;#34;, &amp;#34;b&amp;#34;)
a
&amp;gt; coalesce(&amp;#34;&amp;#34;, &amp;#34;b&amp;#34;)
b
&amp;gt; coalesce(sys.env(&amp;#34;DOES_NOT_EXIST&amp;#34;), &amp;#34;c&amp;#34;)
c&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="coalesce">coalesce&lt;/h1>
&lt;p>&lt;code>coalesce&lt;/code> takes any number of arguments and returns the first one that isn&amp;rsquo;t null, an empty string, empty list, or an empty object.
It&amp;rsquo;s useful for obtaining a default value, such as if an environment variable isn&amp;rsquo;t defined.
If no argument is non-empty or non-zero, the last argument is returned.&lt;/p></description></item><item><title>constants</title><link>https://grafana.com/docs/alloy/v1.15/reference/stdlib/constants/</link><pubDate>Mon, 30 Mar 2026 15:47:22 +0000</pubDate><guid>https://grafana.com/docs/alloy/v1.15/reference/stdlib/constants/</guid><content><![CDATA[&lt;h1 id=&#34;constants&#34;&gt;constants&lt;/h1&gt;
&lt;p&gt;The &lt;code&gt;constants&lt;/code&gt; object exposes a list of constant values about the system Alloy is running on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;constants.hostname&lt;/code&gt;: The hostname of the machine Alloy is running   on.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;constants.os&lt;/code&gt;: The operating system Alloy is running on.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;constants.arch&lt;/code&gt;: The architecture of the system Alloy is running on.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;constants.version&lt;/code&gt; : The version of the Alloy instance if the binary was built with the version information, otherwise it&amp;rsquo;s an empty string.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;examples&#34;&gt;Examples&lt;/h2&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Alloy&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-alloy&#34;&gt;&amp;gt; constants.hostname
&amp;#34;my-hostname&amp;#34;

&amp;gt; constants.os
&amp;#34;linux&amp;#34;

&amp;gt; constants.arch
&amp;#34;amd64&amp;#34;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="constants">constants&lt;/h1>
&lt;p>The &lt;code>constants&lt;/code> object exposes a list of constant values about the system Alloy is running on:&lt;/p>
&lt;ul>
&lt;li>&lt;code>constants.hostname&lt;/code>: The hostname of the machine Alloy is running on.&lt;/li>
&lt;li>&lt;code>constants.os&lt;/code>: The operating system Alloy is running on.&lt;/li>
&lt;li>&lt;code>constants.arch&lt;/code>: The architecture of the system Alloy is running on.&lt;/li>
&lt;li>&lt;code>constants.version&lt;/code> : The version of the Alloy instance if the binary was built with the version information, otherwise it&amp;rsquo;s an empty string.&lt;/li>
&lt;/ul>
&lt;h2 id="examples">Examples&lt;/h2>
&lt;div class="code-snippet ">&lt;div class="lang-toolbar">
&lt;span class="lang-toolbar__item lang-toolbar__item-active">Alloy&lt;/span>
&lt;span class="code-clipboard">
&lt;button x-data="app_code_snippet()" x-init="init()" @click="copy()">
&lt;img class="code-clipboard__icon" src="/media/images/icons/icon-copy-small-2.svg" alt="Copy code to clipboard" width="14" height="13">
&lt;span>Copy&lt;/span>
&lt;/button>
&lt;/span>
&lt;div class="lang-toolbar__border">&lt;/div>
&lt;/div>&lt;div class="code-snippet ">
&lt;pre data-expanded="false">&lt;code class="language-alloy">&amp;gt; constants.hostname
&amp;#34;my-hostname&amp;#34;
&amp;gt; constants.os
&amp;#34;linux&amp;#34;
&amp;gt; constants.arch
&amp;#34;amd64&amp;#34;&lt;/code>&lt;/pre>
&lt;/div>
&lt;/div></description></item><item><title>convert</title><link>https://grafana.com/docs/alloy/v1.15/reference/stdlib/convert/</link><pubDate>Mon, 30 Mar 2026 15:47:22 +0000</pubDate><guid>https://grafana.com/docs/alloy/v1.15/reference/stdlib/convert/</guid><content><![CDATA[&lt;h1 id=&#34;convert&#34;&gt;convert&lt;/h1&gt;
&lt;p&gt;The &lt;code&gt;convert&lt;/code&gt; namespace contains conversion functions.&lt;/p&gt;
&lt;h2 id=&#34;nonsensitive&#34;&gt;nonsensitive&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;convert.nonsensitive&lt;/code&gt; converts a &lt;a href=&#34;../../../get-started/configuration-syntax/expressions/types_and_values/#secrets&#34;&gt;secret&lt;/a&gt; value back into a string.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-warning&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Warning&lt;/p&gt;&lt;p&gt;Only use &lt;code&gt;convert.nonsensitive&lt;/code&gt; when you are positive that the value converted back to a string isn&amp;rsquo;t a sensitive value.&lt;/p&gt;
&lt;p&gt;Strings resulting from calls to &lt;code&gt;convert.nonsensitive&lt;/code&gt; are displayed in plain text in the UI and internal API calls.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h3 id=&#34;examples&#34;&gt;Examples&lt;/h3&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Alloy&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-alloy&#34;&gt;// Assuming `sensitive_value` is a secret:

&amp;gt; sensitive_value
(secret)
&amp;gt; convert.nonsensitive(sensitive_value)
&amp;#34;Hello, world!&amp;#34;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="convert">convert&lt;/h1>
&lt;p>The &lt;code>convert&lt;/code> namespace contains conversion functions.&lt;/p>
&lt;h2 id="nonsensitive">nonsensitive&lt;/h2>
&lt;p>&lt;code>convert.nonsensitive&lt;/code> converts a &lt;a href="../../../get-started/configuration-syntax/expressions/types_and_values/#secrets">secret&lt;/a> value back into a string.&lt;/p>
&lt;div class="admonition admonition-warning">&lt;blockquote>&lt;p class="title text-uppercase">Warning&lt;/p>&lt;p>Only use &lt;code>convert.nonsensitive&lt;/code> when you are positive that the value converted back to a string isn&amp;rsquo;t a sensitive value.&lt;/p></description></item><item><title>encoding</title><link>https://grafana.com/docs/alloy/v1.15/reference/stdlib/encoding/</link><pubDate>Mon, 30 Mar 2026 15:47:22 +0000</pubDate><guid>https://grafana.com/docs/alloy/v1.15/reference/stdlib/encoding/</guid><content><![CDATA[&lt;h1 id=&#34;encoding&#34;&gt;encoding&lt;/h1&gt;
&lt;p&gt;The &lt;code&gt;encoding&lt;/code&gt; namespace contains encoding and decoding functions.&lt;/p&gt;
&lt;h2 id=&#34;encodingfrom_base64&#34;&gt;encoding.from_base64&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;encoding.from_base64&lt;/code&gt; function decodes a RFC4648-compliant Base64-encoded string into the original string.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;encoding.from_base64&lt;/code&gt; fails if the provided string argument contains invalid Base64 data.&lt;/p&gt;
&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;text&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-text&#34;&gt;&amp;gt; encoding.from_base64(&amp;#34;dGFuZ2VyaW5l&amp;#34;)
tangerine&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;encodingfrom_urlbase64&#34;&gt;encoding.from_URLbase64&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;encoding.from_URLbase64&lt;/code&gt; function decodes a RFC4648-compliant Base64 URL safe encoded string into the original string.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;encoding.from_URLbase64&lt;/code&gt; fails if the provided string argument contains invalid Base64 data.&lt;/p&gt;
&lt;h3 id=&#34;example-1&#34;&gt;Example&lt;/h3&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;&amp;gt; encoding.from_URLbase64(&amp;#34;c3RyaW5nMTIzIT8kKiYoKSctPUB-&amp;#34;)
string123!?$*&amp;amp;()&amp;#39;-=@~&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;encodingto_base64&#34;&gt;encoding.to_base64&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;encoding.to_base64&lt;/code&gt; function encodes the original string into RFC4648-compliant Base64 encoded string.&lt;/p&gt;
&lt;h3 id=&#34;example-2&#34;&gt;Example&lt;/h3&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;&amp;gt; encoding.to_base64(&amp;#34;string123!?$*&amp;amp;()&amp;#39;-=@~&amp;#34;)
c3RyaW5nMTIzIT8kKiYoKSctPUB&amp;#43;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;encodingto_urlbase64&#34;&gt;encoding.to_URLbase64&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;encoding.to_base64&lt;/code&gt; function encodes the original string into RFC4648-compliant URL safe Base64 encoded string.&lt;/p&gt;
&lt;h3 id=&#34;example-3&#34;&gt;Example&lt;/h3&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;&amp;gt; encoding.to_URLbase64(&amp;#34;string123!?$*&amp;amp;()&amp;#39;-=@~&amp;#34;)
c3RyaW5nMTIzIT8kKiYoKSctPUB-&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;encodingurl_encode&#34;&gt;encoding.url_encode&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;encoding.url_encode&lt;/code&gt; function encodes the original string into a RFC3986 &amp;ldquo;percent encoding&amp;rdquo; compliant string.&lt;/p&gt;
&lt;h3 id=&#34;example-4&#34;&gt;Example&lt;/h3&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;&amp;gt; encoding.url_encode(&amp;#34;string123!?$*&amp;amp;()&amp;#39;-=@~&amp;#34;)
string123%21%3F%24%2A%26%28%29%27-%3D%40~&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;encodingurl_decode&#34;&gt;encoding.url_decode&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;encoding.url_decode&lt;/code&gt; function decodes a RFC3986 &amp;ldquo;percent encoding&amp;rdquo; compliant string.
&lt;code&gt;encoding.url_decode&lt;/code&gt; fails if input string is not RFC3986 &amp;ldquo;percent encoding&amp;rdquo; compliant.&lt;/p&gt;
&lt;h3 id=&#34;example-5&#34;&gt;Example&lt;/h3&gt;

&lt;div class=&#34;code-snippet code-snippet__mini&#34;&gt;&lt;div class=&#34;lang-toolbar__mini&#34;&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet code-snippet__border&#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-none&#34;&gt;&amp;gt; encoding.url_decode(&amp;#34;string123%21%3F%24%2A%26%28%29%27-%3D%40~&amp;#34;)
string123!?$*&amp;amp;()&amp;#39;-=@~&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;encodingto_json&#34;&gt;encoding.to_json&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;encoding.to_json&lt;/code&gt; function encodes the map into a JSON string.
&lt;code&gt;encoding.to_json&lt;/code&gt; fails if the input argument provided can&amp;rsquo;t be parsed as a JSON string.&lt;/p&gt;
&lt;p&gt;A common use case for &lt;code&gt;encoding.to_json&lt;/code&gt; is to encode a configuration of component which is expected to be a JSON string.
For example, &lt;code&gt;config&lt;/code&gt; argument of &lt;a href=&#34;../../components/prometheus/prometheus.exporter.blackbox&#34;&gt;&lt;code&gt;prometheus.exporter.blackbox&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;examples&#34;&gt;Examples&lt;/h3&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Alloy&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-alloy&#34;&gt;&amp;gt; encoding.to_json({&amp;#34;modules&amp;#34;={&amp;#34;http_2xx&amp;#34;={&amp;#34;prober&amp;#34;=&amp;#34;http&amp;#34;,&amp;#34;timeout&amp;#34;=&amp;#34;5s&amp;#34;,&amp;#34;http&amp;#34;={&amp;#34;headers&amp;#34;={&amp;#34;Authorization&amp;#34;=sys.env(&amp;#34;TEST_VAR&amp;#34;)}}}}})
&amp;#34;{\&amp;#34;modules\&amp;#34;:{\&amp;#34;http_2xx\&amp;#34;:{\&amp;#34;http\&amp;#34;:{\&amp;#34;headers\&amp;#34;:{\&amp;#34;Authorization\&amp;#34;:\&amp;#34;Hello!\&amp;#34;}},\&amp;#34;prober\&amp;#34;:\&amp;#34;http\&amp;#34;,\&amp;#34;timeout\&amp;#34;:\&amp;#34;5s\&amp;#34;}}}&amp;#34;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;encodingfrom_json&#34;&gt;encoding.from_json&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;encoding.from_json&lt;/code&gt; function decodes a string representing JSON into an Alloy value.
&lt;code&gt;encoding.from_json&lt;/code&gt; fails if the string argument provided can&amp;rsquo;t be parsed as JSON.&lt;/p&gt;
&lt;p&gt;A common use case of &lt;code&gt;encoding.from_json&lt;/code&gt; is to decode the output of a &lt;a href=&#34;../../components/local/local.file/&#34;&gt;&lt;code&gt;local.file&lt;/code&gt;&lt;/a&gt; component to an Alloy value.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Remember to escape double quotes when passing JSON string literals to &lt;code&gt;encoding.from_json&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;For example, the JSON value &lt;code&gt;{&amp;quot;key&amp;quot;: &amp;quot;value&amp;quot;}&lt;/code&gt; is properly represented by the string &lt;code&gt;&amp;quot;{\&amp;quot;key\&amp;quot;: \&amp;quot;value\&amp;quot;}&amp;quot;&lt;/code&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h3 id=&#34;examples-1&#34;&gt;Examples&lt;/h3&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Alloy&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-alloy&#34;&gt;&amp;gt; encoding.from_json(&amp;#34;15&amp;#34;)
15

&amp;gt; encoding.from_json(&amp;#34;[1, 2, 3]&amp;#34;)
[1, 2, 3]

&amp;gt; encoding.from_json(&amp;#34;null&amp;#34;)
null

&amp;gt; encoding.from_json(&amp;#34;{\&amp;#34;key\&amp;#34;: \&amp;#34;value\&amp;#34;}&amp;#34;)
{
  key = &amp;#34;value&amp;#34;,
}

&amp;gt; encoding.from_json(local.file.some_file.content)
&amp;#34;Hello, world!&amp;#34;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;encodingfrom_yaml&#34;&gt;encoding.from_yaml&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;encoding.from_yaml&lt;/code&gt; function decodes a string representing YAML into an Alloy value.
&lt;code&gt;encoding.from_yaml&lt;/code&gt; fails if the string argument provided can&amp;rsquo;t be parsed as YAML.&lt;/p&gt;
&lt;p&gt;A common use case of &lt;code&gt;encoding.from_yaml&lt;/code&gt; is to decode the output of a &lt;a href=&#34;../../components/local/local.file/&#34;&gt;&lt;code&gt;local.file&lt;/code&gt;&lt;/a&gt; component to an Alloy value.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Remember to escape double quotes when passing YAML string literals to &lt;code&gt;encoding.from_yaml&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;For example, the YAML value &lt;code&gt;key: &amp;quot;value&amp;quot;&lt;/code&gt; is properly represented by the string &lt;code&gt;&amp;quot;key: \&amp;quot;value\&amp;quot;&amp;quot;&lt;/code&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h3 id=&#34;examples-2&#34;&gt;Examples&lt;/h3&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Alloy&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-alloy&#34;&gt;&amp;gt; encoding.from_yaml(&amp;#34;15&amp;#34;)
15
&amp;gt; encoding.from_yaml(&amp;#34;[1, 2, 3]&amp;#34;)
[1, 2, 3]
&amp;gt; encoding.from_yaml(&amp;#34;null&amp;#34;)
null
&amp;gt; encoding.from_yaml(&amp;#34;key: value&amp;#34;)
{
  key = &amp;#34;value&amp;#34;,
}
&amp;gt; encoding.from_yaml(local.file.some_file.content)
&amp;#34;Hello, world!&amp;#34;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="encoding">encoding&lt;/h1>
&lt;p>The &lt;code>encoding&lt;/code> namespace contains encoding and decoding functions.&lt;/p>
&lt;h2 id="encodingfrom_base64">encoding.from_base64&lt;/h2>
&lt;p>The &lt;code>encoding.from_base64&lt;/code> function decodes a RFC4648-compliant Base64-encoded string into the original string.&lt;/p>
&lt;p>&lt;code>encoding.from_base64&lt;/code> fails if the provided string argument contains invalid Base64 data.&lt;/p></description></item><item><title>file</title><link>https://grafana.com/docs/alloy/v1.15/reference/stdlib/file/</link><pubDate>Mon, 30 Mar 2026 15:47:22 +0000</pubDate><guid>https://grafana.com/docs/alloy/v1.15/reference/stdlib/file/</guid><content><![CDATA[&lt;h1 id=&#34;file&#34;&gt;file&lt;/h1&gt;
&lt;p&gt;The &lt;code&gt;file&lt;/code&gt; namespace contains functions related to files.&lt;/p&gt;
&lt;h2 id=&#34;filepath_join&#34;&gt;file.path_join&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;file.path_join&lt;/code&gt; function joins any number of path elements into a single path, separating them with an OS-specific separator.&lt;/p&gt;
&lt;h3 id=&#34;examples&#34;&gt;Examples&lt;/h3&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Alloy&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-alloy&#34;&gt;&amp;gt; file.path_join()
&amp;#34;&amp;#34;

&amp;gt; file.path_join(&amp;#34;this/is&amp;#34;, &amp;#34;a/path&amp;#34;)
&amp;#34;this/is/a/path&amp;#34;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="file">file&lt;/h1>
&lt;p>The &lt;code>file&lt;/code> namespace contains functions related to files.&lt;/p>
&lt;h2 id="filepath_join">file.path_join&lt;/h2>
&lt;p>The &lt;code>file.path_join&lt;/code> function joins any number of path elements into a single path, separating them with an OS-specific separator.&lt;/p></description></item><item><title>json_path</title><link>https://grafana.com/docs/alloy/v1.15/reference/stdlib/json_path/</link><pubDate>Mon, 30 Mar 2026 15:47:22 +0000</pubDate><guid>https://grafana.com/docs/alloy/v1.15/reference/stdlib/json_path/</guid><content><![CDATA[&lt;h1 id=&#34;json_path&#34;&gt;json_path&lt;/h1&gt;
&lt;p&gt;The &lt;code&gt;json_path&lt;/code&gt; function lookup values using &lt;a href=&#34;https://goessner.net/articles/JsonPath/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&lt;code&gt;jsonpath&lt;/code&gt;&lt;/a&gt; syntax.&lt;/p&gt;
&lt;p&gt;The function expects two strings. The first string is the JSON string used look up values. The second string is the JSONPath expression.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;json_path&lt;/code&gt; always returns a list of values. If the JSONPath expression doesn&amp;rsquo;t match any values, an empty list is returned.&lt;/p&gt;
&lt;p&gt;A common use case of &lt;code&gt;json_path&lt;/code&gt; is to decode and filter the output of a &lt;a href=&#34;../../components/local/local.file/&#34;&gt;&lt;code&gt;local.file&lt;/code&gt;&lt;/a&gt; or &lt;a href=&#34;../../components/remote/remote.http/&#34;&gt;&lt;code&gt;remote.http&lt;/code&gt;&lt;/a&gt; component to an Alloy syntax value.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Remember to escape double quotes when passing JSON string literals to &lt;code&gt;json_path&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;For example, the JSON value &lt;code&gt;{&amp;quot;key&amp;quot;: &amp;quot;value&amp;quot;}&lt;/code&gt; is properly represented by the string &lt;code&gt;&amp;quot;{\&amp;quot;key\&amp;quot;: \&amp;quot;value\&amp;quot;}&amp;quot;&lt;/code&gt;.&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;examples&#34;&gt;Examples&lt;/h2&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Alloy&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-alloy&#34;&gt;&amp;gt; json_path(&amp;#34;{\&amp;#34;key\&amp;#34;: \&amp;#34;value\&amp;#34;}&amp;#34;, &amp;#34;.key&amp;#34;)
[&amp;#34;value&amp;#34;]


&amp;gt; json_path(&amp;#34;[{\&amp;#34;name\&amp;#34;: \&amp;#34;Department\&amp;#34;,\&amp;#34;value\&amp;#34;: \&amp;#34;IT\&amp;#34;},{\&amp;#34;name\&amp;#34;:\&amp;#34;TestStatus\&amp;#34;,\&amp;#34;value\&amp;#34;:\&amp;#34;Pending\&amp;#34;}]&amp;#34;, &amp;#34;[?(@.name == \&amp;#34;Department\&amp;#34;)].value&amp;#34;)
[&amp;#34;IT&amp;#34;]

&amp;gt; json_path(&amp;#34;{\&amp;#34;key\&amp;#34;: \&amp;#34;value\&amp;#34;}&amp;#34;, &amp;#34;.nonexists&amp;#34;)
[]

&amp;gt; json_path(&amp;#34;{\&amp;#34;key\&amp;#34;: \&amp;#34;value\&amp;#34;}&amp;#34;, &amp;#34;.key&amp;#34;)[0]
value&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="json_path">json_path&lt;/h1>
&lt;p>The &lt;code>json_path&lt;/code> function lookup values using &lt;a href="https://goessner.net/articles/JsonPath/" target="_blank" rel="noopener noreferrer">&lt;code>jsonpath&lt;/code>&lt;/a> syntax.&lt;/p>
&lt;p>The function expects two strings. The first string is the JSON string used look up values. The second string is the JSONPath expression.&lt;/p></description></item><item><title>string</title><link>https://grafana.com/docs/alloy/v1.15/reference/stdlib/string/</link><pubDate>Mon, 30 Mar 2026 15:47:22 +0000</pubDate><guid>https://grafana.com/docs/alloy/v1.15/reference/stdlib/string/</guid><content><![CDATA[&lt;h1 id=&#34;string&#34;&gt;string&lt;/h1&gt;
&lt;p&gt;The &lt;code&gt;string&lt;/code&gt; namespace contains functions related to strings.&lt;/p&gt;
&lt;h2 id=&#34;stringformat&#34;&gt;string.format&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;string.format&lt;/code&gt; function produces a string by formatting a number of other values according to a specification string.
It&amp;rsquo;s similar to the &lt;code&gt;printf&lt;/code&gt; function in C, and other similar functions in other programming languages.&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Alloy&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-alloy&#34;&gt;string.format(spec, values...)&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;examples&#34;&gt;Examples&lt;/h3&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Alloy&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-alloy&#34;&gt;&amp;gt; string.format(&amp;#34;Hello, %s!&amp;#34;, &amp;#34;Ander&amp;#34;)
&amp;#34;Hello, Ander!&amp;#34;
&amp;gt; string.format(&amp;#34;There are %d lights&amp;#34;, 4)
&amp;#34;There are 4 lights&amp;#34;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The &lt;code&gt;string.format&lt;/code&gt; function is most useful when you use more complex format specifications.&lt;/p&gt;
&lt;h3 id=&#34;specification-syntax&#34;&gt;Specification Syntax&lt;/h3&gt;
&lt;p&gt;The specification is a string that includes formatting verbs that are introduced with the &lt;code&gt;%&lt;/code&gt; character.
The function call must then have one additional argument for each verb sequence in the specification.
The verbs are matched with consecutive arguments and formatted as directed, as long as each given argument is convertible to the type required by the format verb.&lt;/p&gt;
&lt;p&gt;By default, &lt;code&gt;%&lt;/code&gt; sequences consume successive arguments starting with the first.
Introducing a &lt;code&gt;[n]&lt;/code&gt; sequence immediately before the verb letter, where &lt;code&gt;n&lt;/code&gt; is a decimal integer, explicitly chooses a particular value argument by its one-based index.
Subsequent calls without an explicit index will then proceed with &lt;code&gt;n&lt;/code&gt;&#43;1, &lt;code&gt;n&lt;/code&gt;&#43;2, etc.&lt;/p&gt;
&lt;p&gt;The function produces an error if the format string requests an impossible conversion or accesses more arguments than are given.
An error is also produced for an unsupported format verb.&lt;/p&gt;
&lt;h4 id=&#34;verbs&#34;&gt;Verbs&lt;/h4&gt;
&lt;p&gt;The specification may contain the following verbs.&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Verb&lt;/th&gt;
              &lt;th&gt;Result&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;%%&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Literal percent sign, consuming no value.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;%t&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Convert to boolean and produce &lt;code&gt;true&lt;/code&gt; or &lt;code&gt;false&lt;/code&gt;.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;%b&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Convert to integer number and produce binary representation.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;%d&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Convert to integer and produce decimal representation.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;%o&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Convert to integer and produce octal representation.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;%x&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Convert to integer and produce hexadecimal representation with lowercase letters.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;%X&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Like &lt;code&gt;%x&lt;/code&gt;, but use uppercase letters.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;%e&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Convert to number and produce scientific notation, like &lt;code&gt;-1.234456e&#43;78&lt;/code&gt;.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;%E&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Like &lt;code&gt;%e&lt;/code&gt;, but use an uppercase &lt;code&gt;E&lt;/code&gt; to introduce the exponent.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;%f&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Convert to number and produce decimal fraction notation with no exponent, like &lt;code&gt;123.456&lt;/code&gt;.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;%g&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Like &lt;code&gt;%e&lt;/code&gt; for large exponents or like &lt;code&gt;%f&lt;/code&gt; otherwise.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;%G&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Like &lt;code&gt;%E&lt;/code&gt; for large exponents or like &lt;code&gt;%f&lt;/code&gt; otherwise.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;%s&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Convert to string and insert the string&amp;rsquo;s characters.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;&lt;code&gt;%q&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Convert to string and produce a JSON quoted string representation.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;When using the &lt;code&gt;string.format&lt;/code&gt; function with a &lt;a href=&#34;../../../get-started/configuration-syntax/expressions/types_and_values/#secrets&#34;&gt;&lt;code&gt;secret&lt;/code&gt;&lt;/a&gt; value, you must first convert it to a non-sensitive string using the &lt;a href=&#34;../convert/#nonsensitive&#34;&gt;&lt;code&gt;convert.nonsensitive&lt;/code&gt;&lt;/a&gt; function.
If the resulting value must be a &lt;a href=&#34;../../../get-started/configuration-syntax/expressions/types_and_values/#secrets&#34;&gt;&lt;code&gt;secret&lt;/code&gt;&lt;/a&gt;, you can use string concatenation with the &lt;code&gt;&#43;&lt;/code&gt; operator instead of the &lt;code&gt;string.format&lt;/code&gt; function.&lt;/p&gt;
&lt;h2 id=&#34;stringjoin&#34;&gt;string.join&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;string.join&lt;/code&gt; all items in an array into a string, using a character as separator.&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Alloy&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-alloy&#34;&gt;string.join(list, separator)&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;examples-1&#34;&gt;Examples&lt;/h3&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Alloy&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-alloy&#34;&gt;&amp;gt; string.join([&amp;#34;foo&amp;#34;, &amp;#34;bar&amp;#34;, &amp;#34;baz&amp;#34;], &amp;#34;-&amp;#34;)
&amp;#34;foo-bar-baz&amp;#34;
&amp;gt; string.join([&amp;#34;foo&amp;#34;, &amp;#34;bar&amp;#34;, &amp;#34;baz&amp;#34;], &amp;#34;, &amp;#34;)
&amp;#34;foo, bar, baz&amp;#34;
&amp;gt; string.join([&amp;#34;foo&amp;#34;], &amp;#34;, &amp;#34;)
&amp;#34;foo&amp;#34;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;stringreplace&#34;&gt;string.replace&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;string.replace&lt;/code&gt; searches a string for a substring, and replaces each occurrence of the substring with a replacement string.&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Alloy&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-alloy&#34;&gt;string.replace(string, substring, replacement)&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;examples-2&#34;&gt;Examples&lt;/h3&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Alloy&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-alloy&#34;&gt;&amp;gt; string.replace(&amp;#34;1 &amp;#43; 2 &amp;#43; 3&amp;#34;, &amp;#34;&amp;#43;&amp;#34;, &amp;#34;-&amp;#34;)
&amp;#34;1 - 2 - 3&amp;#34;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;stringsplit&#34;&gt;string.split&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;string.split&lt;/code&gt; produces a list by dividing a string at all occurrences of a separator.&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Alloy&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-alloy&#34;&gt;split(list, separator)&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;examples-3&#34;&gt;Examples&lt;/h3&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Alloy&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-alloy&#34;&gt;&amp;gt; string.split(&amp;#34;foo,bar,baz&amp;#34;, &amp;#34;,&amp;#34; )
[&amp;#34;foo&amp;#34;, &amp;#34;bar&amp;#34;, &amp;#34;baz&amp;#34;]

&amp;gt; string.split(&amp;#34;foo&amp;#34;, &amp;#34;,&amp;#34;)
[&amp;#34;foo&amp;#34;]

&amp;gt; string.split(&amp;#34;&amp;#34;, &amp;#34;,&amp;#34;)
[&amp;#34;&amp;#34;]&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;stringto_lower&#34;&gt;string.to_lower&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;string.to_lower&lt;/code&gt; converts all uppercase letters in a string to lowercase.&lt;/p&gt;
&lt;h3 id=&#34;examples-4&#34;&gt;Examples&lt;/h3&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Alloy&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-alloy&#34;&gt;&amp;gt; string.to_lower(&amp;#34;HELLO&amp;#34;)
&amp;#34;hello&amp;#34;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;stringto_upper&#34;&gt;string.to_upper&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;string.to_upper&lt;/code&gt; converts all lowercase letters in a string to uppercase.&lt;/p&gt;
&lt;h3 id=&#34;examples-5&#34;&gt;Examples&lt;/h3&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Alloy&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-alloy&#34;&gt;&amp;gt; string.to_upper(&amp;#34;hello&amp;#34;)
&amp;#34;HELLO&amp;#34;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;stringtrim&#34;&gt;string.trim&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;string.trim&lt;/code&gt; removes the specified set of characters from the start and end of a string.&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Alloy&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-alloy&#34;&gt;string.trim(string, str_character_set)&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;examples-6&#34;&gt;Examples&lt;/h3&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Alloy&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-alloy&#34;&gt;&amp;gt; string.trim(&amp;#34;?!hello?!&amp;#34;, &amp;#34;!?&amp;#34;)
&amp;#34;hello&amp;#34;

&amp;gt; string.trim(&amp;#34;foobar&amp;#34;, &amp;#34;far&amp;#34;)
&amp;#34;oob&amp;#34;

&amp;gt; string.trim(&amp;#34;   hello! world.!  &amp;#34;, &amp;#34;! &amp;#34;)
&amp;#34;hello! world.&amp;#34;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;stringtrim_prefix&#34;&gt;string.trim_prefix&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;string.trim_prefix&lt;/code&gt; removes the prefix from the start of a string.
If the string doesn&amp;rsquo;t start with the prefix, the string is returned unchanged.&lt;/p&gt;
&lt;h3 id=&#34;examples-7&#34;&gt;Examples&lt;/h3&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Alloy&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-alloy&#34;&gt;&amp;gt; string.trim_prefix(&amp;#34;helloworld&amp;#34;, &amp;#34;hello&amp;#34;)
&amp;#34;world&amp;#34;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;stringtrim_suffix&#34;&gt;string.trim_suffix&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;string.trim_suffix&lt;/code&gt; removes the suffix from the end of a string.&lt;/p&gt;
&lt;h3 id=&#34;examples-8&#34;&gt;Examples&lt;/h3&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Alloy&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-alloy&#34;&gt;&amp;gt; string.trim_suffix(&amp;#34;helloworld&amp;#34;, &amp;#34;world&amp;#34;)
&amp;#34;hello&amp;#34;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;stringtrim_space&#34;&gt;string.trim_space&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;string.trim_space&lt;/code&gt; removes any whitespace characters from the start and end of a string.&lt;/p&gt;
&lt;h3 id=&#34;examples-9&#34;&gt;Examples&lt;/h3&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Alloy&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-alloy&#34;&gt;&amp;gt; string.trim_space(&amp;#34;  hello\n\n&amp;#34;)
&amp;#34;hello&amp;#34;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="string">string&lt;/h1>
&lt;p>The &lt;code>string&lt;/code> namespace contains functions related to strings.&lt;/p>
&lt;h2 id="stringformat">string.format&lt;/h2>
&lt;p>The &lt;code>string.format&lt;/code> function produces a string by formatting a number of other values according to a specification string.
It&amp;rsquo;s similar to the &lt;code>printf&lt;/code> function in C, and other similar functions in other programming languages.&lt;/p></description></item><item><title>sys</title><link>https://grafana.com/docs/alloy/v1.15/reference/stdlib/sys/</link><pubDate>Mon, 30 Mar 2026 15:47:22 +0000</pubDate><guid>https://grafana.com/docs/alloy/v1.15/reference/stdlib/sys/</guid><content><![CDATA[&lt;h1 id=&#34;sys&#34;&gt;sys&lt;/h1&gt;
&lt;p&gt;The &lt;code&gt;sys&lt;/code&gt; namespace contains functions related to the system.&lt;/p&gt;
&lt;h2 id=&#34;sysenv&#34;&gt;sys.env&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;sys.env&lt;/code&gt; function gets the value of an environment variable from the system Alloy is running on.
If the environment variable doesn&amp;rsquo;t exist, &lt;code&gt;sys.env&lt;/code&gt; returns an empty string.&lt;/p&gt;
&lt;h3 id=&#34;examples&#34;&gt;Examples&lt;/h3&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Alloy&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-alloy&#34;&gt;&amp;gt; sys.env(&amp;#34;HOME&amp;#34;)
&amp;#34;/home/alloy&amp;#34;

&amp;gt; sys.env(&amp;#34;DOES_NOT_EXIST&amp;#34;)
&amp;#34;&amp;#34;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="sys">sys&lt;/h1>
&lt;p>The &lt;code>sys&lt;/code> namespace contains functions related to the system.&lt;/p>
&lt;h2 id="sysenv">sys.env&lt;/h2>
&lt;p>The &lt;code>sys.env&lt;/code> function gets the value of an environment variable from the system Alloy is running on.
If the environment variable doesn&amp;rsquo;t exist, &lt;code>sys.env&lt;/code> returns an empty string.&lt;/p></description></item></channel></rss>