Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,9 @@ framework/
SimpleModule.DevTools # Developer tooling and diagnostics
SimpleModule.Storage # File storage abstraction with Local, Azure Blob, and S3 providers
modules/
Admin, AuditLogs, Dashboard, FileStorage, Orders, PageBuilder,
Products, Settings, Users
Admin, Agents, AuditLogs, BackgroundJobs, Dashboard, Email,
FeatureFlags, FileStorage, Localization, Marketplace, Orders,
PageBuilder, Products, Rag, RateLimiting, Settings, Tenants, Users
OpenIddict # OpenID Connect / OAuth 2.0 via OpenIddict
Permissions # RBAC and access control
packages/
Expand Down
10 changes: 7 additions & 3 deletions docs/CONSTITUTION.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,13 @@ All hooks are optional. All have default no-op implementations.
4. **ConfigureMenu** -- register navigation menu items
5. **ConfigurePermissions** -- register authorization permissions
6. **ConfigureSettings** -- register runtime-configurable settings
7. **OnStartAsync** -- one-time initialization after all services are registered
8. **OnStopAsync** -- graceful shutdown cleanup
9. **CheckHealthAsync** -- report module health status (Healthy, Degraded, Unhealthy)
7. **ConfigureFeatureFlags** -- register feature flag definitions
8. **ConfigureAgents** -- register AI agent definitions
9. **ConfigureRateLimits** -- register rate limit policies
10. **ConfigureHost** -- configure host-level integrations (e.g., TickerQ, database initialization) after the host is built
11. **OnStartAsync** -- one-time initialization after all services are registered
12. **OnStopAsync** -- graceful shutdown cleanup
13. **CheckHealthAsync** -- report module health status (Healthy, Degraded, Unhealthy)

### Module Options

Expand Down
2 changes: 1 addition & 1 deletion docs/site/getting-started/introduction.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ app.CollectModuleMenuItems(); // builds the navigation menu

### React + Inertia.js Frontend

Each module ships its own React pages as a Vite library-mode bundle. The host app uses Blazor SSR to deliver the initial HTML with serialized props, then React hydrates on the client.
Each module ships its own React pages as a Vite library-mode bundle. The host app uses Inertia.js middleware to render a static HTML shell with embedded JSON props, then React hydrates on the client.

This means:

Expand Down
17 changes: 16 additions & 1 deletion docs/site/guide/modules.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ For example, a Products module owns everything related to products: the database

## The `IModule` Interface

The `IModule` interface defines six lifecycle hooks, all with default (no-op) implementations. You only override the ones you need:
The `IModule` interface defines a set of lifecycle hooks, all with default (no-op) implementations. You only override the ones you need:

```csharp
public interface IModule
Expand All @@ -25,6 +25,14 @@ public interface IModule
virtual void ConfigureMenu(IMenuBuilder menus) { }
virtual void ConfigurePermissions(PermissionRegistryBuilder builder) { }
virtual void ConfigureSettings(ISettingsBuilder settings) { }
virtual void ConfigureFeatureFlags(IFeatureFlagBuilder builder) { }
virtual void ConfigureAgents(IAgentBuilder builder) { }
virtual void ConfigureRateLimits(IRateLimitBuilder builder) { }
virtual void ConfigureHost(IHost host) { }
virtual Task OnStartAsync(CancellationToken cancellationToken) => Task.CompletedTask;
virtual Task OnStopAsync(CancellationToken cancellationToken) => Task.CompletedTask;
virtual Task<ModuleHealthStatus> CheckHealthAsync(CancellationToken cancellationToken) =>
Task.FromResult(ModuleHealthStatus.Healthy);
}
```

Expand All @@ -36,6 +44,13 @@ public interface IModule
| `ConfigureMenu` | Register navigation items in the menu system |
| `ConfigurePermissions` | Define module-specific permissions for authorization |
| `ConfigureSettings` | Register configurable settings for the module |
| `ConfigureFeatureFlags` | Register feature flag definitions |
| `ConfigureAgents` | Register AI agent definitions |
| `ConfigureRateLimits` | Register rate limit policies |
| `ConfigureHost` | Configure host-level integrations after the host is built (e.g., TickerQ, database initialization) |
| `OnStartAsync` | One-time async initialization after all services are registered |
| `OnStopAsync` | Graceful shutdown cleanup |
| `CheckHealthAsync` | Report per-module health status |

::: tip
All methods are `virtual` with default no-op implementations. You only need to override the hooks your module actually uses.
Expand Down
15 changes: 15 additions & 0 deletions docs/site/reference/api.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,14 @@ public interface IModule
virtual void ConfigureMenu(IMenuBuilder menus) { }
virtual void ConfigurePermissions(PermissionRegistryBuilder builder) { }
virtual void ConfigureSettings(ISettingsBuilder settings) { }
virtual void ConfigureFeatureFlags(IFeatureFlagBuilder builder) { }
virtual void ConfigureAgents(IAgentBuilder builder) { }
virtual void ConfigureRateLimits(IRateLimitBuilder builder) { }
virtual void ConfigureHost(IHost host) { }
virtual Task OnStartAsync(CancellationToken cancellationToken) => Task.CompletedTask;
virtual Task OnStopAsync(CancellationToken cancellationToken) => Task.CompletedTask;
virtual Task<ModuleHealthStatus> CheckHealthAsync(CancellationToken cancellationToken) =>
Task.FromResult(ModuleHealthStatus.Healthy);
}
```

Expand All @@ -34,6 +42,13 @@ public interface IModule
| `ConfigureMenu` | Application startup | Add navigation menu items |
| `ConfigurePermissions` | Application startup | Register permission definitions |
| `ConfigureSettings` | Application startup | Register settings definitions |
| `ConfigureFeatureFlags` | Application startup | Register feature flag definitions |
| `ConfigureAgents` | Application startup | Register AI agent definitions |
| `ConfigureRateLimits` | Application startup | Register rate limit policies |
| `ConfigureHost` | After host is built | Configure host-level integrations (TickerQ, DB init) |
| `OnStartAsync` | After services registered | One-time async initialization |
| `OnStopAsync` | Graceful shutdown | Cleanup, flush buffers, drain work |
| `CheckHealthAsync` | Health check endpoint | Report module health status |

::: info
`ConfigureEndpoints` is an escape hatch. If your module has `IEndpoint`/`IViewEndpoint` implementations, the source generator registers them automatically. Only override `ConfigureEndpoints` for non-standard routing needs.
Expand Down
Loading