[●v0.93.0 - pre-1.0]

The full-stack framework for GO

routing, orm, auth, cache, queues, mail, storage, and more.
One unified framework API - learn once, use across every service.

>brew install --cask velocitykode/tap/velocity
velocity in 53 seconds
[ Features ]

Everything you need, nothing you don't

Velocity is packed with production-ready features designed to accelerate your Go development

[feature]

Batteries Included

30+ built-in services working together out of the box. No hunting for packages - just start building.

·Routing·ORM·Auth·Cache·Queue·Mail·WebSocket·Routing·ORM·Auth·Cache·Queue·Mail·WebSocket
·Storage·Scheduler·Events·Validation·Notifications·HTTP Client·Crypto·Logging·Storage·Scheduler·Events·Validation·Notifications·HTTP Client·Crypto·Logging
·Broadcasting·gRPC·Middleware·Migrations·Testing·CSRF·Views·Tracing·Broadcasting·gRPC·Middleware·Migrations·Testing·CSRF·Views·Tracing
[feature]

Broadcasting

Real-time channels with WebSocket driver and presence tracking. Push events instantly.

>ws://broadcast
●1.2k clients
·chat.room.1·presence.lobby·notifications
[feature]

HTTP & gRPC

Full HTTP server with gRPC support, gateway, interceptors, and health checking.

>HTTP:8080
GETPOSTPUTDELETE
>gRPC:9090
unarystream⇄
[ spotlight ]/architecture

Driver Swapping

Database, cache, queue, storage, and mail each ship pluggable drivers, configured by environment variables. Swap backends without touching application code.

→SQLitein dev,Postgresin prod.One env var.
✓ zero refactor✓ consistent interface✓ env-driven config
handler.gounchanged
db := ctx.DB()
cache := ctx.Cache()
queue := ctx.Queue()
storage := ctx.Storage()
mail := ctx.Mail()
.env.development
DATABASE_DRIVER=sqlite
CACHE_DRIVER=memory
QUEUE_DRIVER=memory
STORAGE_DRIVER=local
MAIL_DRIVER=local
.env.production
DATABASE_DRIVER=postgres
CACHE_DRIVER=redis
QUEUE_DRIVER=redis
STORAGE_DRIVER=s3
MAIL_DRIVER=postmark
[ spotlight ]/data layer

Builtin ORM

Generic models with a fluent query builder. Define your schema once and query it with full type safety across PostgreSQL, MySQL, and SQLite.

→Type-safequeries.Same code, three databases.
✓ generic models✓ fluent query builder✓ eager loading
models/post.gotype-safe
type Post struct {
orm.Model[Post]
Title string `orm:"column:title"`
UserID uint `orm:"column:user_id"`
User *User `orm:"relation:belongsTo"`
}
handler.gofluent
posts, _ := Post{}.
Where("user_id = ?", userID).
With("User").
Get()
[ spotlight ]/security

Secure by Default

Security headers, HTTPS redirect, CORS, CSRF, and rate limiting - all built in with safe defaults. Cross-origin requests are denied until you explicitly allow them.

→Default-denycross-origin.Hardened on day one.
✓ zero config✓ safe defaults✓ opt-in to relax
middleware stackauto-applied
▸HTTPS redirect80 → 443
▸CORSdeny by default
▸CSRFdouble-submit cookie
▸Rate limitper-IP throttle
▸Security headersHSTS · CSP · X-Frame · …
HTTP/2 200 · response headers
strict-transport-security: max-age=63072000; includeSubDomains
content-security-policy: default-src 'self'
x-content-type-options: nosniff
x-frame-options: DENY
referrer-policy: strict-origin-when-cross-origin
permissions-policy: camera=(), microphone=(), geolocation=()
[feature]

Authentication

Session and JWT schemes with access checks and policies. Protect routes with declarative middleware.

>Session and JWT schemes
>Access checks with policy delegation
>ORM-backed user store
>Per-route authorization
[feature]

Queues & Jobs

Define jobs as Go structs and dispatch them to memory, Redis, or database drivers - with retries, delayed dispatch, and failed job tracking built in.

>Jobs as simple Go structs
>Memory, Redis, Database drivers
>Retries and failed job tracking
>Delayed and inline dispatch
[feature]

Events & Scheduler

Dispatch events to queued listeners and run cron-like tasks on a schedule. Automate your application lifecycle.

