Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Aspire integrations are a curated suite of NuGet packages selected to facilitate the integration of cloud-native applications with prominent services and platforms, such as Redis and PostgreSQL. Each integration furnishes essential cloud-native functionalities through either automatic provisioning or standardized configuration patterns.
Tip
Always strive to use the latest version of Aspire integrations to take advantage of the latest features, improvements, and security updates.
Warning
Integrations execute code in your development environment. Ensure that third-party integrations are trusted before use. For more information, see Best practices for a secure software supply chain.
Integration responsibilities
Most Aspire integrations are made up of two separate libraries, each with a different responsibility. One type represents resources within the AppHost projectβknown as hosting integrations. The other type of integration represents client libraries that connect to the resources modeled by hosting integrations, and they're known as client integrations.
Hosting integrations
Hosting integrations configure applications by provisioning resources (like containers or cloud resources) or pointing to existing instances (such as a local SQL server). These packages model various services, platforms, or capabilities, including caches, databases, logging, storage, and messaging systems.
Hosting integrations extend the IDistributedApplicationBuilder interface, enabling the AppHost project to express resources within its app model. Hosting integrations work with any type of application, not just .NET applications. They provide infrastructure and inject configuration details (such as connection strings, endpoints, and credentials) as environment variables into any project, executable, or container that references them.
The official hosting integration NuGet packages are tagged with aspire, integration, and hosting. In addition to the official hosting integrations, the community has created hosting integrations for various services and platforms as part of the Community Toolkit.
For information on creating a custom hosting integration, see Create custom Aspire hosting integration.
Client integrations
Client integrations wire up client libraries to dependency injection (DI), define configuration schema, and add health checks, resiliency, and telemetry where applicable. Aspire client integration libraries are prefixed with Aspire. and then include the full package name that they integrate with, such as Aspire.StackExchange.Redis.
These packages configure existing client libraries to connect to hosting integrations. They extend the IHostApplicationBuilder interface allowing client-consuming projects, such as your web app or API, to use the connected resource. The official client integration NuGet packages are tagged with aspire, integration, and client. In addition to the official client integrations, the community has created client integrations for various services and platforms as part of the Community Toolkit.
Important
Aspire integrations require IHostApplicationBuilder and are not compatible with HostingStartup implementations, which only provide access to IWebHostBuilder. If you're using HostingStartup for modular configuration, see HostingStartup is not supported with Aspire integrations for migration guidance.
For more information on creating a custom client integration, see Create custom Aspire client integrations.
Relationship between hosting and client integrations
Hosting and client integrations are best when used together, but are not coupled and can be used separately. Some hosting integrations don't have a corresponding client integration. Configuration is what makes the hosting integration work with the client integration.
Client integrations are .NET-specific and provide convenient, opinionated ways to configure .NET applications. However, you can use hosting integrations without client integrations for non-.NET applications or when you prefer to configure connections manually. In these scenarios, the hosting integration still provides the infrastructure and exposes connection information through environment variables that any application technology can consume.
Consider the following diagram that depicts the relationship between hosting and client integrations:
The AppHost project is where hosting integrations are used. Configuration, specifically environment variables, is injected into projects, executables, and containers, allowing client integrations to connect to the hosting integrations.
Integration features
When you add a client integration to a project within your Aspire solution, service defaults are automatically applied to that project; meaning the Service Defaults project is referenced and the AddServiceDefaults extension method is called. These defaults are designed to work well in most scenarios and can be customized as needed. The following service defaults are applied:
Observability and telemetry: Automatically sets up logging, tracing, and metrics configurations:
- Logging: A technique where code is instrumented to produce logs of interesting events that occurred while the program was running.
- Tracing: A specialized form of logging that helps you localize failures and performance issues within applications distributed across multiple machines or processes.
- Metrics: Numerical measurements recorded over time to monitor application performance and health. Metrics are often used to generate alerts when potential problems are detected.
Health checks: Exposes HTTP endpoints to provide basic availability and state information about an app. Health checks are used to influence decisions made by container orchestrators, load balancers, API gateways, and other management services.
Resiliency: The ability of your system to react to failure and still remain functional. Resiliency extends beyond preventing failures to include recovering and reconstructing your cloud-native environment back to a healthy state.
Understand host integration extension methods
Aspire hosting integrations provide extension methods that start with either Add or With. These methods conform to the following pattern:
Add*methods:Add*methods create and register new resources within the AppHost and return anIResourceBuilder<TResource>whereTResourceis the concrete resource type added. This lets you continue fluent configuration on the returned builder. For example, calling AddAzureServiceBus returns anIResourceBuilder<AzureServiceBusResource>, and then calling AddServiceBusQueue on that namespace builder returns anIResourceBuilder<AzureServiceBusQueueResource>. This pattern models parent-child relationships (for example, a Service Bus namespace and its queues or topics) while preserving a consistent fluent builder API.With*methods: UseWith*methods to configure or enhance an existing resource. These methods typically return the same object type as the parent, allowing you to chain additional configuration calls.
Important
When using Add methods, make sure to pass the correct resource object to your client integration. Passing the wrong object can result in misconfigured connections or runtime errors.
Consider this code:
var serviceBus = builder.AddAzureServiceBus(name: "serviceBus")
.AddServiceBusTopic(name: "messagetopic");
var apiService = builder.AddProject<Projects.servicebusexp_ApiService>("apiservice")
.WithHttpHealthCheck("/health")
.WithReference(serviceBus);
// The serviceBus is an IResourceBuilder<AzureServiceBusTopicResource> type
You may expect serviceBus to represent the Azure Service Bus resource but in fact, because you called AddServiceBusTopic on the same line, serviceBus is an Azure Service Bus topic resource. To avoid this result, call AddServiceBusTopic on a separate line:
var serviceBus = builder.AddAzureServiceBus(name: "serviceBus");
var topic = serviceBus.AddServiceBusTopic(name: "messagetopic");
var apiService = builder.AddProject<Projects.servicebusexp_ApiService>("apiservice")
.WithHttpHealthCheck("/health")
.WithReference(serviceBus);
// The serviceBus is an IResourceBuilder<AzureServiceBusResource> type
Now, you can choose to pass the resource that consuming project needs. Either, as in the example, the Service Bus resource or the topic resource.
This distinction helps you model your application's infrastructure accurately and ensures that client integrations receive the correct connection information.
Versioning considerations
Hosting and client integrations are updated each release to target the latest stable versions of dependent resources. When container images are updated with new image versions, the hosting integrations update to these new versions. Similarly, when a new NuGet version is available for a dependent client library, the corresponding client integration updates to the new version. This ensures the latest features and security updates are available to applications. The Aspire update type (major, minor, patch) doesn't necessarily indicate the type of update in dependent resources. For example, a new major version of a dependent resource may be updated in an Aspire patch release, if necessary.
When major breaking changes happen in dependent resources, integrations may temporarily split into version-dependent packages to ease updating across the breaking change. For more information, see the first example of such a breaking change.
Official integrations
Aspire provides many integrations to help you build cloud-native applications. These integrations are designed to work seamlessly with the Aspire AppHost and client libraries. The following sections detail cloud-agnostic, Azure-specific, Amazon Web Services (AWS), and Community Toolkit integrations.
Cloud-agnostic integrations
The following section details cloud-agnostic Aspire integrations with links to their respective docs and NuGet packages, and provides a brief description of each integration.
For more information on working with Aspire integrations in Visual Studio, see Visual Studio tooling.
Azure integrations
Azure integrations configure applications to use Azure resources. These hosting integrations are available in the Aspire.Hosting.Azure.* NuGet packages, while their client integrations are available in the Aspire.* NuGet packages:
Amazon Web Services (AWS) hosting integrations
| Integration docs and NuGet packages | Description |
|---|---|
| - Learn more: π AWS Hosting - Hosting: π¦ Aspire.Hosting.AWS - Client: N/A |
A library for modeling AWS resources. |
For more information, see GitHub: Aspire.Hosting.AWS library.
Kubernetes hosting integrations
| Integration docs and NuGet packages | Description |
|---|---|
| - Learn more: π Kubernetes hosting - Hosting: π¦ Aspire.Hosting.Kubernetes - Client: N/A |
A library for generating Kubernetes deployment manifests from your .NET Aspire application model. |
Community Toolkit integrations
Note
The Community Toolkit integrations are community-driven and maintained by the Aspire community. These integrations are not officially supported by the Aspire team.
| Integration docs and NuGet packages | Description |
|---|---|
| - Learn More: π Bun hosting - Hosting: π¦ CommunityToolkit.Aspire.Hosting.Bun - Client: N/A |
A hosting integration for Bun apps. |
| - Learn More: π Deno hosting - Hosting: π¦ CommunityToolkit.Aspire.Hosting.Deno - Client: N/A |
A hosting integration for Deno apps. |
| - Learn More: π Go hosting - Hosting: π¦ CommunityToolkit.Aspire.Hosting.Golang - Client: N/A |
A hosting integration for Go apps. |
| - Learn More: π Java/Spring hosting - Hosting: π¦ CommunityToolkit.Aspire.Hosting.Java - Client: N/A |
A integration for running Java code in Aspire either using the local JDK or using a container. |
| - Learn More: π Node.js hosting extensions - Hosting: π¦ CommunityToolkit.Aspire.Hosting.NodeJs.Extensions - Client: N/A |
An integration that contains some additional extensions for running Node.js applications |
| - Learn More: π Ollama - Hosting: π¦ CommunityToolkit.Aspire.Hosting.Ollama - Client: π¦ Aspire.CommunitToolkit.OllamaSharp |
An Aspire component leveraging the Ollama container with support for downloading a model on startup. |
| - Learn More: π Meilisearch hosting - Hosting: π¦ CommunityToolkit.Aspire.Hosting.Meilisearch - Client: π¦ Aspire.CommunitToolkit.Meilisearch |
An Aspire component leveraging the Meilisearch container. |
| - Learn More: π Rust hosting - Hosting: π¦ CommunityToolkit.Aspire.Hosting.Rust - Client: N/A |
A hosting integration for Rust apps. |
| - Learn More: π SQL Database projects hosting - Hosting: π¦ CommunityToolkit.Aspire.Hosting.SqlDatabaseProjects - Client: N/A |
An Aspire hosting integration for SQL Database Projects. |
| - Learn More: π RavenDB - Hosting: π¦ CommunityToolkit.Aspire.Hosting.RavenDB - Client: π¦ Aspire.CommunityToolkit.RavenDB.Client |
An Aspire component leveraging the RavenDB container. |
For more information, see Aspire Community Toolkit.