Architecture
Overview of forge framework architecture.
Core Philosophy
- Type-Safe First: Primary API uses generics for compile-time safety
- Dynamic When Needed: Secondary API for runtime flexibility
- Convention over Configuration: Sensible defaults everywhere
- Fully Extensible: Everything can be extended/overridden
- Security by Default: Built-in protections
- Code Generation: AST-based generation for type-safe code
Architecture Layers
┌─────────────────────────────────────────────────────────┐
│ User Application │
│ (Schema Definitions, Models, Views, Controllers) │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ Code Generation Layer │
│ (AST Parser → SQL Generation → Go Code Generation) │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ Framework API Layer │
│ (QuerySet, Manager, FieldExpr, QueryExpr) │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ Database Layer │
│ (SQL Builder, Parameter Binding, Transactions) │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ Infrastructure Layer │
│ (HTTP Router, Middleware, Security, Config, Logging) │
└─────────────────────────────────────────────────────────┘
Component Architecture
Schema Definition System
Location: pkg/schema/
Purpose: Define models declaratively in Go code
Components:
schema.go- Core Schema interfacefield.go- Field definitions with buildersrelation.go- Relationship definitionsmeta.go- Model metadatahooks.go- Lifecycle hooks
Code Generation System
Location: pkg/generator/
Purpose: Generate type-safe Go code from schema definitions
Components:
generator.go- Main generation orchestratorast_parser.go- Go AST parser for schema extractionwriter.go- Code file writertemplates/- Code generation templates
Generated Files:
models/*.gen.go- Model structsmodels/*_fields.gen.go- FieldExpr definitionsmodels/*_manager.gen.go- Manager with CRUD operationsmodels/*_queryset.gen.go- Type-safe QuerySet wrapper
Query System
Location: pkg/query/
Purpose: Type-safe and dynamic query building
Components:
field_expr.go- Type-safe field accessors (FieldExpr[T])query_expr.go- Query conditions (QueryExpr)queryset.go- QuerySet implementation withBaseQuerySet[T]sql_builder.go- SQL generation with proper escapingaggregates.go- Aggregate functionsannotations.go- Annotation support
Database Layer
Location: pkg/db/
Purpose: Database connection and transaction management
Components:
db.go- Database connection wrappertransaction.go- Transaction managementmigrations.go- Migration support
HTTP & Routing
Location: pkg/http/
Purpose: HTTP server and routing
Components:
router.go- Chi router wrapperserver.go- HTTP servermiddleware.go- Middleware stackcontext.go- Request context utilitiesresponse.go- Response helpers
Admin System
Location: pkg/admin/
Purpose: Auto-generated admin interface
Components:
registry.go- Model registryrouter.go- Admin routeslist.go- List viewforms.go- Form handlingtemplates/- Admin templates
Security
Location: pkg/security/
Purpose: Security features
Components:
csrf.go- CSRF protectionsessions.go- Session managementxss.go- XSS protectionsql_injection.go- SQL injection prevention
Data Flow
Request Flow
- HTTP request arrives
- Middleware processes (auth, CSRF, logging)
- Router matches route
- Handler executes
- QuerySet/Manager queries database
- SQL builder generates SQL
- Database executes query
- Results mapped to models
- Response returned
Code Generation Flow
- User defines schema in Go
forge generatecommand runs- AST parser reads model files
- Schema information extracted
- Templates generate code
- Generated files written to
models/*.gen.go
Extension Points
Plugins
Plugins can hook into:
- Model registration
- Request/response lifecycle
- Code generation
- Admin customization
Custom Fields
Create custom field types:
- Implement
Fieldinterface - Add validation
- Define SQL type
Custom Templates
Customize code generation templates (advanced)
Technology Stack
- Go 1.21+ - Programming language
- chi/v5 - HTTP router
- database/sql - Database interface
- golang-migrate - Migrations
- zap - Logging
- viper - Configuration
- testify - Testing
Design Principles
- Type Safety - Compile-time checking wherever possible
- Performance - Efficient queries and minimal overhead
- Developer Experience - Easy to use, hard to misuse
- Extensibility - Everything can be extended
- Security - Secure by default
- Standards - Follow Go and web standards
See Also
- Development Guide - Contributing guide
- Implementation status - Current build status