akka-net-aspire-configuration
Configure Akka.NET with .NET Aspire for local development and production deployments. Covers actor system setup, clustering, persistence, Akka.Management integration, and Aspire orchestration patterns.
Install / Use
npx skills add Aaronontheweb/dotnet-skills --skill akka-aspire-configurationInstalls into whichever agent you are using.
SKILL.md
Installable skill definition
Quality Score
Category
OperationsSupported Platforms
Our assessment of akka-net-aspire-configuration
akka-net-aspire-configuration scores 93/100 on our quality scale, 184th of 764 Operations skills we index (top 25%).
Its SKILL.md is 24 KB long, well organised into 26 sections with 14 code examples: a thorough specification that gives an agent plenty to work with.
With 1,183 GitHub stars, it is one of the more widely adopted skills in the catalogue.
Maintenance, license and trust
- The repository was last updated 15 days ago, so akka-net-aspire-configuration is actively maintained.
- It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 100/100, with no cautions. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
akka-net-aspire-configuration compared with similar skills
All 4 of these similar skills score higher than akka-net-aspire-configuration; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| akka-net-aspire-configuration (this skill)by Aaronontheweb | 93 | 1.2k | 15d ago | SKILL.md |
| claude-memby thedotmack | 100 | 95.2k | today | CLAUDE.md |
| algorithmic-artby anthropics | 100 | 177.9k | 10d ago | SKILL.md |
| pptxby anthropics | 100 | 177.9k | 10d ago | SKILL.md |
| designby nextlevelbuilder | 100 | 130.2k | 12d ago | SKILL.md |
Frequently asked questions
- How do I install akka-net-aspire-configuration?
- Run
npx skills add Aaronontheweb/dotnet-skills --skill akka-net-aspire-configuration. The install tabs above show the steps for each supported agent. - Which AI agents does akka-net-aspire-configuration work with?
- It is written for Universal, as a SKILL.md file. Other agents that read the same format can often use it too.
- Is akka-net-aspire-configuration safe to use?
- It is MIT-licensed and scores 100/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is akka-net-aspire-configuration still maintained?
- The repository was last updated 15 days ago, so akka-net-aspire-configuration is actively maintained.
Skill content
View source on GitHubname: akka-net-aspire-configuration description: Configure Akka.NET with .NET Aspire for local development and production deployments. Covers actor system setup, clustering, persistence, Akka.Management integration, and Aspire orchestration patterns. invocable: false
Configuring Akka.NET with .NET Aspire
When to Use This Skill
Use this skill when:
- Setting up a new Akka.NET project with .NET Aspire orchestration
- Configuring Akka.Cluster with cluster bootstrapping and discovery
- Integrating Akka.Persistence with SQL Server
- Setting up Akka.Management for cluster management
- Configuring multi-replica actor systems in local development
- Deploying Akka.NET applications to Kubernetes with Aspire
Related Skills
akka-net-management- Deep dive into Akka.Management, Cluster Bootstrap, and discovery providers (Kubernetes, Azure, Config)microsoft-extensions-configuration- IValidateOptions patterns for configuration validationakka-net-best-practices- Cluster/local mode abstractions for testable actor systemsaspire-integration-testing- Testing Aspire applications with real infrastructure
Core Principles
- Configuration via Microsoft.Extensions.Configuration - Use strongly-typed settings classes bound from appsettings.json (see
microsoft-extensions-configurationskill) - Akka.Hosting for DI Integration - Use the Akka.Hosting library for seamless ASP.NET Core integration
- Aspire for Orchestration - Let Aspire manage service dependencies, networking, and environment configuration
- Health Checks - Always configure health checks for clustering, persistence, and readiness
- Separate Concerns - Keep actor definitions, configuration, and Aspire orchestration in separate layers
- Validate Configuration at Startup - Use
IValidateOptions<T>and.ValidateOnStart()to fail fast on misconfiguration
Project Structure
YourSolution/
├── src/
│ ├── YourApp.Actors/ # Actor definitions and business logic
│ │ ├── YourActor.cs
│ │ └── YourApp.Actors.csproj
│ ├── YourApp/ # ASP.NET Core web application
│ │ ├── Config/
│ │ │ ├── AkkaConfiguration.cs # Akka setup extension methods
│ │ │ └── AkkaSettings.cs # Configuration model
│ │ ├── Program.cs
│ │ ├── appsettings.json
│ │ └── YourApp.csproj
│ └── YourApp.AppHost/ # Aspire orchestration
│ ├── Program.cs
│ ├── AkkaManagementExtensions.cs
│ └── YourApp.AppHost.csproj
Required NuGet Packages
For Actor Project (YourApp.Actors.csproj)
<ItemGroup>
<PackageReference Include="Akka.Cluster.Hosting" />
<PackageReference Include="Akka.Streams" />
</ItemGroup>
For Web Application (YourApp.csproj)
<ItemGroup>
<PackageReference Include="Akka.Hosting" />
<PackageReference Include="Akka.Cluster.Hosting" />
<PackageReference Include="Akka.Persistence.Sql.Hosting" />
<PackageReference Include="Akka.Management" />
<PackageReference Include="Akka.Management.Cluster.Bootstrap" />
<PackageReference Include="Akka.Discovery.KubernetesApi" />
<PackageReference Include="Akka.Discovery.Azure" />
<PackageReference Include="Akka.Discovery.Config.Hosting" />
<PackageReference Include="Petabridge.Cmd.Host" />
<PackageReference Include="Petabridge.Cmd.Cluster" />
</ItemGroup>
For AppHost (YourApp.AppHost.csproj)
<Sdk Name="Aspire.AppHost.Sdk" Version="$(AspireVersion)" />
<ItemGroup>
<PackageReference Include="Aspire.Hosting.AppHost" />
<PackageReference Include="Aspire.Hosting.Azure.Storage" />
<PackageReference Include="Aspire.Hosting.SqlServer" />
</ItemGroup>
Configuration Model (AkkaSettings.cs)
Create a strongly-typed configuration class:
using System.Net;
using System.Security.Cryptography.X509Certificates;
using Akka.Cluster.Hosting;
using Akka.Remote.Hosting;
using Petabridge.Cmd.Host;
namespace YourApp.Config;
public class AkkaSettings
{
public string ActorSystemName { get; set; } = "YourSystem";
public bool LogConfigOnStart { get; set; } = false;
public RemoteOptions RemoteOptions { get; set; } = new()
{
PublicHostName = Dns.GetHostName(),
HostName = "0.0.0.0",
Port = 8081
};
public ClusterOptions ClusterOptions { get; set; } = new()
{
SeedNodes = [$"akka.tcp://YourSystem@{Dns.GetHostName()}:8081"],
Roles = ["your-role"]
};
public ShardOptions ShardOptions { get; set; } = new();
public AkkaManagementOptions? AkkaManagementOptions { get; set; }
public PetabridgeCmdOptions PbmOptions { get; set; } = new()
{
Host = "0.0.0.0",
Port = 9110
};
public TlsSettings? TlsSettings { get; set; }
}
public class TlsSettings
{
public bool Enabled { get; set; } = false;
public string? CertificatePath { get; set; }
public string? CertificatePassword { get; set; }
public bool ValidateCertificates { get; set; } = true;
public X509Certificate2? LoadCertificate()
{
if (string.IsNullOrWhiteSpace(CertificatePath))
return null;
if (!File.Exists(CertificatePath))
throw new FileNotFoundException($"Certificate file not found at: {CertificatePath}");
return !string.IsNullOrWhiteSpace(CertificatePassword)
? X509CertificateLoader.LoadPkcs12FromFile(CertificatePath, CertificatePassword)
: X509CertificateLoader.LoadCertificateFromFile(CertificatePath);
}
}
public class AkkaManagementOptions
{
public bool Enabled { get; set; }
public string? Hostname { get; set; }
public int Port { get; set; } = 8558;
public string ServiceName { get; set; } = "your-service";
public string PortName { get; set; } = "management";
public int RequiredContactPointsNr { get; set; } = 1;
public bool FilterOnFallbackPort { get; set; } = true;
public DiscoveryMethod DiscoveryMethod { get; set; } = DiscoveryMethod.Config;
}
public enum DiscoveryMethod
{
Config,
Kubernetes,
AzureTableStorage,
AwsEcsTagBased,
AwsEc2TagBased
}
Akka Configuration Extension Methods (AkkaConfiguration.cs)
using Akka.Cluster.Hosting;
using Akka.Discovery.Azure;
using Akka.Discovery.Config.Hosting;
using Akka.Discovery.KubernetesApi;
using Akka.Hosting;
using Akka.Management;
using Akka.Management.Cluster.Bootstrap;
using Akka.Persistence.Sql.Config;
using Akka.Persistence.Sql.Hosting;
using Akka.Remote.Hosting;
using LinqToDB;
namespace YourApp.Config;
public static class AkkaConfiguration
{
public static IServiceCollection ConfigureAkka(
this IServiceCollection services,
IConfiguration configuration,
Action<AkkaConfigurationBuilder, IServiceProvider> additionalConfig)
{
var akkaSettings = BindAkkaSettings(services, configuration);
var connectionString = configuration.GetConnectionString("DefaultConnection");
if (connectionString is null)
throw new Exception("DefaultConnection ConnectionString is missing");
const string roleName = "your-role";
services.AddAkka(akkaSettings.ActorSystemName, (builder, provider) =>
{
builder.ConfigureNetwork(provider)
.WithAkkaClusterReadinessCheck()
.WithActorSystemLivenessCheck()
.WithSqlPersistence(
connectionString: connectionString,
providerName: ProviderName.SqlServer2022,
databaseMapping: DatabaseMapping.SqlServer,
tagStorageMode: TagMode.TagTable,
deleteCompatibilityMode: true,
useWriterUuidColumn: true,
autoInitialize: true,
journalBuilder: journalBuilder =>
{
journalBuilder.WithHealthCheck(name: "Akka.Persistence.Sql.Journal[default]");
},
snapshotBuilder: snapshotBuilder =>
{
snapshotBuilder.WithHealthCheck(name: "Akka.Persistence.Sql.SnapshotStore[default]");
});
// Add your actors here
// Example: builder.WithActors((system, registry) => { ... });
additionalConfig(builder, provider);
});
return services;
}
public static AkkaSettings BindAkkaSettings(IServiceCollection services, IConfiguration configuration)
{
var akkaSettings = new AkkaSettings();
configuration.GetSection(nameof(AkkaSettings)).Bind(akkaSettings);
services.AddSingleton(akkaSettings);
return akkaSettings;
}
public static AkkaConfigurationBuilder ConfigureNetwork(
this AkkaConfigurationBuilder builder,
IServiceProvider serviceProvider)
{
var settings = serviceProvider.GetRequiredService<AkkaSettings>();
var configuration = serviceProvider.GetRequiredService<IConfiguration>();
// Apply TLS configuration if enabled
if (settings.TlsSettings is { Enabled: true })
{
ConfigureRemoteOptionsWithTls(settings);
}
builder.WithRemoting(settings.RemoteOptions);
if (settings.AkkaManagementOptions is { Enabled: true })
{
// Clear seed nodes when using Akka.Management
var clusterOptions = settings.ClusterOptions;
clusterOptions.SeedNodes = [];
builder
.WithClustering(clusterOptions)
.WithAkkaManagement(setup =>
{
setup.Http.HostName = settings.AkkaManagementOptions.Hostname?.ToLower();
setup.Http.Port = settings.AkkaManagementOptions.Port;
setup.Http.BindHostName = "0.0.0.0";
setup.Http.BindPort = settings.AkkaManagementOptions.Port;
})
.WithClusterBootstrap(options =>
{
options.ContactPointDiscovery.ServiceName = settings.AkkaManagementOptions.ServiceName;
options.ContactPointDiscovery.PortName = settings.AkkaManagementOptions.PortName;
options.ContactPointDiscovery.RequiredContactPointsNr =
settings.AkkaManagementOptions.RequiredContactPointsNr;
options.ContactPointDiscovery.ContactWithAllContactPoints = true;
options.ContactPointDiscovery.StableMargin = TimeSpan.FromSeconds(5);
options.ContactPoint.FilterOnFallbackPort =
settings.AkkaManagementOptions.FilterOnFallbackPort;
}, autoStart: true);
ConfigureDiscovery(builder, settings, configuration);
}
else
{
builder.WithClustering(settings.ClusterOptions);
}
return builder;
}
private static void ConfigureDiscovery(
AkkaConfigurationBuilder builder,
AkkaSettings settings,
IConfiguration configuration)
{
switch (settings.AkkaManagementOptions!.DiscoveryMethod)
{
case DiscoveryMethod.Kubernetes:
builder.WithKubernetesDiscovery();
break;
case DiscoveryMethod.AzureTableStorage:
var connectionString = configuration.GetConnectionString("AkkaManagementAzure");
if (connectionString is null)
throw new Exception("AkkaManagement table storage connection string [AkkaManagementAzure] is missing");
builder
.WithAzureDiscovery(options =>
{
options.ServiceName = settings.AkkaManagementOptions.ServiceName;
options.ConnectionString = connectionString;
options.HostName = settings.RemoteOptions.Public
Truncated for display — read the full file on GitHub.
Related Skills
claude-mem
95.2kPersistent Context Across Sessions for Every Agent – Captures everything your agent does during sessions, compresses it with AI, and injects relevant context back into future sessions. Works with Claude Code, OpenClaw, Codex, Gemini, Hermes, Copilot, OpenCode + More
algorithmic-art
177.9kCreating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems.
pptx
177.9kUse this skill any time a .pptx or .potx file is involved in any way — as input, output, or both. This includes: creating slide decks, pitch decks, or presentations; reading, parsing, or extracting text from any .pptx or .potx file (even if the extracted content will be used elsewhere, like in an em…
design
130.2kComprehensive design skill: brand identity, design tokens, UI styling, logo generation (55 styles, Gemini, Atlas Cloud, or MuAPI AI), corporate identity program (50 deliverables, CIP mockups), HTML presentations (Chart.js), banner design (22 styles, social/ads/web/print), icon design (15 styles, SVG…
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
