Skip to content

Start Here

Your First 15 Minutes

Fifteen minutes. Zero explanations. You run commands, you see results, you know whether Wheels fits your brain. If it does, move on to the full tutorial — that’s where you’ll actually learn how things work.

You’ll learn:

  • Whether Wheels feels right for you
  • What a scaffolded Wheels app looks like
  • Where to go next

First, confirm the CLI is installed:

Terminal window
wheels --version

Then create a new app:

your shell
wheels new hello
cd hello

This creates a SQLite-backed Wheels app called hello and drops you into its directory. The scaffold takes a couple of seconds.

your shell
wheels start

You’ll see log lines ending with something like Server started successfully. Open http://localhost:8080 in your browser. A welcome page appears: “Welcome to hello. Your Wheels application is running.”

The dev server stays running in the background. Leave the terminal open.

  1. Open config/routes.cfm. You’ll see a mapper()...end() block wrapped in <cfscript>. Inside mapper(), add a line so the file looks like:

    mapper()
    .get(name="greet", pattern="/greet", to="main##greet")
    .wildcard()
    .root(to="main##index", method="get")
    .end();

    .get(...) declares: when a GET request hits /greet, run the greet action on the Main controller.

  2. Open app/controllers/Main.cfc and add a greet action:

    component extends="Controller" {
    function index() {
    }
    function greet() {
    }
    }

    Wheels renders the view at app/views/main/greet.cfm.

  3. Create app/views/main/greet.cfm:

    app/views/main/greet.cfm
    <h1>Hello from Wheels</h1>
    <p>This page didn't exist a minute ago.</p>
  4. Tell Wheels to pick up the changes:

    your shell
    wheels reload
your shell
curl -s http://localhost:8080/greet

You should see <h1>Hello from Wheels</h1> in the response.

Three pieces moved:

  • Routeroutes.cfm mapped a URL to a controller action. URL lookup is convention-driven; /greetmain##greet means “the greet function on the Main controller.”
  • ControllerMain.cfc’s greet action ran. It did nothing visible; it just existed, so Wheels proceeded to render the view.
  • Viewapp/views/main/greet.cfm rendered. The path is conventional: views/<controller>/<action>.cfm.

That’s it. Every request is a variant of the same three-beat dance: route, controller action, view. The full tutorial fills in models, migrations, forms, validations, and the rest.