diff --git a/Hosts/Moonlight.Api.Host/AppStartupLoader.cs b/Hosts/Moonlight.Api.Host/AppStartupLoader.cs
deleted file mode 100644
index c1e7a9e8..00000000
--- a/Hosts/Moonlight.Api.Host/AppStartupLoader.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using MoonCore.PluginFramework;
-using Moonlight.Api.Startup;
-
-namespace Moonlight.Api.Host;
-
-[PluginLoader]
-public partial class AppStartupLoader : IAppStartup
-{
-
-}
\ No newline at end of file
diff --git a/Hosts/Moonlight.Api.Host/Moonlight.Api.Host.csproj b/Hosts/Moonlight.Api.Host/Moonlight.Api.Host.csproj
index ca1ae0b3..052019ff 100644
--- a/Hosts/Moonlight.Api.Host/Moonlight.Api.Host.csproj
+++ b/Hosts/Moonlight.Api.Host/Moonlight.Api.Host.csproj
@@ -7,8 +7,6 @@
-
-
@@ -16,6 +14,9 @@
all
runtime; build; native; analyzers; buildtransitive
+
+
+
diff --git a/Hosts/Moonlight.Api.Host/Program.cs b/Hosts/Moonlight.Api.Host/Program.cs
index c4b7d8f9..dc76f08c 100644
--- a/Hosts/Moonlight.Api.Host/Program.cs
+++ b/Hosts/Moonlight.Api.Host/Program.cs
@@ -1,17 +1,22 @@
-using Moonlight.Api.Host;
+using Moonlight.Api.Startup;
+using SimplePlugin.Generated;
-var appLoader = new AppStartupLoader();
-appLoader.Initialize();
+var modules = PluginRegistry.Modules
+ .OfType()
+ .ToArray();
var builder = WebApplication.CreateBuilder(args);
-appLoader.PreBuild(builder);
+foreach (var startup in modules)
+ startup.PreBuild(builder);
var app = builder.Build();
-appLoader.PostBuild(app);
+foreach (var startup in modules)
+ startup.PostBuild(app);
-appLoader.PostMiddleware(app);
+foreach (var startup in modules)
+ startup.PostMiddleware(app);
if (app.Environment.IsDevelopment())
app.UseWebAssemblyDebugging();
diff --git a/Hosts/Moonlight.Frontend.Host/AppStartupLoader.cs b/Hosts/Moonlight.Frontend.Host/AppStartupLoader.cs
deleted file mode 100644
index 6ef20cd4..00000000
--- a/Hosts/Moonlight.Frontend.Host/AppStartupLoader.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using MoonCore.PluginFramework;
-using Moonlight.Frontend.Startup;
-
-namespace Moonlight.Frontend.Host;
-
-[PluginLoader]
-public partial class AppStartupLoader : IAppStartup
-{
-
-}
\ No newline at end of file
diff --git a/Hosts/Moonlight.Frontend.Host/Moonlight.Frontend.Host.csproj b/Hosts/Moonlight.Frontend.Host/Moonlight.Frontend.Host.csproj
index 6e02dc87..9f1cd1f5 100644
--- a/Hosts/Moonlight.Frontend.Host/Moonlight.Frontend.Host.csproj
+++ b/Hosts/Moonlight.Frontend.Host/Moonlight.Frontend.Host.csproj
@@ -14,8 +14,8 @@
-
-
+
+
diff --git a/Hosts/Moonlight.Frontend.Host/Program.cs b/Hosts/Moonlight.Frontend.Host/Program.cs
index 5b58db81..de4aecc0 100644
--- a/Hosts/Moonlight.Frontend.Host/Program.cs
+++ b/Hosts/Moonlight.Frontend.Host/Program.cs
@@ -1,15 +1,20 @@
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
-using Moonlight.Frontend.Host;
+using Moonlight.Frontend.Startup;
+using SimplePlugin.Generated;
-var appLoader = new AppStartupLoader();
-appLoader.Initialize();
+var modules = PluginRegistry
+ .Modules
+ .OfType()
+ .ToArray();
var builder = WebAssemblyHostBuilder.CreateDefault(args);
-appLoader.PreBuild(builder);
+foreach (var startup in modules)
+ startup.PreBuild(builder);
var app = builder.Build();
-appLoader.PostBuild(app);
+foreach(var startup in modules)
+ startup.PostBuild(app);
await app.RunAsync();
\ No newline at end of file
diff --git a/Moonlight.Api/Moonlight.Api.csproj b/Moonlight.Api/Moonlight.Api.csproj
index 9d1fc83a..d1125b26 100644
--- a/Moonlight.Api/Moonlight.Api.csproj
+++ b/Moonlight.Api/Moonlight.Api.csproj
@@ -30,6 +30,7 @@
+
diff --git a/Moonlight.Api/Startup/IAppStartup.cs b/Moonlight.Api/Startup/IAppStartup.cs
index 7f49b7d7..20fcaf3f 100644
--- a/Moonlight.Api/Startup/IAppStartup.cs
+++ b/Moonlight.Api/Startup/IAppStartup.cs
@@ -1,8 +1,9 @@
using Microsoft.AspNetCore.Builder;
+using SimplePlugin.Abstractions;
namespace Moonlight.Api.Startup;
-public interface IAppStartup
+public interface IAppStartup : IPluginModule
{
public void PreBuild(WebApplicationBuilder builder);
public void PostBuild(WebApplication application);
diff --git a/Moonlight.Api/Startup/Startup.cs b/Moonlight.Api/Startup/Startup.cs
index 7aebd692..b785d7df 100644
--- a/Moonlight.Api/Startup/Startup.cs
+++ b/Moonlight.Api/Startup/Startup.cs
@@ -1,7 +1,9 @@
using Microsoft.AspNetCore.Builder;
+using SimplePlugin.Abstractions;
namespace Moonlight.Api.Startup;
+[PluginModule]
public partial class Startup : IAppStartup
{
public void PreBuild(WebApplicationBuilder builder)
diff --git a/Moonlight.Frontend/Moonlight.Frontend.csproj b/Moonlight.Frontend/Moonlight.Frontend.csproj
index 2cfb72cf..f5522291 100644
--- a/Moonlight.Frontend/Moonlight.Frontend.csproj
+++ b/Moonlight.Frontend/Moonlight.Frontend.csproj
@@ -26,6 +26,7 @@
+
diff --git a/Moonlight.Frontend/Startup/IAppStartup.cs b/Moonlight.Frontend/Startup/IAppStartup.cs
index 0fbe5eff..f9e821eb 100644
--- a/Moonlight.Frontend/Startup/IAppStartup.cs
+++ b/Moonlight.Frontend/Startup/IAppStartup.cs
@@ -1,8 +1,9 @@
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
+using SimplePlugin.Abstractions;
namespace Moonlight.Frontend.Startup;
-public interface IAppStartup
+public interface IAppStartup : IPluginModule
{
public void PreBuild(WebAssemblyHostBuilder builder);
public void PostBuild(WebAssemblyHost application);
diff --git a/Moonlight.Frontend/Startup/Startup.cs b/Moonlight.Frontend/Startup/Startup.cs
index 90631038..3a03308a 100644
--- a/Moonlight.Frontend/Startup/Startup.cs
+++ b/Moonlight.Frontend/Startup/Startup.cs
@@ -1,7 +1,9 @@
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
+using SimplePlugin.Abstractions;
namespace Moonlight.Frontend.Startup;
+[PluginModule]
public partial class Startup : IAppStartup
{
public void PreBuild(WebAssemblyHostBuilder builder)