# Multi-Engine Support

You can specify the CFML engine via the command line arguments:

```bash
CommandBox> start cfengine=adobe@2023
```

This will start an Adobe ColdFusion 2023 server in your webroot. That's it!

By default, CommandBox uses the `cfengine` slug to search for the engine on ForgeBox. The format is `slug@version` where the version is optional. Ortus Solutions maintains the versions of the engines available on ForgeBox.

Supported engines are:

* Adobe ColdFusion 9 \*\*
* Adobe ColdFusion 10
* Adobe ColdFusion 11
* Adobe ColdFusion 2016
* Adobe ColdFusion 2018
* Adobe ColdFusion 2021
* Adobe ColdFusion 2023
* Adobe ColdFusion 2025
* Lucee 5
* Lucee 6
* Lucee 7 (beta)
* Railo 4.2
* Lucee 4.5
* BoxLang 1.x

For more information on how to view all available engine versions (including an available "lucee light" engine), see [Server Versions](https://commandbox.ortusbooks.com/embedded-server/server-versions).

Here are some examples:

```bash
# Start the default engine
CommandBox> start

# Start a specific Adobe engine and version
CommandBox> start cfengine=adobe@2021.0.6

# Start the most recent Adobe server that starts with version "2023"
CommandBox> start cfengine=adobe@2023

# Start the most recent adobe engine that matches the range
CommandBox> start cfengine="adobe@>9.0 <=11"

# Start the latest stable Lucee engine
CommandBox> start cfengine=lucee

# Start a specific Lucee beta engine 
CommandBox> start cfengine=lucee@7.0.0-BETA+211

# Start a specific Lucee snapshot engine 
CommandBox> start cfengine=lucee@7.0.0-SNAPSHOT+230

# Start a specific Lucee engine and version
CommandBox> start cfengine=lucee@5.4

# Start the latest stable Railo engine
CommandBox> start cfengine=railo

```

Engines are downloaded and stored in your CommandBox artifacts folder. You can view your engines and clear them using the standard artifacts commands:

```bash
CommandBox> artifacts list

# Removes all adobe servers currently in the artifacts
# These servers will need to be re-downloaded the next time they are started
CommandBox> artifacts remove adobe
```

> \*\* **Note**: [Adobe ColdFusion 9 does not support the latest Java 8](http://blogs.coldfusion.com/post.cfm/which-jdk-is-supported-with-coldfusion-9-10-and-11). To run ColdFusion 9 you must use an older version of CommandBox 3.x on Java 7 or run CommandBox 4.x on Java 8 update 92 or earlier. Several people are doing this, but beware your mileage may vary.

## Admin password

ColdFusion requires a username and password when CommandBox sets it up. When using the (default) `development` CommandBox profile, the default username and password for the Adobe ColdFusion servers used are:

* Username: `admin`
* Password: `commandbox`

Since Lucee 5.3.4.46, Lucee no longer prompts you to set the admin password the first time running the admin. When using the (default) `development` CommandBox profile, Lucee offers the option for you creating a password.txt file to set that initial password.

See also options to [control the admin password via CFConfig](https://github.com/ortus-docs/commandbox-docs/blob/6.2.0/using-the-cli/commandbox-server-interceptors/server-start/README.md#set-individual-settings).

## WAR Support

Additionally, CommandBox can start any WAR given to it using the `WARPath` argument.

```bash
CommandBox> start WARPath=/var/www/myExplodedWAR
CommandBox> start WARPath=/var/www/myWAR.war
```

If you run a regular `start` command inside of a folder that has a `/WEB-INF/web.xml` file, CommandBox will treat that folder as a WAR.

## Custom Engines

The `cfengine` parameter can accept any valid CommandBox endpoint ID. That means it can be an HTTP URL, a Git repo, a local folder path to your company's network share, or a custom ForgeBox entry you've created. As long as that endpoint resolves to a package that contains these files, you're good:

1. `box.json`
2. `Engine.[zip|war]` (file name doesn't matter)

CommandBox will download the package, unzip it and use the WAR/zip file as the engine for your app.

Normally, the artifacts cache isn't used for non-ForgeBox packages, but CommandBox will only download the engine once per server and then assume the file hasn't changed. You will need to forget the server to trigger a new download.

Here's an example of starting up a web server using a direct download link to a package containing a WAR file:

```bash
CommandBox> start cfengine=http://downloads.ortussolutions.com/adobe/coldfusion/9.0.2/cf-engine-9.0.2.zip
```

## server.json Configuration

You can set the `cfengine` and other related configuration options in your `server.json` to use them every time you start your app.

```bash
CommandBox> server set app.cfengine=adobe
CommandBox> server set app.WARPath=/var/www/my-app
```

These commands would create the following `server.json`

```javascript
{
    "app":{
        "cfengine":"adobe",
        "WARPath":"/var/www/my-app"
    }
}
```

Just a reminder that starting a server with any command line arguments will save the arguments to your `server.json` by default.

```bash
CommandBox> start cfengine=adobe@2023
```

This command would add `adobe@2023` to your `server.json`. If this is not what you want, you can append `saveSettings=false` or even `--!saveSettings` when you start your server and CommandBox will not save the arguments you specify to your `server.json`.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://commandbox.ortusbooks.com/embedded-server/multi-engine-support.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
