Skip to content

Command Line Tools

Dev Server

Three commands cover the inner dev loop: wheels start brings a development server up, wheels stop takes it down, and wheels reload reinitializes the running application without restarting the JVM. You’ll compose these every day while iterating on a Wheels app.

You’ll use this for:

  • Running your Wheels app locally while you work on it.
  • Stopping the dev server cleanly when you’re done — or before switching branches.
  • Reinitializing framework state (routes, settings, DI bindings) after edits that require a full app reload without killing the JVM.

wheels start is the preferred way to run a Wheels app during development. It wraps LuCLI’s lower-level wheels server start with Wheels-specific bootstrap — forwarding any extra flags through to the underlying server command so things like --port and --version still work. wheels stop is a thin wrapper around wheels server stop for the project directory. wheels reload is Wheels-specific: it talks to the running app over HTTP rather than restarting anything.

Start a Wheels development server for the current project. Delegates to wheels server start under the hood and forwards extra flags to it.

"
wheels start [flags]

wheels start handles --port, --force, --engine and --dry-run itself. Every other flag is forwarded verbatim to wheels server start; the common ones are listed below. See wheels server start for the full list.

FlagDescription
-p, --port=<port>Port number for the server (e.g., 8080). wheels start writes the port, and a free shutdown port, into lucee.json, so later starts reuse it. -p <port> and -p=<port> are the same as --port.
--forceReplace a stopped server registration that belongs to another project with the same server name. It does not restart a running server.
--engine=<engine>The engine to run (default lucee). See wheels server start.
--dry-runShow the resolved configuration without starting the server. Nothing is written: a --port value is passed to the dry run instead of into lucee.json. Not supported with --engine=rustcfml.
FlagDescription
-n, --name=<name>Custom name for the server instance.
-v, --version=<version>Lucee version to use (e.g., 6.2.2.91).
-e, --env, --environment=<env>Apply the matching environments profile from lucee.json (e.g., dev, staging, prod). An explicit --env/--environment value wins.
-c, --config=<file>Configuration file to use (defaults to lucee.json).
--disable-open-browserDon’t open a browser after the server starts.
--sandboxStart a transient background server without writing lucee.json.
example
wheels start

Prints Starting Wheels server... in cyan and hands control off to wheels server start in the current project directory. The server runs in the background and the command returns once the server is up, leaving your terminal free.

If the port in lucee.json is already taken, wheels start stops before starting anything. It names the Wheels server that holds the port, when it’s one of yours, with the cd <its folder> && wheels stop to free it, and suggests a free port to pass as wheels start --port=<port>.

Stop the running Wheels development server for the current project.

"
wheels stop [--name=<name>] [--config=<file>] [--all]

With no flags, resolves the server instance from the project directory and asks LuCLI to stop it. Under the hood it runs wheels server stop scoped to the project root.

FlagDescription
--name=<name>Stop the named server instance. Use it when more than one server is registered to the project directory (wheels server list shows them). --name <name> also works.
--config=<file>Resolve the server name from a lucee*.json file (e.g. lucee-docker.json).
--allStop every running Lucee server on the machine.

Since 4.1.1 these flags are forwarded to wheels server stop; earlier releases ignored them.

illustrative — requires running server
wheels stop

Prints Stopping Wheels server... in cyan and delegates to wheels server stop. Run it from the project root to take down the background server that wheels start brought up.

Reinitialize the running Wheels application without restarting the JVM. Useful after edits to config/settings.cfm, config/routes.cfm, config/services.cfm, or any file that is only read during framework bootstrap.

"
wheels reload [--password=<pw>]

wheels reload finds the port of this project’s own running server (the one wheels start registered) and hits http://localhost:<port>/?reload=true&password=<password> with the reload password it finds in your project config (.env, then config/settings.cfm). Pass --password=<pw> to override the detected password. If this project’s server isn’t running, it prints Reload requires this project's own server (started with: wheels start). and exits with a non-zero status.

illustrative — requires running server
wheels reload

On success: Application reloaded successfully. in green. On a password mismatch the server serves the page normally instead of redirecting, and the command prints Reload was not triggered: the server served the page normally (HTTP 200) instead of answering with the reload redirect (302). The application was NOT reloaded — check the reload password. If the request itself fails it prints Failed to reload: <message>. Both exit with a non-zero status; when no password was found, it also hints at setting WHEELS_RELOAD_PASSWORD in .env or config/settings.cfm.

The three commands compose into a typical inner loop:

illustrative — dev loop example
# Bring the server up — it runs in the background and returns control
wheels start
# Iterate on your app
# For most CFML edits: just save the file and hit refresh.
# For config/routes/services changes, force a reload:
wheels reload
# When you're done for the day
wheels stop