> ## Documentation Index
> Fetch the complete documentation index at: https://rasa.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Licensing

> License Rasa in your local environment.

export const DeveloperLicenseForm = ({buttonLabel = "Get it here", spaced = false}) => {
  const endpoint = "https://api.hsforms.com/submissions/v3/integration/submit/6711345/23b054de-86aa-433a-801f-fcf1a13bc9e2";
  const getPageContext = () => {
    if (typeof window === "undefined") {
      return {};
    }
    return {
      pageName: document.title,
      pageUri: `${window.location.origin}${window.location.pathname}`
    };
  };
  const [email, setEmail] = useState("");
  const [consentGiven, setConsentGiven] = useState(false);
  const [status, setStatus] = useState("idle");
  const [website, setWebsite] = useState("");
  const isSubmitting = status === "submitting";
  const resetStatus = () => {
    if (status !== "idle") {
      setStatus("idle");
    }
  };
  const handleSubmit = async event => {
    event.preventDefault();
    if (website) {
      return;
    }
    const normalizedEmail = email.trim();
    if (!normalizedEmail || isSubmitting) {
      return;
    }
    setStatus("submitting");
    try {
      const response = await fetch(endpoint, {
        method: "POST",
        credentials: "omit",
        headers: {
          "Content-Type": "application/json"
        },
        body: JSON.stringify({
          fields: [{
            name: "email",
            value: normalizedEmail
          }, {
            name: "consent_to_eula_check_box",
            value: String(consentGiven)
          }],
          context: getPageContext()
        })
      });
      if (!response.ok) {
        throw new Error("HubSpot form submission failed");
      }
      setEmail("");
      setConsentGiven(false);
      setStatus("success");
    } catch {
      setStatus("error");
    }
  };
  return <form className={`not-prose rasa-license-form ${spaced ? "rasa-license-form--spaced" : ""}`} onSubmit={handleSubmit}>
      <label className="rasa-license-form__honeypot" aria-hidden="true">
        <span>Leave this field empty</span>
        <input name="website" tabIndex="-1" aria-hidden="true" autoComplete="off" value={website} onChange={event => setWebsite(event.target.value)} />
      </label>
      <input className="rasa-license-form__email" type="email" name="email" required maxLength={254} autoComplete="email" placeholder="you@company.com" aria-label="Work email" value={email} onChange={event => {
    setEmail(event.target.value);
    resetStatus();
  }} />
      <button type="submit" className="rasa-license-form__submit" disabled={isSubmitting}>
        {isSubmitting ? "Submitting…" : buttonLabel}
      </button>
      <label className="rasa-license-form__consent">
        <input type="checkbox" name="consent_to_eula_check_box" required checked={consentGiven} onChange={event => {
    setConsentGiven(event.target.checked);
    resetStatus();
  }} />
        <span>
          I agree to the{" "}
          <a href="https://rasa.com/developer-terms" target="_blank" rel="noopener noreferrer">
            Rasa Developer Edition terms
          </a>
          {"."}
        </span>
      </label>
      {status === "success" && <output className="rasa-license-form__status rasa-license-form__status--success">
          Thanks! Check your inbox for your developer license.
        </output>}
      {status === "error" && <p className="rasa-license-form__status rasa-license-form__status--error" role="alert">
          We couldn’t submit your request. Please try again.
        </p>}
    </form>;
};

Rasa offers Enterprise licenses for teams building assistants at scale, with advanced features like enterprise-grade security, scalability, and dedicated support. But if you're just getting started, you can get a free Developer Edition License to try it out.

<Card title="Developer Edition" icon="key">
  Start building CALM assistants with the free Rasa Developer Edition.

  <DeveloperLicenseForm />
</Card>

## How Licensing Works

Rasa will look for your license in the env var `RASA_LICENSE`, which must
contain the content of the license key file provided by rasa.

You can set the `RASA_LICENSE` env var temporarily in your terminal, but it is recommended
to set it persistently so that you don't have to set it every time you run
Rasa.

<Tabs>
  <Tab title="Bash">
    ```bash theme={null}
    ## Temporary
    export RASA_LICENSE=YOUR_LICENSE_STRING_HERE

    ## Persistent
    echo "export RASA_LICENSE=YOUR_LICENSE_STRING_HERE" >> ~/.bashrc
    ## If you're using a different flavor of bash e.g. Zsh, replace .bashrc with your shell's initialization script e.g. ~/.zshrc
    ```
  </Tab>

  <Tab title="Windows Powershell">
    ```powershell theme={null}
    ## Temporary
    $env: RASA_LICENSE=YOUR_LICENSE_STRING_HERE

    ## Persistent for the current user
    [System.Environment]::SetEnvironmentVariable('RASA_LICENSE','YOUR_LICENSE_STRING_HERE','USER')
    ```
  </Tab>
</Tabs>

Then you can use the [`rasa` CLI](/docs/reference/api/command-line-interface) as usual, for example:

```bash theme={null}
rasa init
```

## Requesting a Developer License from the CLI

If you run a licensed command without a valid `RASA_LICENSE` value, the CLI now prompts you for an email address instead of exiting immediately. Licensed commands include `rasa train`, `rasa run`, `rasa inspect`, `rasa license`, and `rasa --version`. The CLI sends the email to Rasa to request a Developer Edition license.

```text theme={null}
Enter your email address to request a Rasa developer license.
By entering your email address, you accept Rasa's developer terms: https://rasa.com/developer-terms
> you@example.com
Your license request was submitted. Check your email for the license key,
then set it in `RASA_LICENSE` and rerun your command.
```

Submitting your email address:

* Sends the address to Rasa's license request form and opts you in to the [Rasa Developer Terms](https://rasa.com/developer-terms) and the marketing communications attached to the form.
* Does not run the command you invoked. After you receive the key, set `RASA_LICENSE` and rerun the command.

The CLI only shows the prompt in an interactive terminal. `rasa --help`, `rasa -h`, and subcommand help (for example `rasa train --help`) do not require a license and skip the check entirely.

### Skipping the prompt in CI

In a non-interactive shell (for example a CI job or a container without a TTY), the CLI does not prompt and instead exits with the original license error. You can also opt out explicitly with the `--no-prompt` flag on commands that support it:

```bash theme={null}
rasa train --no-prompt
```

Use `--no-prompt` in automated pipelines to fail fast when `RASA_LICENSE` is missing rather than block on user input.


## Related topics

- [Using Docker](/docs/pro/installation/docker.md)
- [Command Line Interface](/docs/reference/api/command-line-interface.md)
- [Get Started with Rasa](/docs/pro/installation/overview.md)
