A headless CMS and dynamic application framework in Go, evolved from the FormCMS original C# implementation. It uses a single-table JSON store for maximum schema flexibility.
- Agentic Workflows: Integrated multi-agent system powered by Gemini models for orchestrating tasks.
- Router Agent: Intelligently routes user requests between specialized sub-agents.
- App Agent: Manages and queries app data and schemas autonomously.
- UI Agent: Dynamically updates the A2UI dashboard components based on user interactions and data changes.
- App Capability Discovery: Built-in
app_def.jsonand context file framework allowing LLM agents to dynamically discover app purpose, roles, and entity relationships. - A2UI Protocol: Real-time Agent-to-User Interface for streaming backend-driven UI updates (SSE) using a high-performance adjacency list model.
- Multi-Channel Communication: Seamlessly interact with users via WhatsApp, Email, Signal, Telegram, X.com, and Bluesky.
- Authenticated Channels: Link verified platform identities to user profiles.
- E-trail Logging: Secure audit logs with IP and User Agent for non-repudiation.
- Guest Support: Configurable guest access across different channels.
- Frappe/ERPNext Integration: Built-in support for importing and mapping Frappe Doctypes to native app schemas.
- Advanced RBAC: Granular Role-Based Access Control with field-level and row-level security filters managed via JSON metadata.
- Schema-on-Read Data Modeling: Define entities and attributes dynamically. All data is stored in a highly flexible single-table JSON schema (
aigen_records), making migrations a thing of the past. - REST & GraphQL APIs: Auto-generated CRUD and GraphQL endpoints.
- File Storage: Local and S3 support with image processing.
- Social Engagement: Built-in likes, bookmarks, and comments.
- Embedded UI: React Admin panel, GrapesJS page builder, and dynamic A2UI renderer included.
AIGenApp is a reusable Go framework. To use it, create a new Go project and import the framework.
- Go 1.25+
- Initialize a new Go module:
mkdir my-app
cd my-app
go mod init my-app- Create a
main.gofile:
package main
import (
"log"
"os"
"github.com/innomon/aigen-app/framework"
)
func main() {
configPath := ""
if len(os.Args) > 1 {
configPath = os.Args[1]
}
config, err := framework.LoadConfig(configPath)
if err != nil {
log.Fatalf("Error loading configuration: %v", err)
}
if err := framework.Start(config); err != nil {
log.Fatalf("Framework failed to start: %v", err)
}
}- Create a
config.yamlfile:
apps_dir: "apps"
www_root: "wwwroot"
database_dsn: "sqlite://aigen.db"
domain: ""
port: "5000"
agentic_config_path: "agentic.yaml"- Run the server:
go run main.go config.yamlThe server will start on http://localhost:5000.
| Variable | Description | Default |
|---|---|---|
DOMAIN |
Your external domain name (e.g., example.com). If set, enables automatic HTTPS via autocert. |
"" |
PORT |
The port to listen on for HTTP. Ignored if DOMAIN is set. |
5000 |
AIGenApp supports automatic TLS certificate provisioning via Let's Encrypt using autocert. To enable this:
- Point your domain's DNS A/AAAA records to your server's IP.
- Ensure ports
80and443are open and not in use by other processes. - Run the application with the
DOMAINenvironment variable:
DOMAIN=yourdomain.com go run main.go config.yamlThe server will automatically handle HTTP-to-HTTPS redirection and store certificates in a local certs directory.
framework: The main entry pointStart()function to initialize the application.apps: Pre-packaged data models, test data, and UI logic that load dynamically.core/api: HTTP handlers and routing.core/descriptors: Data models and schema definitions.core/services: Business logic and orchestration.infrastructure/filestore: File storage implementations (Local, S3).infrastructure/relationdbdao: Database abstraction layer (PostgreSQL, SQLite, and Firestore using single JSON store).utils: Shared utilities and data models.