Skip to main content
HomeReferenceFeature stages

Feature stages

On this page

Some Coder features are released in feature stages before they are generally available.

If you encounter an issue with any Coder feature, please submit a GitHub issue or join the Coder Discord.

Feature stages

Feature stageStableProduction-readySupportDescription
Early AccessNoNoGitHub issuesFor staging only. Not feature-complete or stable. Disabled by default.
BetaNoNot fullyDocs, Discord, GitHubPublicly available. In active development with minor bugs. Suitable for staging; optional for production. Not covered by SLA.
GAYesYesLicense-basedStable and tested. Enabled by default. Fully documented. Support based on license.

Early access features

  • Stable: No
  • Production-ready: No
  • Support: GitHub issues

Early access features are neither feature-complete nor stable. We do not recommend using early access features in production deployments.

Coder sometimes releases early access features that are available for use, but are disabled by default. You shouldn't use early access features in production because they might cause performance or stability issues. Early access features can be mostly feature-complete, but require further internal testing and remain in the early access stage for at least one month.

Coder may make significant changes or revert features to a feature flag at any time.

If you plan to activate an early access feature, we suggest that you use a staging deployment.

To enable early access features:

Use the Coder CLI --experiments flag to enable early access features:

  • Enable all early access features:

    coder server --experiments=*
  • Enable multiple early access features:

    coder server --experiments=feature1,feature2

You can also use the CODER_EXPERIMENTS environment variable.

You can opt-out of a feature after you've enabled it.

Target experiments at runtime

Some early access features accept runtime rules. A rule turns the experiment on or off for every user, or targets it to some users, without a restart. Only user-scoped experiments accept rules. Other experiments, such as no_nats_pubsub or workspace-capable-licensing, read only the startup --experiments list and need a restart to change.

Note

The rules API and the hidden coder exp experiment-rules command are experimental. They can change or be removed without notice. There is no UI editor yet.

You need the Owner role to change a rule. The Auditor role can list rules.

Run coder exp experiment-rules list to show each user-scoped experiment, its startup default, and its rule. The list also shows stored rules that target other experiments as ignored, because they have no effect.

Rule modes

Each user-scoped experiment has at most one rule:

RuleEffectCommand
No rule, or inheritUses the startup --experiments defaultcoder exp experiment-rules reset <experiment>
onOn for every usercoder exp experiment-rules on <experiment>
offOff for every user, even if the experiment is enabled at startupcoder exp experiment-rules off <experiment>
conditionOn for users whose CEL condition is true, off otherwisecoder exp experiment-rules set <experiment> <condition>

For example, to turn on an experiment for users in one group, widen it to every member of the coder organization, and then turn it off for everyone:

coder exp experiment-rules set mcp-tool-search '"coder/beta-testers" in user.groups' coder exp experiment-rules set mcp-tool-search '"coder/Everyone" in user.groups' coder exp experiment-rules off mcp-tool-search

Reset doesn't turn an experiment off. It restores the startup default, which can enable the experiment for every user. The command prints a warning when that happens. To turn an experiment off for everyone, use off.

Each change increases the rule's revision. Changing commands accept --expected-revision and fail when the stored rule has a different revision. Without the flag, the command reads the current revision and writes against it, which protects only against a change made between that read and the write. The command never retries a conflict: it prints the current rule and exits with an error.

If you use audit logs, each change creates an entry with the experiment_rule resource type. The entry records who changed the rule, when, and the old and new condition. Audit lines in the server log carry the same diff.

Condition variables

A condition is a CEL expression that returns a boolean. It can read one variable, user, with these fields:

FieldTypeValue
user.idstringThe user's ID
user.usernamestringThe user's username
user.emailstringThe user's email address, compared case-sensitively
user.roleslist(string)The user's explicit site roles, such as owner. The implied member role and organization roles are not included.
user.organizationslist(string)Names of the organizations the user belongs to
user.groupslist(string)Groups the user belongs to, as <organization>/<group>, including <organization>/Everyone

A condition can be at most 4,096 characters long, and each evaluation has a CEL cost limit of 10,000. Coder rejects a condition that fails to compile and returns the error to the person who wrote it. Log lines about a failed condition record only the experiment, the rule revision, the error category, and the line and column, never the condition text.

When a change takes effect

On supporting replicas, a fresh authoritative database read after the update commits observes the new rule. In-flight evaluations and work already using an earlier decision are not cancelled. All serving replicas must run a supporting version before you rely on this control.

Replicas that run an earlier version ignore rules and use their startup --experiments list. Every replica also falls back to its own startup list for experiments without a rule or with inherit, so give all replicas the same --experiments value.

The dashboard fetches the enabled experiments again when a page loads, when the browser window regains focus, and when the connection is restored, if its copy is more than 60 seconds old. It doesn't refresh on a timer, so a tab that stays focused can show an out-of-date view. The server applies the current rule to each request regardless of what the dashboard shows.

Failure behavior

If Coder can't read the rules, a stored rule is malformed, or a condition fails to compile or evaluate, the experiment is off for that decision, even if it is enabled at startup. You can't change this behavior.

Rules gate features; they are not an authorization boundary. Don't use a rule to restrict access to data or actions.

Beta

Beta features are open to the public and are tagged with a Beta label.

They’re in active development and subject to minor changes. They might contain minor bugs, but are generally ready for use.

Beta features are often ready for general availability within two-three releases. You should test beta features in staging environments. You can use beta features in production, but should set expectations and inform users that some features may be incomplete.

We keep documentation about beta features up-to-date with the latest information, including planned features, limitations, and workarounds. If you encounter an issue, please contact your Coder account team, reach out on Discord, or create a GitHub issues if there isn't one already. While we will do our best to provide support with beta features, most issues will be escalated to the product team. Beta features are not covered within service-level agreements (SLA).

Most beta features are enabled by default. Beta features are announced through the Coder Changelog, and more information is available in the documentation.

General Availability (GA)

All features that are not explicitly tagged as Early access or Beta are considered generally available (GA). They have been tested, are stable, and are enabled by default.

If your Coder license includes an SLA, please consult it for an outline of specific expectations.

For support, consult our knowledgeable and growing community on Discord, or create a GitHub issue if one doesn't exist already. Customers with a valid Coder license, can submit a support request or contact your account team.

We intend Coder documentation to be the single source of truth and all features should have some form of complete documentation that outlines how to use or implement a feature. If you discover an error or if you have a suggestion that could improve the documentation, please submit a GitHub issue.

Some GA features can be disabled for air-gapped deployments. Consult the feature's documentation or submit a support ticket for assistance.