Instant Response
Optimistic UI with <10ms perceived latency. Click feedback is instant, server confirms async.
GoliveKit brings Phoenix LiveView to Go. Build interactive applications with server-rendered components that update instantly via WebSocket — write everything in Go.
This counter updates in real-time via WebSocket — no page reload needed
Click the buttons — changes sync instantly
Everything you need to build modern web applications
Optimistic UI with <10ms perceived latency. Click feedback is instant, server confirms async.
Write your entire application in Go. Server-side rendering with minimal DOM patches.
Selective hydration for optimal performance. Interactive components only where needed.
Ecto-inspired changesets with validation. Strong typing from form to database.
CSRF protection, input sanitization, rate limiting, and authentication built-in.
Structured logging, Prometheus metrics, and OpenTelemetry tracing integration.
Modular architecture for maximum flexibility
Write your components in pure Go with a familiar lifecycle
type Counter struct {
core.BaseComponent
count int
}
func (c *Counter) Mount(ctx context.Context, params core.Params, session core.Session) error {
c.count = 0
return nil
}
func (c *Counter) HandleEvent(ctx context.Context, event string, payload map[string]any) error {
switch event {
case "increment":
c.count++
case "decrement":
c.count--
}
return nil
}
func (c *Counter) Render(ctx context.Context) core.Renderer {
return core.HTML(fmt.Sprintf(`
<div>
<span>Count: %d</span>
<button lv-click="decrement">-</button>
<button lv-click="increment">+</button>
</div>
`, c.count))
}
Server-rendered components with real-time DOM updates
Browser Server
┌───────────────┐ ┌─────────────────────────────┐
│ │ HTTP Request │ │
│ DOM │ ───────────────► │ Component.Mount() │
│ │ │ │ │
│ │ ◄─────────────── │ ▼ │
│ │ Full HTML │ Component.Render() → HTML │
│ │ │ │
└───────┬───────┘ └──────────────┬──────────────┘
│ │
│ WebSocket │
│ ◄──────────────────────────────────────►│
│ │
┌───────▼───────┐ ┌──────────────▼──────────────┐
│ │ User Event │ │
│ lv-click │ ───────────────► │ Component.HandleEvent() │
│ lv-change │ │ │ │
│ lv-submit │ ◄─────────────── │ ▼ │
│ │ Minimal Diff │ Diff Engine → Patch │
└───────────────┘ └─────────────────────────────┘
Powerful CLI for rapid development
From zero to real-time in under a minute
Install the GoliveKit CLI globally
Scaffold a new project with routing and components
Start the dev server at http://localhost:3000