diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index 146dfa34c3..db84a9b9f1 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -52,6 +52,17 @@ updates:
dotnet:
patterns:
- "*" # Prefer a single PR per solution update.
+ - package-ecosystem: "nuget"
+ directory: "/docs/community-toolkit/snippets/Dapr" #Dapr.sln
+ schedule:
+ interval: "weekly"
+ day: "wednesday"
+ open-pull-requests-limit: 5
+ groups:
+ # Group .NET updates together for solutions.
+ dotnet:
+ patterns:
+ - "*" # Prefer a single PR per solution update.
- package-ecosystem: "nuget"
directory: "/docs/database/snippets/cosmos-db" #AspireApp.sln
schedule:
@@ -130,7 +141,7 @@ updates:
patterns:
- "*" # Prefer a single PR per solution update.
- package-ecosystem: "nuget"
- directory: "/docs/frameworks/snippets/Dapr" #Dapr.sln
+ directory: "/docs/frameworks/snippets/Orleans" #OrleansClientServer.sln
schedule:
interval: "weekly"
day: "wednesday"
@@ -141,7 +152,7 @@ updates:
patterns:
- "*" # Prefer a single PR per solution update.
- package-ecosystem: "nuget"
- directory: "/docs/frameworks/snippets/Orleans" #OrleansClientServer.sln
+ directory: "/docs/fundamentals/dashboard/automation/aspire-dashboard" #aspire-dashboard.sln
schedule:
interval: "weekly"
day: "wednesday"
@@ -152,7 +163,7 @@ updates:
patterns:
- "*" # Prefer a single PR per solution update.
- package-ecosystem: "nuget"
- directory: "/docs/fundamentals/dashboard/automation/aspire-dashboard" #aspire-dashboard.sln
+ directory: "/docs/fundamentals/dashboard/snippets/BrowserTelemetry" #BrowserTelemetry.sln
schedule:
interval: "weekly"
day: "wednesday"
@@ -163,7 +174,7 @@ updates:
patterns:
- "*" # Prefer a single PR per solution update.
- package-ecosystem: "nuget"
- directory: "/docs/fundamentals/dashboard/snippets/BrowserTelemetry" #BrowserTelemetry.sln
+ directory: "/docs/fundamentals/dashboard/snippets/DisableAI/AspireApp" #AspireApp.sln
schedule:
interval: "weekly"
day: "wednesday"
@@ -470,6 +481,17 @@ updates:
dotnet:
patterns:
- "*" # Prefer a single PR per project update.
+ - package-ecosystem: "nuget"
+ directory: "/docs/azure/snippets/acr/AspireAcr.AppHost/AspireAcr.AppHost" #AspireAcr.AppHost.csproj
+ schedule:
+ interval: "weekly"
+ day: "wednesday"
+ open-pull-requests-limit: 5
+ groups:
+ # Group .NET updates together for projects.
+ dotnet:
+ patterns:
+ - "*" # Prefer a single PR per project update.
- package-ecosystem: "nuget"
directory: "/docs/azure/snippets/bicep/AppHost.Bicep" #AppHost.Bicep.csproj
schedule:
@@ -492,6 +514,39 @@ updates:
dotnet:
patterns:
- "*" # Prefer a single PR per project update.
+ - package-ecosystem: "nuget"
+ directory: "/docs/community-toolkit/snippets/Dapr/Dapr.AppHost" #Dapr.AppHost.csproj
+ schedule:
+ interval: "weekly"
+ day: "wednesday"
+ open-pull-requests-limit: 5
+ groups:
+ # Group .NET updates together for projects.
+ dotnet:
+ patterns:
+ - "*" # Prefer a single PR per project update.
+ - package-ecosystem: "nuget"
+ directory: "/docs/community-toolkit/snippets/Dapr/Dapr.ServiceDefaults" #Dapr.ServiceDefaults.csproj
+ schedule:
+ interval: "weekly"
+ day: "wednesday"
+ open-pull-requests-limit: 5
+ groups:
+ # Group .NET updates together for projects.
+ dotnet:
+ patterns:
+ - "*" # Prefer a single PR per project update.
+ - package-ecosystem: "nuget"
+ directory: "/docs/community-toolkit/snippets/Dapr/Dapr.Web" #Dapr.Web.csproj
+ schedule:
+ interval: "weekly"
+ day: "wednesday"
+ open-pull-requests-limit: 5
+ groups:
+ # Group .NET updates together for projects.
+ dotnet:
+ patterns:
+ - "*" # Prefer a single PR per project update.
- package-ecosystem: "nuget"
directory: "/docs/database/snippets/cosmos-db/AspireApp.ApiService" #AspireApp.ApiService.csproj
schedule:
@@ -757,7 +812,7 @@ updates:
patterns:
- "*" # Prefer a single PR per project update.
- package-ecosystem: "nuget"
- directory: "/docs/frameworks/snippets/Dapr/Dapr.AppHost" #Dapr.AppHost.csproj
+ directory: "/docs/frameworks/snippets/Orleans/OrleansAppHost" #OrleansAppHost.csproj
schedule:
interval: "weekly"
day: "wednesday"
@@ -768,7 +823,7 @@ updates:
patterns:
- "*" # Prefer a single PR per project update.
- package-ecosystem: "nuget"
- directory: "/docs/frameworks/snippets/Dapr/Dapr.ServiceDefaults" #Dapr.ServiceDefaults.csproj
+ directory: "/docs/frameworks/snippets/Orleans/OrleansClient" #OrleansClient.csproj
schedule:
interval: "weekly"
day: "wednesday"
@@ -779,7 +834,7 @@ updates:
patterns:
- "*" # Prefer a single PR per project update.
- package-ecosystem: "nuget"
- directory: "/docs/frameworks/snippets/Dapr/Dapr.Web" #Dapr.Web.csproj
+ directory: "/docs/frameworks/snippets/Orleans/OrleansContracts" #OrleansContracts.csproj
schedule:
interval: "weekly"
day: "wednesday"
@@ -790,7 +845,7 @@ updates:
patterns:
- "*" # Prefer a single PR per project update.
- package-ecosystem: "nuget"
- directory: "/docs/frameworks/snippets/Orleans/OrleansAppHost" #OrleansAppHost.csproj
+ directory: "/docs/frameworks/snippets/Orleans/OrleansServer" #OrleansServer.csproj
schedule:
interval: "weekly"
day: "wednesday"
@@ -801,7 +856,7 @@ updates:
patterns:
- "*" # Prefer a single PR per project update.
- package-ecosystem: "nuget"
- directory: "/docs/frameworks/snippets/Orleans/OrleansClient" #OrleansClient.csproj
+ directory: "/docs/frameworks/snippets/Orleans/OrleansServiceDefaults" #OrleansServiceDefaults.csproj
schedule:
interval: "weekly"
day: "wednesday"
@@ -812,7 +867,7 @@ updates:
patterns:
- "*" # Prefer a single PR per project update.
- package-ecosystem: "nuget"
- directory: "/docs/frameworks/snippets/Orleans/OrleansContracts" #OrleansContracts.csproj
+ directory: "/docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture" #Aspire.Dashboard.ScreenCapture.csproj
schedule:
interval: "weekly"
day: "wednesday"
@@ -823,7 +878,7 @@ updates:
patterns:
- "*" # Prefer a single PR per project update.
- package-ecosystem: "nuget"
- directory: "/docs/frameworks/snippets/Orleans/OrleansServer" #OrleansServer.csproj
+ directory: "/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.ApiService" #AspireSample.ApiService.csproj
schedule:
interval: "weekly"
day: "wednesday"
@@ -834,7 +889,7 @@ updates:
patterns:
- "*" # Prefer a single PR per project update.
- package-ecosystem: "nuget"
- directory: "/docs/frameworks/snippets/Orleans/OrleansServiceDefaults" #OrleansServiceDefaults.csproj
+ directory: "/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.AppHost" #AspireSample.AppHost.csproj
schedule:
interval: "weekly"
day: "wednesday"
@@ -845,7 +900,7 @@ updates:
patterns:
- "*" # Prefer a single PR per project update.
- package-ecosystem: "nuget"
- directory: "/docs/fundamentals/dashboard/automation/aspire-dashboard/Aspire.Dashboard.ScreenCapture" #Aspire.Dashboard.ScreenCapture.csproj
+ directory: "/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.ServiceDefaults" #AspireSample.ServiceDefaults.csproj
schedule:
interval: "weekly"
day: "wednesday"
@@ -856,7 +911,7 @@ updates:
patterns:
- "*" # Prefer a single PR per project update.
- package-ecosystem: "nuget"
- directory: "/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.ApiService" #AspireSample.ApiService.csproj
+ directory: "/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web" #AspireSample.Web.csproj
schedule:
interval: "weekly"
day: "wednesday"
@@ -867,7 +922,7 @@ updates:
patterns:
- "*" # Prefer a single PR per project update.
- package-ecosystem: "nuget"
- directory: "/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.AppHost" #AspireSample.AppHost.csproj
+ directory: "/docs/fundamentals/dashboard/snippets/BrowserTelemetry/BrowserTelemetry.AppHost" #BrowserTelemetry.AppHost.csproj
schedule:
interval: "weekly"
day: "wednesday"
@@ -878,7 +933,7 @@ updates:
patterns:
- "*" # Prefer a single PR per project update.
- package-ecosystem: "nuget"
- directory: "/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.ServiceDefaults" #AspireSample.ServiceDefaults.csproj
+ directory: "/docs/fundamentals/dashboard/snippets/BrowserTelemetry/BrowserTelemetry.ServiceDefaults" #BrowserTelemetry.ServiceDefaults.csproj
schedule:
interval: "weekly"
day: "wednesday"
@@ -889,7 +944,7 @@ updates:
patterns:
- "*" # Prefer a single PR per project update.
- package-ecosystem: "nuget"
- directory: "/docs/fundamentals/dashboard/automation/aspire-dashboard/AspireSample/AspireSample.Web" #AspireSample.Web.csproj
+ directory: "/docs/fundamentals/dashboard/snippets/DisableAI/AspireApp/AspireApp.AppHost" #AspireApp.AppHost.csproj
schedule:
interval: "weekly"
day: "wednesday"
@@ -900,7 +955,7 @@ updates:
patterns:
- "*" # Prefer a single PR per project update.
- package-ecosystem: "nuget"
- directory: "/docs/fundamentals/dashboard/snippets/BrowserTelemetry/BrowserTelemetry.AppHost" #BrowserTelemetry.AppHost.csproj
+ directory: "/docs/fundamentals/dashboard/snippets/DisableAI/AspireApp/AspireApp.ServiceDefaults" #AspireApp.ServiceDefaults.csproj
schedule:
interval: "weekly"
day: "wednesday"
@@ -911,7 +966,7 @@ updates:
patterns:
- "*" # Prefer a single PR per project update.
- package-ecosystem: "nuget"
- directory: "/docs/fundamentals/dashboard/snippets/BrowserTelemetry/BrowserTelemetry.ServiceDefaults" #BrowserTelemetry.ServiceDefaults.csproj
+ directory: "/docs/fundamentals/dashboard/snippets/DisableAI/AspireApp/AspireApp.Web" #AspireApp.Web.csproj
schedule:
interval: "weekly"
day: "wednesday"
diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml
index c846e6023e..064b049b15 100644
--- a/.github/workflows/scorecards.yml
+++ b/.github/workflows/scorecards.yml
@@ -71,6 +71,6 @@ jobs:
# Upload the results to GitHub's code scanning dashboard.
- name: "Upload to code-scanning"
- uses: github/codeql-action/upload-sarif@60168efe1c415ce0f5521ea06d5c2062adbeed1b # v3.28.17
+ uses: github/codeql-action/upload-sarif@ff0a06e83cb2de871e5a09832bc6a81e7276941f # v3.28.18
with:
sarif_file: results.sarif
diff --git a/docs/azure/snippets/aca/AspireAca.AppHost/AspireApp.AppHost/AspireApp.AppHost.csproj b/docs/azure/snippets/aca/AspireAca.AppHost/AspireApp.AppHost/AspireApp.AppHost.csproj
index d859be38b8..e363ceebe3 100644
--- a/docs/azure/snippets/aca/AspireAca.AppHost/AspireApp.AppHost/AspireApp.AppHost.csproj
+++ b/docs/azure/snippets/aca/AspireAca.AppHost/AspireApp.AppHost/AspireApp.AppHost.csproj
@@ -12,8 +12,8 @@
-
-
+
+
diff --git a/docs/azure/snippets/acr/AspireAcr.AppHost/AspireAcr.AppHost/AspireAcr.AppHost.csproj b/docs/azure/snippets/acr/AspireAcr.AppHost/AspireAcr.AppHost/AspireAcr.AppHost.csproj
index 20092aa8d7..68737842d3 100644
--- a/docs/azure/snippets/acr/AspireAcr.AppHost/AspireAcr.AppHost/AspireAcr.AppHost.csproj
+++ b/docs/azure/snippets/acr/AspireAcr.AppHost/AspireAcr.AppHost/AspireAcr.AppHost.csproj
@@ -12,9 +12,9 @@
-
-
-
+
+
+
diff --git a/docs/azure/snippets/bicep/AppHost.Bicep/AppHost.Bicep.csproj b/docs/azure/snippets/bicep/AppHost.Bicep/AppHost.Bicep.csproj
index 5260b3b39c..c1695d2946 100644
--- a/docs/azure/snippets/bicep/AppHost.Bicep/AppHost.Bicep.csproj
+++ b/docs/azure/snippets/bicep/AppHost.Bicep/AppHost.Bicep.csproj
@@ -8,8 +8,8 @@
5e45e8bd-353b-48d8-ac57-a89e5ee3f8ec
-
-
+
+
diff --git a/docs/azure/snippets/bicep/WebHook.Api/WebHook.Api.csproj b/docs/azure/snippets/bicep/WebHook.Api/WebHook.Api.csproj
index f70d6f1892..e5dc760136 100644
--- a/docs/azure/snippets/bicep/WebHook.Api/WebHook.Api.csproj
+++ b/docs/azure/snippets/bicep/WebHook.Api/WebHook.Api.csproj
@@ -8,7 +8,7 @@
-
+
diff --git a/docs/community-toolkit/overview.md b/docs/community-toolkit/overview.md
index b293294e77..74a732391b 100644
--- a/docs/community-toolkit/overview.md
+++ b/docs/community-toolkit/overview.md
@@ -48,6 +48,9 @@ The community toolkit is a growing project, publishing a set of NuGet packages.
- The [SQLite](https://www.sqlite.org/index.html) integration provides support for hosting SQLite databases.
- [π .NET Aspire SQLite hosting integration](sqlite.md#hosting-integration)
- [π¦ CommunityToolkit.Aspire.Hosting.SQLite](https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.SQLite).
+- The [RavenDB](https://ravendb.net/) integration enables hosting RavenDB containers.
+ - [π .NET Aspire RavenDB hosting integration](https://github.com/CommunityToolkit/Aspire/tree/main/src/CommunityToolkit.Aspire.Hosting.RavenDB).
+ - [π¦ CommunityToolkit.Aspire.Hosting.RavenDB](https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.RavenDB).
### Client integrations
@@ -65,6 +68,9 @@ The following client integrations are available in the toolkit:
- The [SQLite Entity Framework](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Sqlite) integration provides support for hosting SQLite databases with Entity Framework.
- [π .NET Aspire SQLite EF hosting integration](sqlite-entity-framework-integration.md#client-integration)
- [π¦ CommunityToolkit.Aspire.Microsoft.EntityFrameworkCore.Sqlite](https://nuget.org/packages/CommunityToolkit.Aspire.Microsoft.EntityFrameworkCore.Sqlite).
+- **RavenDB.Client** is a .NET client for the RavenDB Client API:
+ - [π .NET Aspire RavenDB client integration](https://github.com/CommunityToolkit/Aspire/tree/main/src/CommunityToolkit.Aspire.RavenDB.Client)
+ - [π¦ CommunityToolkit.Aspire.RavenDB.Client](https://nuget.org/packages/CommunityToolkit.Aspire.RavenDB.Client)
> [!TIP]
> Always check the [GitHub repository][github-repo] for the most up-to-date information on the toolkit.
diff --git a/docs/community-toolkit/ravendb.md b/docs/community-toolkit/ravendb.md
new file mode 100644
index 0000000000..879c29c207
--- /dev/null
+++ b/docs/community-toolkit/ravendb.md
@@ -0,0 +1,298 @@
+---
+title: .NET Aspire Community Toolkit RavenDB integration
+author: shiranshalom
+description: Learn how to use the .NET Aspire RavenDB hosting and client integrations to run a RavenDB container and access it via the RavenDB client.
+ms.date: 5/27/2025
+---
+
+# .NET Aspire Community Toolkit RavenDB integration
+
+[!INCLUDE [includes-hosting-and-client](../includes/includes-hosting-and-client.md)]
+
+[!INCLUDE [banner](includes/banner.md)]
+
+[RavenDB](https://ravendb.net/) is a high-performance, open-source NoSQL database designed for fast, efficient, and scalable data storage. It supports advanced features like ACID transactions, distributed data replication, and time-series data management, making it an excellent choice for modern application development. The .NET Aspire RavenDB integration enables you to connect to existing RavenDB instances or create new instances from .NET using the [docker.io/library/ravendb container image](https://hub.docker.com/r/ravendb/ravendb).
+
+## Hosting integration
+
+The RavenDB hosting integration models the server as the `RavenDBServerResource` type and the database as the `RavenDBDatabaseResource` type. To access these types and APIs, add the [π¦ CommunityToolkit.Aspire.Hosting.RavenDB](https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.RavenDB) NuGet package in the [app host](xref:dotnet/aspire/app-host) project.
+
+### [.NET CLI](#tab/dotnet-cli)
+
+```dotnetcli
+dotnet add package CommunityToolkit.Aspire.Hosting.RavenDB
+```
+
+### [PackageReference](#tab/package-reference)
+
+```xml
+
+```
+
+---
+
+For more information, see [dotnet add package](/dotnet/core/tools/dotnet-add-package) or [Manage package dependencies in .NET applications](/dotnet/core/tools/dependencies).
+
+### Add RavenDB server resource and database resource
+
+To set up RavenDB in your app host project, call one of the `AddRavenDB` extension methods on the `builder` instance to add a RavenDB server resource, then call `AddDatabase` on the server resource to add a database. Hereβs an example:
+
+```csharp
+var builder = DistributedApplication.CreateBuilder(args);
+
+var ravenServer = builder.AddRavenDB("ravenServer");
+var ravendb = ravenServer.AddDatabase("ravendb");
+
+builder.AddProject()
+ .WithReference(ravendb)
+ .WaitFor(ravendb);
+
+// After adding all resources, build and run the app...
+```
+
+> [!IMPORTANT]
+> A valid RavenDB license is required. If you donβt have one yet, you can request a free Community license [here](https://ravendb.net/license/request/community).
+
+When .NET Aspire adds a container image to the app host, as shown in the preceding example with the `docker.io/ravendb/ravendb` image, it creates a new RavenDB instance on your local machine. A reference to your RavenDB database resource (the `ravendb` variable) is added to the `ExampleProject`.
+
+For more information, see [Container resource lifecycle](../fundamentals/orchestrate-resources.md#container-resource-lifecycle).
+
+### Add RavenDB server resource with data volume
+
+To add a data volume to the RavenDB server resource, call the `Aspire.Hosting.RavenDBBuilderExtensions.WithDataVolume` method on the RavenDB server resource:
+
+```csharp
+var builder = DistributedApplication.CreateBuilder(args);
+
+var ravenServer = builder.AddRavenDB("ravenServer")
+ .WithDataVolume();
+
+builder.AddProject()
+ .WithReference(ravenServer)
+ .WaitFor(ravenServer);
+```
+
+The data volume remains available after the container's lifecycle ends, preserving RavenDB data. The data volume is mounted at the `/var/lib/ravendb/data` path in the RavenDB container and when a `name` parameter isn't provided, the name is generated at random. For more information on data volumes and details on why they're preferred over [bind mounts](#add-ravendb-server-resource-with-data-bind-mount), see [Docker docs: Volumes](https://docs.docker.com/engine/storage/volumes).
+
+### Add RavenDB server resource with data bind mount
+
+To add a data bind mount to the RavenDB server resource, call the `Aspire.Hosting.RavenDBBuilderExtensions.WithDataBindMount` method:
+
+```csharp
+var builder = DistributedApplication.CreateBuilder(args);
+
+var ravenServer = builder.AddRavenDB("ravenServer")
+ .WithDataBindMount(source: @"C:\RavenDb\Data");
+
+builder.AddProject()
+ .WithReference(ravenServer)
+ .WaitFor(ravenServer);
+```
+
+[!INCLUDE [data-bind-mount-vs-volumes](../includes/data-bind-mount-vs-volumes.md)]
+
+Data bind mounts rely on the host machine's filesystem to persist the RavenDB data across container restarts. The data bind mount is mounted at the `C:\RavenDb\Data` on Windows (or `/RavenDB/Data` on Unix) path on the host machine in the RavenDB container. For more information on data bind mounts, see [Docker docs: Bind mounts](https://docs.docker.com/engine/storage/bind-mounts).
+
+### Add secured RavenDB server resource
+
+To create a new secured RavenDB instance using settings from a pre-configured _settings.json_ file or a self-signed certificate, use the `RavenDBServerSettings.Secured` method or `RavenDBServerSettings.SecuredWithLetsEncrypt` for Letβs Encrypt configurations. These methods allow you to specify the domain URL, certificate details, and additional server settings.
+Hereβs an example of how to add a secured RavenDB server resource using Let's Encrypt:
+
+```csharp
+var builder = DistributedApplication.CreateBuilder(args);
+
+var serverSettings = RavenDBServerSettings.SecuredWithLetsEncrypt(
+ domainUrl: "https://mycontainer.development.run",
+ certificatePath: "/etc/ravendb/security/cluster.server.certificate.mycontainer.pfx");
+
+var ravendb = builder.AddRavenDB("ravenSecuredServer", serverSettings)
+ .WithBindMount("C:/RavenDB/Server/Security", "/etc/ravendb/security", false)
+ .AddDatabase("ravendbSecured");
+
+builder.AddProject()
+ .WithReference(ravendb)
+ .WaitFor(ravendb);
+```
+
+> [!IMPORTANT]
+> Ensure the certificate path is accessible to the container by bind-mounting it to `/etc/ravendb/security`.
+
+### Hosting integration health checks
+
+The RavenDB hosting integration automatically adds a health check for the RavenDB server resource, verifying that the server is running and reachable.
+
+The hosting integration relies on the [π¦ AspNetCore.HealthChecks.RavenDB](https://www.nuget.org/packages/AspNetCore.HealthChecks.RavenDB) NuGet package.
+
+## Client integration
+
+To get started with the .NET Aspire RavenDB client integration, install the [π¦ CommunityToolkit.Aspire.RavenDB.Client](https://nuget.org/packages/CommunityToolkit.Aspire.RavenDB.Client) NuGet package in the client-consuming project, that is, the project for the application that uses the RavenDB client. The RavenDB client integration registers an [IDocumentStore](https://ravendb.net/docs/article-page/6.2/csharp/client-api/what-is-a-document-store) instance, which serves as the entry point for interacting with the RavenDB server resource or an existing RavenDB instance. If your app host includes RavenDB database resources, the associated [IDocumentSession](https://ravendb.net/docs/article-page/6.2/csharp/client-api/session/what-is-a-session-and-how-does-it-work) and [IAsyncDocumentSession](https://ravendb.net/docs/article-page/6.2/csharp/client-api/session/what-is-a-session-and-how-does-it-work) instances are also registered for dependency injection.
+
+### [.NET CLI](#tab/dotnet-cli)
+
+```dotnetcli
+dotnet add package CommunityToolkit.Aspire.RavenDB.Client
+```
+
+### [PackageReference](#tab/package-reference)
+
+```xml
+
+```
+
+---
+
+### Add RavenDB client
+
+In the _:::no-loc text="Program.cs":::_ file of your client-consuming project, call the `Microsoft.Extensions.Hosting.RavenDBClientExtension.AddRavenDBClient` extension method on any to register a `IDocumentStore` for use via the dependency injection container. The method takes a connection name parameter.
+
+```csharp
+builder.AddRavenDBClient(connectionName: "ravendb");
+```
+
+> [!TIP]
+> The `connectionName` parameter must match the name used when adding the RavenDB server resource (or the database resource, if provided) in the app host project. In other words, when you call `AddDatabase` and provide a name of `ravendb`, that same name should be used when calling `AddRavenDBClient`. For more information, see [Add RavenDB server resource and database resource](#add-ravendb-server-resource-and-database-resource).
+
+You can then retrieve the `IDocumentStore` instance using dependency injection. For example, to retrieve the client from an example service:
+
+```csharp
+public class ExampleService(IDocumentStore client)
+{
+ // Use client...
+}
+```
+
+#### Add RavenDB client using `RavenDBClientSettings`
+
+The `AddRavenDBClient` method provides overloads that accept a `RavenDBClientSettings` object. This allows you to use the client integration independently of the hosting integration.
+The `RavenDBClientSettings` class contains the parameters needed to establish a connection. More details about the available configuration options can be found in the [Configuration options](#configuration-options) section below.
+
+Hereβs an example:
+
+```csharp
+var settings = new RavenDBClientSettings
+{
+ Urls = new[] { serverUrl },
+ DatabaseName = myDatabaseName,
+ Certificate = myCertificate
+};
+
+builder.AddRavenDBClient(settings: settings);
+```
+
+> [!Note]
+> These methods are ideal for connecting to an existing RavenDB instance without relying on the hosting integration. This is particularly useful if you already have a standalone instance running (e.g., in the cloud) and want to connect to it using its specific details.
+
+After registration, you can retrieve the `IDocumentStore` instance and its associated `IDocumentSession` and `IAsyncDocumentSession` instances as follows:
+
+```csharp
+var documentStore = host.Services.GetRequiredService();
+var session = host.Services.GetRequiredService();
+var asyncSession = host.Services.GetRequiredService();
+```
+
+### Add keyed RavenDB client
+
+If your application requires multiple `IDocumentStore` instances with different connection configurations, you can register keyed RavenDB clients using the `Microsoft.Extensions.Hosting.RavenDBClientExtension.AddKeyedRavenDBClient` extension method:
+
+```csharp
+builder.AddKeyedRavenDBClient(serviceKey: "production", connectionName: "production");
+builder.AddKeyedRavenDBClient(serviceKey: "testing", connectionName: "testing");
+```
+
+Then you can retrieve the `IDocumentStore` instances using dependency injection. For example, to retrieve a connection from an example service:
+
+```csharp
+public class ExampleService(
+ [FromKeyedServices("production")] IDocumentStore production,
+ [FromKeyedServices("testing")] IDocumentStore testing)
+{
+ // Use databases...
+}
+```
+
+For more information on keyed services, see [.NET dependency injection: Keyed services](/dotnet/core/extensions/dependency-injection#keyed-services).
+
+### Configuration
+
+The .NET Aspire RavenDB Client integration provides multiple configuration approaches and options to meet the requirements and conventions of your project.
+
+#### Use a connection string
+
+When using a connection string from the `ConnectionStrings` configuration section, provide the name of the connection string when calling `builder.AddRavenDBClient`:
+
+```csharp
+builder.AddRavenDBClient("ravendb");
+```
+
+The connection string will be retrieved from the `ConnectionStrings` configuration section:
+
+```json
+{
+ "ConnectionStrings": {
+ "ravendb": "Url=http://localhost:8080/;Database=ravendb"
+ }
+}
+```
+
+#### Use configuration providers
+
+The .NET Aspire RavenDB integration supports . It loads the `RavenDBClientSettings` from the configuration using the `Aspire:RavenDB:Client` key. Consider the following example _appsettings.json_ that configures some of the options:
+
+```json
+{
+ "Aspire": {
+ "RavenDB": {
+ "Client": {
+ "ConnectionString": "URL=http://localhost:8080;Database=ravendb",
+ "DisableHealthChecks": false,
+ "HealthCheckTimeout": 10000,
+ "DisableTracing": false
+ }
+ }
+ }
+}
+```
+
+#### Use inline configurations
+
+You can also pass the `Action` delegate to set up some or all the options inline:
+
+```csharp
+builder.AddRavenDBClient(connectionName: "ravendb", configureSettings:
+ settings =>
+ {
+ settings.CreateDatabase = true;
+ settings.Certificate = myCertificate;
+ settings.DisableTracing = true;
+ }
+```
+
+### Configuration options
+
+The .NET Aspire RavenDB client integration provides flexible configuration options through the `RavenDBClientSettings` class, enabling you to tailor the connection to your project's requirements. Here are the key properties:
+
+| Name | Description |
+|-----------------------|---------------------------------------------------------------------------------------|
+| `Urls` | The connection URLs (`string[]`) of the RavenDB cluster. |
+| `DatabaseName` | Optional. The name of the RavenDB database to create or connect to. |
+| `CertificatePath` | Optional. The path to the certificate for secured RavenDB instances. |
+| `CertificatePassword` | Optional. The password for the certificate, if required. |
+| `Certificate` | Optional. An `X509Certificate2` instance for secured RavenDB instances. |
+| `CreateDatabase` | A boolean value that indicates whether a new database should be created if it does not already exist. |
+| `ModifyDocumentStore` | Optional. An `Action` to modify the `IDocumentStore` instance. |
+| `DisableHealthChecks` | A boolean value that indicates whether the database health check is disabled or not. |
+| `HealthCheckTimeout` | An `int?` value that indicates the RavenDB health check timeout in milliseconds. |
+| `DisableTracing` | A boolean value that indicates whether the OpenTelemetry tracing is disabled or not. |
+
+#### Client integration health checks
+
+The .NET Aspire RavenDB client integration uses the configured client to perform a `IsHealthyAsync`. If the result is `true`, the health check is considered healthy, otherwise it's unhealthy. Likewise, if there's an exception, the health check is considered unhealthy with the error propagating through the health check failure.
+
+## See also
+
+- [RavenDB](https://ravendb.net/)
+- [Running in a Docker Container](https://ravendb.net/docs/article-page/6.2/csharp/start/installation/running-in-docker-container)
+- [RavenDB Code](https://github.com/ravendb/ravendb)
+- [.NET Aspire Community Toolkit GitHub repo](https://github.com/CommunityToolkit/Aspire)
diff --git a/docs/community-toolkit/snippets/Dapr/Dapr.AppHost/Dapr.AppHost.csproj b/docs/community-toolkit/snippets/Dapr/Dapr.AppHost/Dapr.AppHost.csproj
index 5ddb640898..13890c4cd6 100644
--- a/docs/community-toolkit/snippets/Dapr/Dapr.AppHost/Dapr.AppHost.csproj
+++ b/docs/community-toolkit/snippets/Dapr/Dapr.AppHost/Dapr.AppHost.csproj
@@ -12,7 +12,7 @@
-
-
+
+
\ No newline at end of file
diff --git a/docs/community-toolkit/snippets/Dapr/Dapr.ServiceDefaults/Dapr.ServiceDefaults.csproj b/docs/community-toolkit/snippets/Dapr/Dapr.ServiceDefaults/Dapr.ServiceDefaults.csproj
index 9ecadf9806..07608ebb02 100644
--- a/docs/community-toolkit/snippets/Dapr/Dapr.ServiceDefaults/Dapr.ServiceDefaults.csproj
+++ b/docs/community-toolkit/snippets/Dapr/Dapr.ServiceDefaults/Dapr.ServiceDefaults.csproj
@@ -10,8 +10,8 @@
-
-
+
+
diff --git a/docs/database/seed-database-data.md b/docs/database/seed-database-data.md
index 822b07917f..493a49b443 100644
--- a/docs/database/seed-database-data.md
+++ b/docs/database/seed-database-data.md
@@ -1,7 +1,7 @@
---
title: Seed data in a database using .NET Aspire
description: Learn about how to seed database data in .NET Aspire
-ms.date: 05/14/2025
+ms.date: 05/27/2025
ms.topic: how-to
---
@@ -32,7 +32,7 @@ By default, .NET Aspire database integrations rely on containerized databases, w
> Container hosts like Docker and Podman support volumes and bind mounts, both of which provide locations for data that persist when a container restarts. Volumes are the recommended solution, because they offer better performance, portability, and security. The container host creates and remains in control of volumes. Each volume can store data for multiple containers. Bind mounts have relatively limited functionality in comparison but enable you to access the data from the host machine.
> [!NOTE]
-> Visit the [Database Container Sample App](https://github.com/dotnet/aspire-samples/blob/main/samples/DatabaseContainers/DatabaseContainers.AppHost/Program.cs) to view the full project and file structure for each database option.
+> Visit the [Database Container Sample App](https://github.com/dotnet/aspire-samples/blob/main/samples/DatabaseContainers/DatabaseContainers.AppHost/AppHost.cs) to view the full project and file structure for each database option.
## Seed data using SQL scripts
@@ -52,9 +52,9 @@ You must ensure that this script is copied to the app host's output directory, s
Adjust the `Include` parameter to match the path to your SQL script in the project.
-Next, in the app host's *Program.cs* file, create the database and run the creation script:
+Next, in the app host's *AppHost.cs* (or *Program.cs*) file, create the database and run the creation script:
-:::code source="~/aspire-samples/samples/DatabaseContainers/DatabaseContainers.AppHost/Program.cs" range="40-49" :::
+:::code source="~/aspire-samples/samples/DatabaseContainers/DatabaseContainers.AppHost/AppHost.cs" range="40-49" :::
This code:
@@ -71,9 +71,9 @@ The following code is an example PostgreSQL script that creates and populates a
:::code source="~/aspire-samples/samples/DatabaseContainers/DatabaseContainers.ApiService/data/postgres/init.sql" :::
-In the app host's *Program.cs* file, create the database and mount the folder that contains the SQL script as a bind mount:
+In the app host's *AppHost.cs* (or *Program.cs*) file, create the database and mount the folder that contains the SQL script as a bind mount:
-:::code source="~/aspire-samples/samples/DatabaseContainers/DatabaseContainers.AppHost/Program.cs" range="3-19" :::
+:::code source="~/aspire-samples/samples/DatabaseContainers/DatabaseContainers.AppHost/AppHost.cs" range="3-19" :::
### [MySQL](#tab/mysql)
@@ -83,9 +83,9 @@ The following code is an example MySQL script that creates and populates a produ
:::code source="~/aspire-samples/samples/DatabaseContainers/DatabaseContainers.ApiService/data/mysql/init.sql" :::
-In the app host's *Program.cs* file, create the database and mount the folder that contains the SQL script as a bind mount:
+In the app host's *AppHost.cs* (or *Program.cs*) file, create the database and mount the folder that contains the SQL script as a bind mount:
-:::code source="~/aspire-samples/samples/DatabaseContainers/DatabaseContainers.AppHost/Program.cs" range="21-36" :::
+:::code source="~/aspire-samples/samples/DatabaseContainers/DatabaseContainers.AppHost/AppHost.cs" range="21-36" :::
---
@@ -96,7 +96,7 @@ You can also seed data in .NET Aspire projects using EF Core by explicitly runni
> [!IMPORTANT]
> These types of configurations should only be done during development, so make sure to add a conditional that checks your current environment context.
-Add the following code to the _:::no-loc text="Program.cs":::_ file of your **API Service** project.
+Add the following code to the _:::no-loc text="Program.cs"::: file of your **API Service** project.
### [SQL Server](#tab/sql-server)
diff --git a/docs/diagnostics/aspire003.md b/docs/diagnostics/aspire003.md
index c23c5a6cbe..14ddb48788 100644
--- a/docs/diagnostics/aspire003.md
+++ b/docs/diagnostics/aspire003.md
@@ -18,4 +18,4 @@ When using Visual Studio to code your .NET Aspire project, you must have Visual
## To correct this warning
-Upgrade Visual Studio 2022 to latest version, or at a minimum, version 17.20.
+Upgrade Visual Studio 2022 to latest version, or at a minimum, version 17.10.
diff --git a/docs/extensibility/snippets/MailDevResourceWithCredentials/MailDev.Hosting/MailDev.Hosting.csproj b/docs/extensibility/snippets/MailDevResourceWithCredentials/MailDev.Hosting/MailDev.Hosting.csproj
index 07c9cc479f..60d65b4673 100644
--- a/docs/extensibility/snippets/MailDevResourceWithCredentials/MailDev.Hosting/MailDev.Hosting.csproj
+++ b/docs/extensibility/snippets/MailDevResourceWithCredentials/MailDev.Hosting/MailDev.Hosting.csproj
@@ -7,7 +7,7 @@
-
+
diff --git a/docs/extensibility/snippets/MailDevResourceWithCredentials/MailDevResource.AppHost/MailDevResource.AppHost.csproj b/docs/extensibility/snippets/MailDevResourceWithCredentials/MailDevResource.AppHost/MailDevResource.AppHost.csproj
index 6c87e55c1f..6b967248c8 100644
--- a/docs/extensibility/snippets/MailDevResourceWithCredentials/MailDevResource.AppHost/MailDevResource.AppHost.csproj
+++ b/docs/extensibility/snippets/MailDevResourceWithCredentials/MailDevResource.AppHost/MailDevResource.AppHost.csproj
@@ -8,7 +8,7 @@
9c9bfb14-6706-4421-bc93-37cbaebe36d0
-
+
diff --git a/docs/extensibility/snippets/MailDevResourceWithCredentials/MailDevResource.NewsletterService/MailDevResource.NewsletterService.csproj b/docs/extensibility/snippets/MailDevResourceWithCredentials/MailDevResource.NewsletterService/MailDevResource.NewsletterService.csproj
index 72bb7b5b71..d14cd5f994 100644
--- a/docs/extensibility/snippets/MailDevResourceWithCredentials/MailDevResource.NewsletterService/MailDevResource.NewsletterService.csproj
+++ b/docs/extensibility/snippets/MailDevResourceWithCredentials/MailDevResource.NewsletterService/MailDevResource.NewsletterService.csproj
@@ -2,7 +2,7 @@
-
+
diff --git a/docs/extensibility/snippets/MailDevResourceWithCredentials/MailDevResource.ServiceDefaults/MailDevResource.ServiceDefaults.csproj b/docs/extensibility/snippets/MailDevResourceWithCredentials/MailDevResource.ServiceDefaults/MailDevResource.ServiceDefaults.csproj
index 3920d91222..07608ebb02 100644
--- a/docs/extensibility/snippets/MailDevResourceWithCredentials/MailDevResource.ServiceDefaults/MailDevResource.ServiceDefaults.csproj
+++ b/docs/extensibility/snippets/MailDevResourceWithCredentials/MailDevResource.ServiceDefaults/MailDevResource.ServiceDefaults.csproj
@@ -11,7 +11,7 @@
-
+
diff --git a/docs/extensibility/snippets/MailDevResourceWithCredentials/MailKit.Client/MailKit.Client.csproj b/docs/extensibility/snippets/MailDevResourceWithCredentials/MailKit.Client/MailKit.Client.csproj
index 97a4ad36df..28def9e5cd 100644
--- a/docs/extensibility/snippets/MailDevResourceWithCredentials/MailKit.Client/MailKit.Client.csproj
+++ b/docs/extensibility/snippets/MailDevResourceWithCredentials/MailKit.Client/MailKit.Client.csproj
@@ -7,7 +7,7 @@
-
+
diff --git a/docs/fundamentals/dashboard/snippets/BrowserTelemetry/BrowserTelemetry.ServiceDefaults/BrowserTelemetry.ServiceDefaults.csproj b/docs/fundamentals/dashboard/snippets/BrowserTelemetry/BrowserTelemetry.ServiceDefaults/BrowserTelemetry.ServiceDefaults.csproj
index 9ecadf9806..71f1baa7bc 100644
--- a/docs/fundamentals/dashboard/snippets/BrowserTelemetry/BrowserTelemetry.ServiceDefaults/BrowserTelemetry.ServiceDefaults.csproj
+++ b/docs/fundamentals/dashboard/snippets/BrowserTelemetry/BrowserTelemetry.ServiceDefaults/BrowserTelemetry.ServiceDefaults.csproj
@@ -11,7 +11,7 @@
-
+
diff --git a/docs/fundamentals/dashboard/snippets/DisableAI/AspireApp/AspireApp.AppHost/AspireApp.AppHost.csproj b/docs/fundamentals/dashboard/snippets/DisableAI/AspireApp/AspireApp.AppHost/AspireApp.AppHost.csproj
index c6a13230cb..9bf9eaec26 100644
--- a/docs/fundamentals/dashboard/snippets/DisableAI/AspireApp/AspireApp.AppHost/AspireApp.AppHost.csproj
+++ b/docs/fundamentals/dashboard/snippets/DisableAI/AspireApp/AspireApp.AppHost/AspireApp.AppHost.csproj
@@ -16,8 +16,8 @@
-
-
+
+
diff --git a/docs/fundamentals/dashboard/snippets/DisableAI/AspireApp/AspireApp.ServiceDefaults/AspireApp.ServiceDefaults.csproj b/docs/fundamentals/dashboard/snippets/DisableAI/AspireApp/AspireApp.ServiceDefaults/AspireApp.ServiceDefaults.csproj
index 9ecadf9806..07608ebb02 100644
--- a/docs/fundamentals/dashboard/snippets/DisableAI/AspireApp/AspireApp.ServiceDefaults/AspireApp.ServiceDefaults.csproj
+++ b/docs/fundamentals/dashboard/snippets/DisableAI/AspireApp/AspireApp.ServiceDefaults/AspireApp.ServiceDefaults.csproj
@@ -10,8 +10,8 @@
-
-
+
+
diff --git a/docs/fundamentals/dashboard/snippets/DisableAI/AspireApp/AspireApp.Web/AspireApp.Web.csproj b/docs/fundamentals/dashboard/snippets/DisableAI/AspireApp/AspireApp.Web/AspireApp.Web.csproj
index dd667752c0..d65a4bd31f 100644
--- a/docs/fundamentals/dashboard/snippets/DisableAI/AspireApp/AspireApp.Web/AspireApp.Web.csproj
+++ b/docs/fundamentals/dashboard/snippets/DisableAI/AspireApp/AspireApp.Web/AspireApp.Web.csproj
@@ -11,7 +11,7 @@
-
+
diff --git a/docs/fundamentals/integrations-overview.md b/docs/fundamentals/integrations-overview.md
index 940f3a7ce0..a2d58bc6d8 100644
--- a/docs/fundamentals/integrations-overview.md
+++ b/docs/fundamentals/integrations-overview.md
@@ -153,6 +153,7 @@ For more information, see [GitHub: Aspire.Hosting.AWS library](https://github.co
| - **Learn More**: [π Meilisearch hosting](../community-toolkit/hosting-meilisearch.md)
- **Hosting**: [π¦ CommunityToolkit.Aspire.Hosting.Meilisearch](https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.Meilisearch)
- **Client**: [π¦ Aspire.CommunitToolkit.Meilisearch](https://nuget.org/packages/CommunityToolkit.Aspire.Meilisearch) | An Aspire component leveraging the [Meilisearch](https://meilisearch.com) container. |
| - **Learn More**: [π Rust hosting](../community-toolkit/hosting-rust.md)
- **Hosting**: [π¦ CommunityToolkit.Aspire.Hosting.Rust](https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.Rust)
- **Client**: N/A | A hosting integration for Rust apps. |
| - **Learn More**: [π SQL Database projects hosting](../community-toolkit/hosting-sql-database-projects.md)
- **Hosting**: [π¦ CommunityToolkit.Aspire.Hosting.SqlDatabaseProjects](https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.SqlDatabaseProjects)
- **Client**: N/A | An Aspire hosting integration for SQL Database Projects. |
+| - **Learn More**: [π RavenDB](../community-toolkit/ravendb.md)
- **Hosting**: [π¦ CommunityToolkit.Aspire.Hosting.RavenDB](https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.RavenDB)
- **Client**: [π¦ Aspire.CommunityToolkit.RavenDB.Client](https://nuget.org/packages/CommunityToolkit.Aspire.RavenDB.Client) | An Aspire component leveraging the [RavenDB](https://ravendb.net/) container. |
For more information, see [.NET Aspire Community Toolkit](../community-toolkit/overview.md).
diff --git a/docs/fundamentals/snippets/networking/Networking.ServiceDefaults/Networking.ServiceDefaults.csproj b/docs/fundamentals/snippets/networking/Networking.ServiceDefaults/Networking.ServiceDefaults.csproj
index 3920d91222..07608ebb02 100644
--- a/docs/fundamentals/snippets/networking/Networking.ServiceDefaults/Networking.ServiceDefaults.csproj
+++ b/docs/fundamentals/snippets/networking/Networking.ServiceDefaults/Networking.ServiceDefaults.csproj
@@ -11,7 +11,7 @@
-
+
diff --git a/docs/fundamentals/snippets/params/Parameters.ApiService/Parameters.ApiService.csproj b/docs/fundamentals/snippets/params/Parameters.ApiService/Parameters.ApiService.csproj
index 773b9efabb..7253fdcdf5 100644
--- a/docs/fundamentals/snippets/params/Parameters.ApiService/Parameters.ApiService.csproj
+++ b/docs/fundamentals/snippets/params/Parameters.ApiService/Parameters.ApiService.csproj
@@ -7,7 +7,7 @@
-
+
diff --git a/docs/fundamentals/snippets/params/Parameters.AppHost/Parameters.AppHost.csproj b/docs/fundamentals/snippets/params/Parameters.AppHost/Parameters.AppHost.csproj
index cc645fba15..b7ba98c9dd 100644
--- a/docs/fundamentals/snippets/params/Parameters.AppHost/Parameters.AppHost.csproj
+++ b/docs/fundamentals/snippets/params/Parameters.AppHost/Parameters.AppHost.csproj
@@ -7,7 +7,7 @@
enable
-
+
diff --git a/docs/fundamentals/snippets/params/Parameters.ServiceDefaults/Parameters.ServiceDefaults.csproj b/docs/fundamentals/snippets/params/Parameters.ServiceDefaults/Parameters.ServiceDefaults.csproj
index c5bda0879f..8b87ec7bc0 100644
--- a/docs/fundamentals/snippets/params/Parameters.ServiceDefaults/Parameters.ServiceDefaults.csproj
+++ b/docs/fundamentals/snippets/params/Parameters.ServiceDefaults/Parameters.ServiceDefaults.csproj
@@ -12,7 +12,7 @@
-
+
diff --git a/docs/get-started/build-aspire-apps-with-nodejs.md b/docs/get-started/build-aspire-apps-with-nodejs.md
index db1c7e631e..400af05178 100644
--- a/docs/get-started/build-aspire-apps-with-nodejs.md
+++ b/docs/get-started/build-aspire-apps-with-nodejs.md
@@ -1,7 +1,7 @@
---
title: Orchestrate Node.js apps in .NET Aspire
description: Learn how to integrate Node.js and npm apps into a .NET Aspire App Host project.
-ms.date: 11/20/2024
+ms.date: 05/27/2025
---
# Orchestrate Node.js apps in .NET Aspire
@@ -119,7 +119,7 @@ To help understand how each client app resource is orchestrated, look to the app
The project file also defines a build target that ensures that the npm dependencies are installed before the app host is built. The app host code (_Program.cs_) declares the client app resources using the API.
-:::code source="~/aspire-samples/samples/AspireWithJavaScript/AspireJavaScript.AppHost/Program.cs":::
+:::code source="~/aspire-samples/samples/AspireWithJavaScript/AspireJavaScript.AppHost/AppHost.cs":::
The preceding code:
diff --git a/docs/real-time/snippets/signalr/SignalR.ApiService/SignalR.ApiService.csproj b/docs/real-time/snippets/signalr/SignalR.ApiService/SignalR.ApiService.csproj
index 2c5f48ca36..d7374a8b0f 100644
--- a/docs/real-time/snippets/signalr/SignalR.ApiService/SignalR.ApiService.csproj
+++ b/docs/real-time/snippets/signalr/SignalR.ApiService/SignalR.ApiService.csproj
@@ -11,7 +11,7 @@
-
+
diff --git a/docs/real-time/snippets/signalr/SignalR.AppHost/SignalR.AppHost.csproj b/docs/real-time/snippets/signalr/SignalR.AppHost/SignalR.AppHost.csproj
index 4d2b2924b9..59d3c6ac68 100644
--- a/docs/real-time/snippets/signalr/SignalR.AppHost/SignalR.AppHost.csproj
+++ b/docs/real-time/snippets/signalr/SignalR.AppHost/SignalR.AppHost.csproj
@@ -12,8 +12,8 @@
-
-
-
+
+
+
\ No newline at end of file
diff --git a/docs/real-time/snippets/signalr/SignalR.ServiceDefaults/SignalR.ServiceDefaults.csproj b/docs/real-time/snippets/signalr/SignalR.ServiceDefaults/SignalR.ServiceDefaults.csproj
index 3920d91222..07608ebb02 100644
--- a/docs/real-time/snippets/signalr/SignalR.ServiceDefaults/SignalR.ServiceDefaults.csproj
+++ b/docs/real-time/snippets/signalr/SignalR.ServiceDefaults/SignalR.ServiceDefaults.csproj
@@ -11,7 +11,7 @@
-
+
diff --git a/docs/snippets/azure/AppHost/AppHost.csproj b/docs/snippets/azure/AppHost/AppHost.csproj
index ed8e66cab3..59a07c5363 100644
--- a/docs/snippets/azure/AppHost/AppHost.csproj
+++ b/docs/snippets/azure/AppHost/AppHost.csproj
@@ -12,24 +12,24 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
+
+
diff --git a/docs/testing/snippets/testing/mstest/AspireApp.AppHost/AspireApp.AppHost.csproj b/docs/testing/snippets/testing/mstest/AspireApp.AppHost/AspireApp.AppHost.csproj
index 6863fd3ea4..9dc5f0cb8f 100644
--- a/docs/testing/snippets/testing/mstest/AspireApp.AppHost/AspireApp.AppHost.csproj
+++ b/docs/testing/snippets/testing/mstest/AspireApp.AppHost/AspireApp.AppHost.csproj
@@ -12,6 +12,6 @@
-
+
\ No newline at end of file
diff --git a/docs/testing/snippets/testing/mstest/AspireApp.ServiceDefaults/AspireApp.ServiceDefaults.csproj b/docs/testing/snippets/testing/mstest/AspireApp.ServiceDefaults/AspireApp.ServiceDefaults.csproj
index 9ecadf9806..71f1baa7bc 100644
--- a/docs/testing/snippets/testing/mstest/AspireApp.ServiceDefaults/AspireApp.ServiceDefaults.csproj
+++ b/docs/testing/snippets/testing/mstest/AspireApp.ServiceDefaults/AspireApp.ServiceDefaults.csproj
@@ -11,7 +11,7 @@
-
+
diff --git a/docs/testing/snippets/testing/mstest/AspireApp.Tests/AspireApp.Tests.csproj b/docs/testing/snippets/testing/mstest/AspireApp.Tests/AspireApp.Tests.csproj
index 51ebb4371f..b0a4acbdaf 100644
--- a/docs/testing/snippets/testing/mstest/AspireApp.Tests/AspireApp.Tests.csproj
+++ b/docs/testing/snippets/testing/mstest/AspireApp.Tests/AspireApp.Tests.csproj
@@ -14,8 +14,8 @@
-
-
+
+
diff --git a/docs/testing/snippets/testing/xunit/AspireApp.AppHost/AspireApp.AppHost.csproj b/docs/testing/snippets/testing/xunit/AspireApp.AppHost/AspireApp.AppHost.csproj
index 5b71334c53..e14bc7981a 100644
--- a/docs/testing/snippets/testing/xunit/AspireApp.AppHost/AspireApp.AppHost.csproj
+++ b/docs/testing/snippets/testing/xunit/AspireApp.AppHost/AspireApp.AppHost.csproj
@@ -12,6 +12,6 @@
-
+
\ No newline at end of file
diff --git a/docs/testing/snippets/testing/xunit/AspireApp.ServiceDefaults/AspireApp.ServiceDefaults.csproj b/docs/testing/snippets/testing/xunit/AspireApp.ServiceDefaults/AspireApp.ServiceDefaults.csproj
index 3920d91222..07608ebb02 100644
--- a/docs/testing/snippets/testing/xunit/AspireApp.ServiceDefaults/AspireApp.ServiceDefaults.csproj
+++ b/docs/testing/snippets/testing/xunit/AspireApp.ServiceDefaults/AspireApp.ServiceDefaults.csproj
@@ -11,7 +11,7 @@
-
+
diff --git a/docs/testing/snippets/testing/xunit/AspireApp.Tests/AspireApp.Tests.csproj b/docs/testing/snippets/testing/xunit/AspireApp.Tests/AspireApp.Tests.csproj
index 04ec9aa55d..7274dba0d9 100644
--- a/docs/testing/snippets/testing/xunit/AspireApp.Tests/AspireApp.Tests.csproj
+++ b/docs/testing/snippets/testing/xunit/AspireApp.Tests/AspireApp.Tests.csproj
@@ -10,9 +10,9 @@
-
+
-
+
diff --git a/docs/toc.yml b/docs/toc.yml
index 7cd9e6601c..5d8802fc9f 100644
--- a/docs/toc.yml
+++ b/docs/toc.yml
@@ -368,6 +368,8 @@ items:
href: community-toolkit/hosting-redis-extensions.md
- name: PostgreSQL Extensions
href: community-toolkit/hosting-postgresql-extensions.md
+ - name: RavenDB
+ href: community-toolkit/ravendb.md
- name: Aspire.Hosting API reference
href: /dotnet/api/?term=Aspire.Hosting&view=dotnet-aspire-9.2&preserve-view=true
diff --git a/docs/whats-new/dotnet-aspire-9.3.md b/docs/whats-new/dotnet-aspire-9.3.md
index 1fbb6143ef..2e3b08fc78 100644
--- a/docs/whats-new/dotnet-aspire-9.3.md
+++ b/docs/whats-new/dotnet-aspire-9.3.md
@@ -518,7 +518,7 @@ This first release is scoped to the most common use cases:
#### Example: Deploy to Azure App Service
```csharp
-var env = builder.AddAzureAppServiceEnvironment("env");
+builder.AddAzureAppServiceEnvironment("env");
builder.AddProject("api")
.WithExternalHttpEndpoints()
@@ -813,11 +813,11 @@ If your deployment relied on Aspire setting the managed identity as the SQL Serv
π Related: [dotnet/aspire#8381](https://github.com/dotnet/aspire/issues/8381) and [dotnet/aspire#8389](https://github.com/dotnet/aspire/issues/8389)
-### πΈ Default Azure SQL SKU is now Free (Breaking change)
+### πΈ Default Azure SQL SKU now uses the Free Offer (Breaking change)
-.NET Aspire 9.3 changes the default SKU used when provisioning **Azure SQL databases** to the **Free (Basic)** tier. This helps reduce unexpected costs during development and experimentation.
+.NET Aspire 9.3 changes the default SKU used when provisioning **Azure SQL databases** to the **GP_S_Gen5_2** (General Purpose Serverless) tier with the [**Free Offer**](/azure/azure-sql/database/free-offer?view=azuresql). This helps reduce unexpected costs during development and experimentation.
-Previously, Aspire defaulted to the **General Purpose (GP)** tier, which could incur charges even for small or test apps.
+Previously, Aspire defaulted to the **General Purpose (GP)** tier *without* the Free Offer, which could incur charges even for small or test apps.
#### What's new
@@ -829,17 +829,19 @@ var sql = builder.AddAzureSqlServer("sqlserver");
sql.AddDatabase("appdb");
```
-Aspire now automatically uses the **free-tier SKU** for `appdb`, unless you override it.
+Aspire now automatically uses the **Free Offer** for `appdb`, which will deploy a **GP_S_Gen5_2** (General Purpose Serverless), unless you override it.
#### How to restore the previous behavior
-If your app requires the performance or features of a paid tier, you can opt out of the new default using:
+If your app requires the performance or features of the General Purpose paid tier, you can opt out of the new default using:
```csharp
sql.AddDatabase("appdb")
.WithDefaultAzureSku(); // Uses the previous (General Purpose) default
```
+If you want to specify what SKU to use, you the `ConfigureInfrastructure` method as explained here: [Setting a specific SKU](https://github.com/dotnet/aspire/tree/main/src/Aspire.Hosting.Azure.Sql#setting-a-specific-sku).
+
#### β οΈ Breaking change
This change affects cost, performance, and available features in new deployments. If your app depends on higher-tier capabilities, be sure to configure the SKU accordingly.
diff --git a/docs/whats-new/dotnet-aspire-9.md b/docs/whats-new/dotnet-aspire-9.md
index a02935e025..fd9cf49dec 100644
--- a/docs/whats-new/dotnet-aspire-9.md
+++ b/docs/whats-new/dotnet-aspire-9.md
@@ -62,7 +62,7 @@ The display of resource details contains several improvements:
- Configured container volumes are listed in resource details.
-- .NET Aspire 9 adds support for health checks. Detailed information about these checks can now be viewed in the resource details pane, showing why a resource might be marked as unhealthy or degraded. Find out more about health checks [here](#resource-health-checks).
+- .NET Aspire 9 adds support for health checks. Detailed information about these checks can now be viewed in the resource details pane, showing why a resource might be marked as unhealthy or degraded. For more information, see [Resource health check](#resource-health-checks).
### Colorful console log