Command Line Tools
Quick Start
You’ll ship a running Wheels app with one CRUD resource — a blog post with a title and body — wired through model, controller, views, migration, tests, and routes.
This page assumes wheels --version already works. If it doesn’t, run through Installation first.
1. Create the app
Section titled “1. Create the app”From wherever you keep projects:
wheels new myblog --no-open-browserwheels new scaffolds a fresh project directory named myblog with SQLite pre-wired as the zero-config datasource. The --no-open-browser flag skips the “pop open http://localhost:8080 once the server is ready” behavior — useful when you want to drive things manually.
2. Start the server
Section titled “2. Start the server”cd myblogwheels startThe dev server binds to port 8080 by default and runs in the background — the command returns once the server is up, leaving your terminal free. Stop it later with wheels stop. On first boot the wrapper resolves dependencies and compiles the application; subsequent starts are quick.
Override the port with --port=3000 if 8080 is busy.
3. Generate a scaffold
Section titled “3. Generate a scaffold”Back in the same terminal (the server is already running in the background), generate the resource:
wheels generate scaffold Post title:string body:textThis generates the full CRUD stack — a Post model, Posts controller with seven actions, index/show/new/edit views, a CreatePosts migration with title (string) and body (text) columns, a test spec, and a resource route. Attribute syntax is name:type — types map to the Wheels migration column types (string, text, integer, boolean, decimal, datetime, date, time).
4. Run the migration
Section titled “4. Run the migration”wheels migrate latestThis applies every pending migration — here, the CreatePosts migration the scaffold just wrote. Other subcommands: wheels migrate up (run the next migration), wheels migrate down (roll back one), wheels migrate info (show current state).
5. View the result
Section titled “5. View the result”Open http://localhost:8080/posts in your browser. You should see the Posts index view — empty at first. Click “New Post”, create a record, and the full CRUD flow — list, show, edit, delete — is live against the SQLite database.
If you changed the port in step 2, substitute that port instead.
6. Run the scaffold’s tests
Section titled “6. Run the scaffold’s tests”With the server still running in the background:
wheels test postsThe trailing positional is a directory scope, not a filename match — posts expands to tests.specs.posts. The scaffold generated PostSpec.cfc under tests/specs/models/ and PostsControllerSpec.cfc under tests/specs/controllers/, so on a fresh scaffold the posts scope matches neither directory and the run reports 0 passed. Use wheels test models or wheels test controllers to scope to the generated specs — though note that plain wheels test also reports 0 passed here, because the generated specs are empty describe stubs until you write expectations into them. A run with failing or erroring specs exits non-zero; a run with no failures exits 0.
7. What’s next
Section titled “7. What’s next”Common next steps
Section titled “Common next steps”Authentication
Section titled “Authentication”The scaffold gives you CRUD, not a login flow. See Authentication Patterns for cookbook-style recipes — session-based, token-based, and third-party OAuth — that drop onto the scaffold you just generated.
Configuration
Section titled “Configuration”To swap SQLite for a real database, tune the reload password, or wire per-environment settings, see Configuration and the Database guide. The datasource name defaults to the app name (myblog) and lives in config/settings.cfm.
Deployment
Section titled “Deployment”The deployment story — Kamal-based single-command deploys to any VPS — lands in a later docs phase. For now: the app is a standard CFML application that runs on Lucee 6/7, Adobe ColdFusion 2018+, or BoxLang, so any host that speaks those runtimes will serve it. Concrete deployment guides are coming.