Your first Velocity app in 60 seconds
Install the CLI, scaffold a project, and hit localhost. The shortest path from zero to a running Velocity application.
This is the shortest tutorial we'll publish. Four commands, about a minute, and you'll be looking at a working Velocity app in your browser.
Prerequisites
You need:
- Go 1.26+ —
go versionshould printgo1.26or newer. - Homebrew — for installing the
velocityCLI on macOS or Linux. (Other platforms can build from source; see the installer repo.) - Bun (recommended) or Node + npm — for the JS side. The installer picks up whichever it finds.
No Docker, no external services to start. The project-local ./vel binary handles the dev server, migrations, and code generation once the project exists.
1. Install the installer
brew install --cask velocitykode/tap/velocityVerify it landed:
velocity --versionYou should see the installed version string. The velocity CLI is project-bootstrap-only; once a project exists, you'll use the project-local ./vel binary for everything else.
2. Scaffold a new project
velocity new acmeacme is the placeholder name we use throughout these tutorials — pick whatever fits your project.
The installer asks three quick questions:

- Project type —
Full stack (Inertia + Vite)for the React + Tailwind setup this tutorial uses. - Database —
sqlitefor the easiest local default. Postgres and MySQL are available and swap in via env var later. - Enable Inertia server-side rendering? —
Nfor development. Flip toYlater if you need it.
Use ← / → to toggle, enter to confirm.
Once you've answered, the installer clones the template, configures the Go module, initializes git, installs dependencies, builds the project-local ./vel binary, runs the initial migrations, and prints the next two commands you need:

The whole thing takes well under a minute on a warm machine.
3. Start the dev server
cd acme
./vel serveThis boots the Go backend with hot-module-reload, runs Vite for the frontend in parallel, and prints something like:
[velocity] listening on http://localhost:4000
[vite] dev server ready in 230ms
4. Open the app
Navigate to http://localhost:4000.
You'll land on the login page. Register an account, log in, and you're on the dashboard. Every primitive Velocity ships — auth, ORM, queues, cache, mail, storage, broadcasting, scheduling — is wired and ready to use.
Find your way around
Here is what velocity new acme produced. The directories you'll touch most are at the top.
acme/
├── main.go # Bootstrap chain: Providers, Middleware, Routes, Run
├── go.mod
├── .env # Local config (DB driver, secrets, etc.)
│
├── routes/
│ └── web.go # Web routes (the first file you edit)
│
├── internal/
│ ├── app/ # App-level wiring (kernel, middleware stacks, events)
│ ├── handlers/ # HTTP handlers (auth, dashboard, home, health)
│ ├── middleware/ # Custom middleware
│ ├── models/ # ORM models (the starter ships User)
│ └── commands/ # Custom ./vel commands
│
├── config/ # Typed config: app.go, auth.go, crypto.go, view.go
│
├── database/
│ ├── migrations/ # Go migration files
│ ├── factories/ # Model factories for tests and seeds
│ └── database.sqlite # The local DB after first migration
│
├── resources/
│ ├── js/ # React + TypeScript (app.tsx, pages/, components/, layouts/)
│ ├── css/ # Tailwind entrypoint
│ └── views/ # Server-rendered HTML shell for Inertia
│
├── public/ # Static assets served at the URL root
├── storage/ # File storage default (uploads, logs)
└── vite.config.ts # Frontend build config
The shortest possible walk-through:
main.go. The bootstrap chain. Anything you wire (providers, middleware, routes, commands, events) flows through it.routes/web.go. Where you'll spend most of the first hour. Add a route, point it at a handler ininternal/handlers/.internal/handlers/. HTTP handlers. The starter has auth (login, register, logout), dashboard, home, and health.internal/models/. Your ORM models. Starts withUser. New models go here, scaffolded by./vel make:model.database/migrations/. Schema. Go files, not SQL strings or YAML. New migrations come from./vel make:migrationor./vel make:model -m.resources/js/. The React frontend.pages/maps 1:1 to the Inertia responses your handlers return:c.Inertia("Posts/Index", props)rendersresources/js/pages/Posts/Index.tsx.config/. Typed Go config files. Reads from.envat startup, exposes typed values to the rest of the app.
That is the loop. routes/web.go declares the URL. internal/handlers/ runs the logic. internal/models/ talks to the database. resources/js/pages/ renders the response.
What's next
- Add a model.
./vel make:model Post -mscaffolds a model and migration in one shot. - Add a handler.
./vel make:handler PostsHandlergives you a handler wired to the router. - Read the docs. vel.build/docs covers the full API surface.
That's it. Four commands, one running app. Velocity gets out of your way after that.