Full-stack Go Apps.
The server-driven Go framework designed for AI Agents.
go install github.com/vango-go/vango/cmd/vango@v0.3.0vango create myapp &&
cd myapp &&
vango devServer-owned state
Reactive UI without hydration drift or client/server synchronization.
Thin client runtime
A compact JS runtime that captures events and applies binary patches.
Deploy-safe persistence
Generated state artifacts and warm/cold deploy visibility before release.
func Dashboard(p DashProps) vango.Component {return vango.Setup(p, func(s vango.SetupCtx[DashProps]) vango.RenderFn {stats := setup.Resource(&s, loadDashboard)return func() *vango.VNode {
One Language
Build the UI, server logic, and product workflows in Go without maintaining a separate frontend stack.
- Server-rendered HTML
- Reactive state on the session loop
- No client/server state synchronization layer
Launch shape
vango create my-app cd my-app vango dev
One Blessed Model
Stateful components use `vango.Setup`, render stays pure, and async work is isolated in Resources, Actions, or page Actions.
- Setup allocates state once
- RangeKeyed preserves list identity
- RouteForm pairs with a page Action
Launch shape
func Counter(p CounterProps) vango.Component {
return vango.Setup(p, func(s vango.SetupCtx[CounterProps]) vango.RenderFn {
count := setup.Signal(&s, 0)
return func() *vango.VNode { ... }
})
}Deploy-Safe State
Persistence is deliberate, schema-aware, and visible before you ship. Vango computes warm versus cold deploy impact instead of guessing.
- Generated routes, state artifacts, and bindings are committed
- Warm/cold deploys are explicit
- Sessions survive safe refactors
Launch shape
$ vango state plan Added persisted IDs: 1 Classification: WARM DEPLOY
Programming Model
One blessed way to build stateful UI.
Vango pushes you toward a narrow set of patterns on purpose: state is allocated in Setup, render stays pure, and blocking work moves into Resources, Actions, or page Actions.
- Use `vango.Setup` for every new stateful component.
- Keep all reactive writes on the session loop.
- Prefer `setup.Resource`, `setup.Action`, and `setup.RouteForm` over improvised flow control.
go
Canonical Vango patterns
1func Counter(p CounterProps) vango.Component {2 return vango.Setup(p, func(s vango.SetupCtx[CounterProps]) vango.RenderFn {3 count := setup.Signal(&s, p.Initial)45 return func() *vango.VNode {6 return Div(7 Button(OnClick(count.Dec), Text("-")),8 Span(Textf("%d", count.Get())),9 Button(OnClick(count.Inc), Text("+")),10 )11 }12 })13}
go
Persistence and release workflow
1var ThemeKey = vango.NewSessionKey[ThemePrefs](2 "theme",3 vango.Default(ThemePrefs{Mode: "system"}),4)56cartItems := setup.SharedSignal(&s, []CartItem{})7announcement := setup.GlobalSignal(&s, "")89return Div(10 Button(OnClick(func() { cartItems.Set(append(cartItems.Get(), item)) })),11 Button(OnClick(func() { announcement.Set("Maintenance tonight") })),12)
Deploy Safety
Persist deliberately. Ship with visibility.
Vango treats persistence as a contract. The framework generates state artifacts, computes deployment impact, and makes warm versus cold changes visible before they surprise users in production.
- Use `SessionKey`, `SharedSignal`, or `GlobalSignal` only for state that should truly persist.
- Commit generated routes, state artifacts, and bindings alongside code changes.
- Run `vango state plan` before shipping schema-affecting changes.
Client Boundaries
Use the smallest boundary that fits.
Most of the app should remain server-owned. When browser-local behavior or native shells matter, Vango gives you explicit escape hatches instead of encouraging silent ownership drift.
Hooks
Attach behavior to server-owned DOM when you need drag-and-drop, focus management, or small browser-local interaction.
Islands
Hand a subtree to a client runtime only when a rich editor or external widget truly owns structure.
WASM
Use a client-local execution boundary when Go itself should run in the browser for offline or latency-sensitive work.
Multi-Surface
One codebase across web, desktop, and iPhone.
Shared app code stays under `app/` and `internal/`, while native hosts live at the edge. Vango’s launch posture is web-first, with real desktop and iOS scaffolding when product needs justify it.
Web
SSR, thin client patches, and progressive enhancement over WebSocket remain the default Vango runtime.
macOS
Shared app code with a native shell and the same server-driven runtime model for desktop products.
iPhone
A scaffoldable iOS host with native bridge capabilities, StoreKit scaffolding, and the same shared Vango app codebase.
Proof
This site is a Vango app.
The launch website uses Vango’s own file-based routing, stateful components, and a `vango-docs` section mounted through normal routes. The framework is not a brochure feature here; it is the runtime behind the site.
Route-driven docs
The docs live at `/docs` and `/docs/*path`, rendered through shared site chrome instead of a separate frontend.
Interactive marketing UI
Navigation and code tabs are normal Vango components using Setup and session-loop state.
Curated source material
The docs are reshaped from the README, Developer Guide, architecture docs, and release notes.
Start with the docs. Ship with the framework.
Use the quickstart to scaffold a real app, then move into the programming model, client boundaries, and deploy-safe persistence guides.