>Event dispatching with listeners
>Queued event handling
>Cron-like task scheduling
>Daily, weekly, custom intervals
[ Standalone ]

Full stack. Or just the part you need.

Every subsystem is its own Go package. Take the whole framework with velocity.New(), or import one package into any Go program and use it on its own.

your programeverything wired
router
orm
auth
queue
mail
storage
events
scheduler

Built from .env and config/, handed to you as one app. Pick a package to take it alone.

importgithub.com/velocitykode/velocity+router
v, err := velocity.New() // reads .env and config/
v.Router.Get("/", func(c *router.Context) error {
return c.String(200, "hello")
})
v.Serve()
One module, one go get. Heavy drivers stay in leaf packages.
fits inlibrariesCLIsscriptstestsMCP servers
[ Starter Kits ]

One command. Full stack. Hot reload, both sides.

The stack and the DX that engineers actually want - auth and dashboard pre-wired.

[frontend]
  • React 19.tsxJSX + hooks
    Vue 3.vueSFC + composition
  • Inertia 3SSR optional, same Go controller either way
  • Vite + TypeScriptHMR out of the box
[backend]
  • Go binaryrebuilt on every save
  • vel servewatches your Go code
  • SQLite, Postgres, or MySQLpicked at scaffold time
Go
Go
TypeScript
TypeScript
Inertia 3
Inertia 3
Vite
Vite
[api]

Just the API. No frontend.

For services that only serve JSON. No Vite, no package.json - the binary is the whole deployable.

$ velocity new myapi --api
  • ✓JWT auth stateless, CSRF off
  • ✓JSON on every response
  • ✓/health and /api/health
  • ✓same layout minus the frontend
[ vel · code gen ]

One CLI. Local dev, at its happiest.

vel generates handlers, models, migrations, and jobs the way Velocity expects - then runs your dev server, queues, and migrations from the same place.

vel · cli15 commands · 5 categories
[ generators ]
$vel gen handler post→internal/handlers/post.go$vel gen model user→internal/models/user.go$vel gen migration posts→database/migrations/<ts>_posts.go$vel gen job send_email→internal/jobs/send_email.go
[ database ]
$vel migrate→run pending migrations$vel migrate rollback→revert the last batch$vel migrate fresh→drop all tables, re-run$vel migrate status→show migration state
[ background ]
$vel queue work→process queued jobs$vel schedule work→run scheduler ticks
[ server ]
$vel serve→dev server with hot reload$vel build→compile production binary
[ inspect ]
$vel routes→print registered routes$vel cache clear→flush cache stores$vel key generate→write APP_KEY to .env
[ Local Development ]

Save the file. Watch it land.

One vel serve runs Go and Vite and watches your source. Pick a change and watch what reacts - and what doesn't.

Go rebuilt and restarted on :4000 - refresh to see it. Vite never noticed.

nvim
1func Home(ctx *router.Context) error {
2 view.Render(ctx, "Home", view.Props{
3 "message": "Welcome to Velocity",
4 })
5 return nil
6}
NORMALhome.gogo
browser↻localhost:4000⌘R
velocity_Welcome to Velocityserver restarted - page is stale
vel servezsh
→Starting Vite (bun run dev)...
→Starting on port 4000 with hot reload...
go:4000pid 48213vite:5173up
// production

Production-ready features,
right out of the box

Everything you need to build, test, and deploy - no third-party packages required.

[01]

Testing

Built-in test helpers with in-memory services, type-safe model factories, fake dispatchers, and database helpers for setup and teardown.

[02]

Migrations

Fluent migration system with a table builder API, batch tracking, and rollback support. Driver-aware for PostgreSQL, MySQL, and SQLite.

[03]

Validation

Struct-based form requests and inline rules with database-aware checks. Validate once, trust everywhere.

[04]

Notifications

Multi-channel delivery to mail, database, broadcast, and Slack with one unified API. Send the same message everywhere your users are.

[05]

Encryption

AES-256-GCM with key rotation and HMAC signing helpers. Wrap secrets without rolling your own crypto.

[06]

Inertia Views

Server-driven frontends with the Inertia.js adapter and optional SSR. Build SPAs without splitting your stack into two.

[ Get Started ]

Ready to build something great?

Get started with Velocity in minutes.

>brew install --cask velocitykode/tap/velocity