Build Go APIs withArchitectural Clarity
A NestJS-inspired dependency injection framework for Go. Build modular, testable applications with a unified architecture for HTTP and WebSocket.
MIT License — Open source and ready for production
type UserController struct {
common.REST
UserService // Injected
}
func (c UserController) READ_BY_ID(param ginject.Param) User {
// GET /users/:id
return c.UserService.FindOne(param.Get("id"))
}Method naming → routes. Type → injected dependencies. No tags. No code generation.
Purpose-Built for Production
Everything you need to build scalable, maintainable web applications in Go.
Dependency Injection
NestJS-inspired Module→Controller→Provider pattern with reflection-based auto-injection. No tags, no annotations.
Execution Safety
Every request carries a cancellable context.Context with metadata and hierarchical SLA timeouts. WS connections get their own root context.
Multi-Transport
WS controllers with event-based routing. Per-connection ExecutionContext, per-message SLA timeouts, and clean shutdown.
Type-Safe
GoSafe launcher checks ctx.Done() before spawning. All WS goroutines are lifecycle-safe and cancel when the connection closes.
Middleware Stack
Composable middleware, guards, interceptors, and exception filters — global or per-route. Built-in CORS, Helmet, CSRF, RequestLogger.
Composable
Sharded in-memory LFU cache with TTL, SetNX atomic operations, Keys/TTL introspection, and a pluggable interface.
Built Different
A framework designed for how developers actually build applications.
One Architecture for All Transports
HTTP, WebSocket, and future protocols all share the same middleware, guards, and interceptors. Build once, deploy everywhere.
- Shared pipeline stages
- Code reuse
- Consistent patterns
Zero Configuration
No annotations. No code generation. Just Go. Method names become routes, types are injected automatically via reflection.
- Convention over config
- Idiomatic Go
- Type-safe DI
Production-Grade Defaults
Context propagation, goroutine safety, execution-scoped timeouts, and comprehensive error handling built in.
- Goroutine-safe
- Context propagation
- Built-in validation
Ready to build something great?
Learn the Architecture→Convention Over Configuration
No annotations. No code generation. Just Go. Method names become routes, types become dependencies—the framework stays out of your way.
- Reflection-based DI
- Type-safe injection
- Zero configuration
// Automatic routing from method names "text-violet-400">type "text-blue-300">UserController "text-violet-400">struct { common.REST "text-blue-300">UserService "text-blue-300">UserService // Auto-injected } "text-violet-400">func (c "text-blue-300">UserController) NewController() core.Controller { c.BindGuard(AuthGuard{}, c.CREATE, c.DELETE) "text-violet-400">return c } // GET /users/:id — Automatic route from method name "text-violet-400">func (c "text-blue-300">UserController) READ_BY_ID( param ginject.Param, ) "text-blue-300">User { "text-violet-400">return c."text-blue-300">UserService.FindOne(param.Get("id")) } // POST /users "text-violet-400">func (c "text-blue-300">UserController) CREATE(body ginject.Body) "text-blue-300">User { "text-violet-400">var user "text-blue-300">User body.Bind(&user) "text-violet-400">return c."text-blue-300">UserService.Create(&user) }
Ginject Request Lifecycle
A unified, intuitive, and predictable lifecycle for HTTP & WebSocket
HTTP REQUEST LIFECYCLE
Stateless
Request
WEBSOCKET MESSAGE LIFECYCLE
Stateful
Handshake
Clean & Intuitive
Simple, linear flow. Easy to understand.
Unified Architecture
Same stages across all transports.
Secure by Default
Guards at every level for protection.
Interceptor Power
Pre & post processing for any logic.
Centralized Errors
Consistent error handling everywhere.
Type Safe
Built with Go. Compiler enforced.