forge Framework - Architecture Documentation
Overview
forge is a full-stack web framework for Go that provides Django-like functionality with type safety. This document describes the complete architecture of the framework.
System Architecture
High-Level Architecture
┌─────────────────────────────────────────────────────────────┐
│ Application Layer │
│ User Models, Views, Controllers, Routes │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ Code Generation Layer │
│ AST Parser → Schema Analysis → Code Generator │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ Framework API Layer │
│ Admin, API, ORM, Identity, Filter │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ Database Layer │
│ SQL Builder, Query Execution, Transactions, Migrations │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ Infrastructure Layer │
│ HTTP Server, Security, Logging, Config, Server │
└─────────────────────────────────────────────────────────────┘
Component Architecture
1. Schema System (forge/schema/)
Purpose: Declarative model definitions
Components:
schema.go- Core Schema interfacefield.go- Field definitions with buildersrelation.go- Relationship definitionsmeta.go- Model metadatahooks.go- Lifecycle hooksconstraint_builder.go- Database constraints
Key Interfaces:
type Schema interface {
Fields() []Field
Relations() []Relation
Meta() Meta
Hooks() *ModelHooks
}
2. Code Generation (forge/codegen/)
Purpose: Generate type-safe Go code from schema definitions
Components:
ast_parser.go- Go AST parser for schema extractiongenerator.go- Main generation orchestratorwriter.go- Code file writertemplates.go- Code generation templatestemplates/- Template files
Generated Files:
- Model structs
- FieldExpr definitions
- Manager with CRUD operations
- QuerySet wrappers
3. ORM System (forge/orm/)
Purpose: Type-safe database queries and operations
Components:
queryset.go- QuerySet implementationmanager.go- Manager with CRUD operationsfield_expr.go- Type-safe field accessorsexpression.go- Query expressionssql_builder.go- SQL generationupdate_builder.go- Update operationsaggregates.go- Aggregate functionsannotations.go- Annotation support
Key Types:
QuerySet[T]- Type-safe query interfaceManager[T]- Model managerFieldExpr[T]- Type-safe field accessExpression- Query conditions
4. Admin System (forge/admin/)
Purpose: Django-like admin interface
Components:
admin.go- Type-safe Admin[T] and Config[T]registry.go- Admin model registrylist_view.go- List view with pagination, search, filteringdetail_view.go- Detail viewform_view.go- Create/update formsfields.go- Field expressionsfilters.go- Filter systemwidgets.go- Form widgetsactions.go- Bulk actionsexport.go- CSV/JSON exportinlines.go- Related model editinghttp/- HTTP handlers
Key Types:
Admin[T]- Type-safe admin interfaceConfig[T]- Admin configurationFormData- Form data handling
5. API Framework (forge/api/)
Purpose: DRF-like REST API framework
Components:
viewset.go- BaseViewSet with CRUDserializer.go- Serializer systemserializers/- Field serializersauthentication/- Auth backends (Token, JWT, Basic, Session, API Key)permissions/- Permission classesthrottling/- Rate limitingrenderers/- Response renderers (JSON, XML, YAML, HTML, CSV)parsers/- Request parsersfilters/- Field filteringpagination.go- Paginationexceptions/- Exception handlingversioning/- API versioningcaching/- Cache backendsdocs/- OpenAPI documentation
Key Types:
ViewSet- Base viewset interfaceSerializer- Serializer interfaceAuthentication- Auth interfacePermission- Permission interface
6. Filter System (forge/filter/)
Purpose: Advanced filtering system with AST support
Components:
filter.go- Base filter interfacefilterset.go- FilterSet implementationparser.go- Query string parserast.go- AST representationexpression_converter.go- Expression conversionfilters/- Filter implementationswidgets/- Filter widgetssecurity.go- Security validationoptimizer.go- Query optimization
Key Types:
Filter[T]- Filter interfaceFilterSet[T]- FilterSet implementationFilterNode- AST node
7. Identity System (forge/identity/)
Purpose: User management and authentication
Components:
models/- User, Session, Permission, Group, Token modelsrepository/- Data access layerservice/- Business logic (User, Auth, Password, Permission)backends/- Authentication backendsserializers/- API serializershandlers/- HTTP handlersmiddleware/- Authentication middlewarefactory.go- System setupconfig/- Configuration
Key Types:
IdentitySystem- Complete identity systemUserService- User managementAuthService- AuthenticationPasswordService- Password management
8. Database Layer (forge/db/)
Purpose: Database connection and operations
Components:
db.go- Database connection wrappertransaction.go- Transaction managementmigrations.go- Migration system integrationmigrate/- Migration utilities
Features:
- Connection pooling
- Transaction support with savepoints
- Migration management
- SQL builder integration
9. Migration System (forge/migrate/)
Purpose: Database schema migrations
Components:
migrate.go- Migration executioncore.go- Core migration logicgenerate/- Migration generationverify/- Migration verification
Features:
- Schema detection
- Diff generation
- Migration execution
- Rollback support
10. HTTP & Server (forge/server/)
Purpose: HTTP server and routing
Components:
server.go- Server wrapperrouter.go- Router setupmiddleware.go- Middleware stackcontext.go- Request contextresponse.go- Response helperssecurity.go- Security middlewarestatic.go- Static file servinghealth.go- Health checksratelimit.go- Rate limiting
Middleware Stack:
- Request ID
- Real IP
- Recoverer
- Logger
- Session
- CSRF
- Authentication
11. Logging System (forge/log/)
Purpose: Structured logging
Components:
logger.go- Logger implementationconfig.go- Logging configurationencoder.go- Log encodersexporters/- Log exporters (console, file, remote)hooks/- Log hooksmiddleware.go- Request logging
Features:
- Multiple output formats (JSON, console)
- Multiple outputs (console, file, remote)
- Log levels
- Sampling in production
- Contextual logging
12. Configuration (forge/config/)
Purpose: Application configuration
Components:
config.go- Viper wrappersettings.go- Framework settingslogging_settings.go- Logging settings
Features:
- YAML, JSON, env var support
- Hierarchical configuration
- Default values
13. Validation (forge/validate/)
Purpose: Data validation
Components:
- Validator wrapper (go-playground/validator)
- Validation tag helpers
- Schema integration
14. Security (forge/security/)
Purpose: Security features
Components:
- CSRF protection
- XSS protection
- SQL injection prevention
- Input sanitization
15. CLI (forge/cli/)
Purpose: Command-line interface
Components:
root.go- CLI rootcommands/- CLI commandstemplates/- Project templatescore/- Core CLI functionality
Commands:
new- Create new projectgenerate- Generate codemigrate- Run migrationsrunserver- Start server- And more...
Data Flow
Request Flow
HTTP Request
↓
Chi Router
↓
Middleware Stack
↓
Handler (Admin/API/View)
↓
QuerySet / Manager
↓
SQL Builder
↓
Database
↓
Response (JSON/HTML)
Code Generation Flow
Schema Definition (Go)
↓
AST Parser
↓
Schema Analysis
↓
Code Generator
↓
Generated Files:
- Model structs
- FieldExpr
- Manager/QuerySet
Query Execution Flow
QuerySet Method Call
↓
Expression Building
↓
SQL Builder
↓
Parameter Binding
↓
Database Execution
↓
Row Scanning
↓
Model Instances
Extension Points
1. Model Extensions
- Add fields to existing models
- Add relations
- Add hooks
- Override methods
2. Admin Extensions
- Customize list display
- Add filters
- Add actions
- Custom widgets
- Custom forms
3. API Extensions
- Custom serializers
- Custom viewsets
- Custom authentication
- Custom permissions
- Custom throttling
4. Query Extensions
- Custom QuerySet methods
- Custom aggregates
- Custom annotations
- Custom expressions
5. Filter Extensions
- Custom filters
- Custom widgets
- Custom parsers
6. Middleware
- Custom middleware injection
- Request/response modification
7. Plugin System
- Register plugins
- Plugin lifecycle hooks
- Plugin dependencies
Technology Stack
Core
- Go 1.25+ - Programming language
- database/sql - Database interface
- go/ast - Code generation
HTTP & Routing
- chi/v5 - HTTP router
- chi/middleware - Middleware
Database
- database/sql - Standard library SQL interface
- lib/pq - PostgreSQL driver
- golang-migrate/v4 - Migrations
Security
- gorilla/csrf - CSRF protection
- alexedwards/scs/v2 - Sessions
- golang.org/x/crypto/bcrypt - Password hashing
Validation & Configuration
- go-playground/validator/v10 - Validation
- spf13/viper - Configuration
Logging
- zap - Structured logging
Utilities
- stretchr/testify - Testing
- iancoleman/strcase - String utilities
- google/uuid - UUID generation
Concurrency & Thread Safety
Thread Safety
- Database connections are thread-safe
- QuerySets are immutable (return new instances)
- Managers are thread-safe
- Admin registry is thread-safe
Concurrency Patterns
- Context-based cancellation
- Connection pooling
- Transaction isolation
Performance Considerations
Optimization Strategies
- Query optimization
- Connection pooling
- Lazy loading
- Caching (where implemented)
- Efficient data structures
Bottlenecks
- Database queries (primary bottleneck)
- Code generation (one-time cost)
- Reflection usage (minimized)
Memory Management
Allocation Patterns
- Minimal allocations in hot paths
- Reusable buffers
- Efficient data structures
- Connection pooling
Garbage Collection
- Designed to minimize GC pressure
- Efficient data structures
- Proper cleanup of resources