<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: VelocityKode</title>
    <description>The latest articles on DEV Community by VelocityKode (@velocitykode).</description>
    <link>https://dev.to/velocitykode</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3901598%2Fb1d06ce6-ff88-4218-9b23-e0e8319bd839.png</url>
      <title>DEV Community: VelocityKode</title>
      <link>https://dev.to/velocitykode</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/velocitykode"/>
    <language>en</language>
    <item>
      <title>Your first Velocity app in 60 seconds</title>
      <dc:creator>VelocityKode</dc:creator>
      <pubDate>Tue, 28 Apr 2026 06:03:05 +0000</pubDate>
      <link>https://dev.to/velocitykode/your-first-velocity-app-in-60-seconds-5coe</link>
      <guid>https://dev.to/velocitykode/your-first-velocity-app-in-60-seconds-5coe</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Velocity is a full-stack web framework for Go. Pre-1.0 and shipping in public. &lt;a href="https://vel.build" rel="noopener noreferrer"&gt;vel.build&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;You need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Go 1.26+&lt;/strong&gt; — &lt;code&gt;go version&lt;/code&gt; should print &lt;code&gt;go1.26&lt;/code&gt; or newer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Homebrew&lt;/strong&gt; — for installing the &lt;code&gt;velocity&lt;/code&gt; CLI on macOS or Linux. (Other platforms can build from source; see the &lt;a href="https://github.com/velocitykode/velocity-installer" rel="noopener noreferrer"&gt;installer repo&lt;/a&gt;.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bun&lt;/strong&gt; (recommended) or &lt;strong&gt;Node + npm&lt;/strong&gt; — for the JS side. The installer picks up whichever it finds.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No Docker, no external services to start. The project-local &lt;code&gt;./vel&lt;/code&gt; binary handles the dev server, migrations, and code generation once the project exists.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Pro tip — install Bun.&lt;/strong&gt; Bun is meaningfully faster than npm for both dependency installs and Vite startup, and &lt;code&gt;velocity new&lt;/code&gt; will use it automatically when present. One-liner: &lt;code&gt;curl -fsSL https://bun.sh/install | bash&lt;/code&gt;. If you'd rather stick with npm, the tutorial works exactly the same.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  1. Install the installer
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--cask&lt;/span&gt; velocitykode/tap/velocity
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify it landed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;velocity &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see the installed version string. The &lt;code&gt;velocity&lt;/code&gt; CLI is project-bootstrap-only; once a project exists, you'll use the project-local &lt;code&gt;./vel&lt;/code&gt; binary for everything else.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Scaffold a new project
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;velocity new acme
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;acme&lt;/code&gt; is the placeholder name I use throughout these tutorials — pick whatever fits your project.&lt;/p&gt;

&lt;p&gt;The installer asks three quick questions:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu04c63pm9itmqauivmg8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu04c63pm9itmqauivmg8.png" alt="Install the CLI, scaffold a project, and hit localhost. The shortest path from zero to a running Velocity application." width="800" height="661"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Project type&lt;/strong&gt; — &lt;code&gt;Full stack (Inertia + Vite)&lt;/code&gt; for the React + Tailwind setup this tutorial uses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database&lt;/strong&gt; — &lt;code&gt;sqlite&lt;/code&gt; for the easiest local default. Postgres and MySQL are available and swap in via env var later.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enable Inertia server-side rendering?&lt;/strong&gt; — &lt;code&gt;N&lt;/code&gt; for development. Flip to &lt;code&gt;Y&lt;/code&gt; later if you need it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use ← / → to toggle, enter to confirm.&lt;/p&gt;

&lt;p&gt;Once you've answered, the installer clones the template, configures the Go module, initializes git, installs dependencies, builds the project-local &lt;code&gt;./vel&lt;/code&gt; binary, runs the initial migrations, and prints the next two commands you need:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feseauuvv8pf9t5mdrs0n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feseauuvv8pf9t5mdrs0n.png" alt="Install the CLI, scaffold a project, and hit localhost. The shortest path from zero to a running Velocity application." width="800" height="1161"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The whole thing takes well under a minute on a warm machine.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Start the dev server
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;acme
./vel serve
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This boots the Go backend with hot-module-reload, runs Vite for the frontend in parallel, and prints something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;[velocity] listening on http://localhost:4000
[vite]     dev server ready in 230ms
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Open the app
&lt;/h2&gt;

&lt;p&gt;Navigate to &lt;strong&gt;&lt;a href="http://localhost:4000" rel="noopener noreferrer"&gt;http://localhost:4000&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Find your way around
&lt;/h2&gt;

&lt;p&gt;Here is what &lt;code&gt;velocity new acme&lt;/code&gt; produced. The directories you'll touch most are at the top.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The shortest possible walk-through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;main.go&lt;/code&gt;&lt;/strong&gt;. The bootstrap chain. Anything you wire (providers, middleware, routes, commands, events) flows through it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;routes/web.go&lt;/code&gt;&lt;/strong&gt;. Where you'll spend most of the first hour. Add a route, point it at a handler in &lt;code&gt;internal/handlers/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;internal/handlers/&lt;/code&gt;&lt;/strong&gt;. HTTP handlers. The starter has auth (login, register, logout), dashboard, home, and health.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;internal/models/&lt;/code&gt;&lt;/strong&gt;. Your ORM models. Starts with &lt;code&gt;User&lt;/code&gt;. New models go here, scaffolded by &lt;code&gt;./vel make:model&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;database/migrations/&lt;/code&gt;&lt;/strong&gt;. Schema. Go files, not SQL strings or YAML. New migrations come from &lt;code&gt;./vel make:migration&lt;/code&gt; or &lt;code&gt;./vel make:model -m&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;resources/js/&lt;/code&gt;&lt;/strong&gt;. The React frontend. &lt;code&gt;pages/&lt;/code&gt; maps 1:1 to the Inertia responses your handlers return: &lt;code&gt;c.Inertia("Posts/Index", props)&lt;/code&gt; renders &lt;code&gt;resources/js/pages/Posts/Index.tsx&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;config/&lt;/code&gt;&lt;/strong&gt;. Typed Go config files. Reads from &lt;code&gt;.env&lt;/code&gt; at startup, exposes typed values to the rest of the app.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is the loop. &lt;code&gt;routes/web.go&lt;/code&gt; declares the URL. &lt;code&gt;internal/handlers/&lt;/code&gt; runs the logic. &lt;code&gt;internal/models/&lt;/code&gt; talks to the database. &lt;code&gt;resources/js/pages/&lt;/code&gt; renders the response.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Add a model.&lt;/strong&gt; &lt;code&gt;./vel make:model Post -m&lt;/code&gt; scaffolds a model and migration in one shot.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add a handler.&lt;/strong&gt; &lt;code&gt;./vel make:handler PostsHandler&lt;/code&gt; gives you a handler wired to the router.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Read the docs.&lt;/strong&gt; &lt;a href="https://vel.build/docs" rel="noopener noreferrer"&gt;vel.build/docs&lt;/a&gt; covers the full API surface.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's it. Four commands, one running app. Velocity gets out of your way after that.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://vel.build/blog/your-first-velocity-app" rel="noopener noreferrer"&gt;vel.build/blog/your-first-velocity-app&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>go</category>
      <category>webdev</category>
      <category>tutorial</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
