# Experimental features<no value>
// <!-- Required for asciidoctor -->
:toc:
// Set toclevels to be at least your hugo [markup.tableOfContents.endLevel] config key
:toclevels: 4

== Description

`--experimental` is a single global flag that gates several unrelated features. It is available on
every subcommand, and it announces itself:

[source,text]
----
Experimental Mode Enabled
----

[WARNING]
====
Experimental features can change or disappear without going through the deprecation cycle described on
the link:/docs/help/deprecations/["Deprecations" page]. A pipeline that depends on one may need
adjusting on any release, not only on a major one.
====

== What it enables

=== CUE manifests

Without the flag, a `.cue` manifest is refused outright:

[source,text]
----
cuelang support is experimental, please use '--experimental' flag to enable it
----

The flag also adds `updatecli.cue` to the filenames Updatecli looks for when no manifest is named on
the command line. Ordinarily that search covers only `updatecli.yaml` and then the `updatecli.d`
directory, so a `updatecli.cue` sitting in the working directory is not picked up unless the flag is
set.

=== Reporting to Udash

link:https://github.com/updatecli/udash[Udash] collects pipeline results for viewing over time.

Without the flag, publishing is skipped **silently**, no warning, no error, and the run reports
success. Configuring `UPDATECLI_UDASH_*` or running `updatecli udash login` is not enough on its own.
With the flag, results are published under a section headed `Udash - Experimental`.

`--disable-udash-report` switches it off again without dropping the rest of the flag.

=== WebAssembly autodiscovery plugins

A crawler whose name ends in `.wasm` is loaded as an external WebAssembly plugin. Without the flag it
is skipped with a warning naming the crawler:

[source,text]
----
Skipping autodiscovery plugin "example.wasm" because experimental features are disabled
----

The rest of the autodiscovery run continues normally, so this is easy to miss in a long log. The
built-in crawlers described on the link:/docs/core/autodiscovery/["Autodiscovery" page] are unaffected
and need no flag.

== Using it

[source,shell]
----
updatecli pipeline diff --experimental
updatecli compose diff --experimental
----

This website's own CI runs `updatecli compose diff --experimental` on every pull request, so the flag
is safe to adopt for regular use, the caveat is about stability of the features themselves, not about
the flag being dangerous.

TIP: Nothing already working changes when you add the flag. Enabling it never *disables* a stable
feature, so adding it to a CI job that does not use any of the above is a no-op.

== Go Further

* link:/docs/help/deprecations/[Deprecations] - the stability promise that experimental features are exempt from.
* link:/docs/help/environment/[Environment variables] - including the Udash variables.
* link:/docs/core/autodiscovery/[Autodiscovery] - the built-in crawlers.
* link:/docs/commands/[Commands] - the full flag reference.
