From 92766b70685a9b5882440510da5217dcf44015ea Mon Sep 17 00:00:00 2001 From: David Pine <7679720+IEvangelist@users.noreply.github.com> Date: Fri, 17 Jul 2026 12:45:20 -0500 Subject: [PATCH 1/7] docs: accuracy audit for data/AI integrations against CommunityToolkit/Aspire b9d4047 Audit all 18 get-started/host/connect pages for Ollama, KurrentDB, Meilisearch, RavenDB, SQLite, and SurrealDB against CommunityToolkit/Aspire commit b9d40479805b74ea20b7dc57cb659d46e6f11c43, fixing runtime-affecting inaccuracies verified against source. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3d7f9a0c-8c6d-4579-9b43-b41a361fa19b --- .../integrations/ai/ollama/ollama-connect.mdx | 4 +- .../integrations/ai/ollama/ollama-host.mdx | 8 ++-- .../kurrentdb/kurrentdb-get-started.mdx | 2 +- .../databases/kurrentdb/kurrentdb-host.mdx | 4 +- .../meilisearch/meilisearch-connect.mdx | 16 +++---- .../meilisearch/meilisearch-host.mdx | 2 +- .../databases/ravendb/ravendb-connect.mdx | 3 +- .../databases/ravendb/ravendb-host.mdx | 46 +++++++++---------- .../databases/sqlite/sqlite-connect.mdx | 8 ++-- .../databases/sqlite/sqlite-get-started.mdx | 4 +- .../databases/sqlite/sqlite-host.mdx | 42 ++--------------- .../databases/surrealdb/surrealdb-connect.mdx | 30 ++++++------ .../databases/surrealdb/surrealdb-host.mdx | 2 +- 13 files changed, 69 insertions(+), 102 deletions(-) diff --git a/src/frontend/src/content/docs/integrations/ai/ollama/ollama-connect.mdx b/src/frontend/src/content/docs/integrations/ai/ollama/ollama-connect.mdx index b3d3bcd5e..044b1ac4d 100644 --- a/src/frontend/src/content/docs/integrations/ai/ollama/ollama-connect.mdx +++ b/src/frontend/src/content/docs/integrations/ai/ollama/ollama-connect.mdx @@ -104,8 +104,8 @@ public class ExampleService(IOllamaApiClient ollama) To register multiple `IOllamaApiClient` instances with different connection names, use `AddKeyedOllamaApiClient`: ```csharp title="Program.cs" -builder.AddKeyedOllamaApiClient(name: "chat"); -builder.AddKeyedOllamaApiClient(name: "embeddings"); +builder.AddKeyedOllamaApiClient(connectionName: "chat"); +builder.AddKeyedOllamaApiClient(connectionName: "embeddings"); ``` Then resolve each instance by key: diff --git a/src/frontend/src/content/docs/integrations/ai/ollama/ollama-host.mdx b/src/frontend/src/content/docs/integrations/ai/ollama/ollama-host.mdx index 436317f09..3db3a42ec 100644 --- a/src/frontend/src/content/docs/integrations/ai/ollama/ollama-host.mdx +++ b/src/frontend/src/content/docs/integrations/ai/ollama/ollama-host.mdx @@ -277,12 +277,12 @@ await ollama.addModel("llama3"); **AMD:** ```typescript title="apphost.mts" -import { createBuilder } from './.aspire/modules/aspire.mjs'; +import { createBuilder, OllamaGpuVendor } from './.aspire/modules/aspire.mjs'; const builder = await createBuilder(); const ollama = await builder.addOllama("ollama"); -await ollama.withGPUSupport({ vendor: "AMD" }); +await ollama.withGPUSupport({ vendor: OllamaGpuVendor.AMD }); await ollama.addModel("llama3"); @@ -290,7 +290,7 @@ await ollama.addModel("llama3"); ``` @@ -339,7 +339,7 @@ await builder.addNodeApp("api", "./api", "index.js") -Only models in GGUF format are supported. Ollama automatically prefixes `hf.co/` if the model name doesn't already start with `hf.co/` or `huggingface.co/`. +Only models in GGUF format are supported. The integration automatically prefixes `hf.co/` to the model name if it doesn't already start with `hf.co/` or `huggingface.co/`, so Ollama can resolve it from Hugging Face. ## Add Ollama resource with parameters diff --git a/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-get-started.mdx b/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-get-started.mdx index 227bea252..464fcb853 100644 --- a/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-get-started.mdx +++ b/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-get-started.mdx @@ -24,7 +24,7 @@ import kurrentIcon from '@assets/icons/kurrent-icon.png'; Adding KurrentDB through Aspire — rather than wiring up containers and connection strings by hand — gives you: -- **Zero-config local development.** Aspire runs KurrentDB from the [`docker.io/eventstore/eventstore`](https://hub.docker.com/r/eventstore/eventstore) container image with configuration generated automatically for you. +- **Zero-config local development.** Aspire runs KurrentDB from the [`docker.kurrent.io/kurrent-latest/kurrentdb`](https://docker.kurrent.io) container image with configuration generated automatically for you. - **Consistent connection info across languages.** Once you reference the KurrentDB resource from a consuming app, Aspire injects connection properties as environment variables in a predictable format that works from C#, TypeScript, Python, Go, or any other language. - **Built-in health checks.** The hosting integration automatically registers a health check so the dashboard and your orchestrator can tell when KurrentDB is ready. - **Dashboard observability.** The KurrentDB resource shows up in the Aspire dashboard with logs, status, and telemetry alongside your other services. diff --git a/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-host.mdx b/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-host.mdx index 518cafcb4..ca374913c 100644 --- a/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-host.mdx +++ b/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-host.mdx @@ -25,7 +25,7 @@ This article is the reference for the Aspire KurrentDB Hosting integration. It e If you're new to the KurrentDB integration, start with the [Get started with KurrentDB integrations](/integrations/databases/kurrentdb/kurrentdb-get-started/) guide. For how consuming apps read the connection information this page exposes, see [Connect to KurrentDB](../kurrentdb-connect/). ## Installation @@ -61,7 +61,7 @@ var exampleProject = builder.AddProject("apiservice") -1. When Aspire adds a container image to the AppHost, as shown in the preceding example with the `docker.io/eventstore/eventstore` image, it creates a new KurrentDB instance on your local machine. +1. When Aspire adds a container image to the AppHost, as shown in the preceding example with the `docker.kurrent.io/kurrent-latest/kurrentdb` image, it creates a new KurrentDB instance on your local machine. 1. The AppHost reference call configures a connection in the consuming project named after the referenced KurrentDB resource, such as `kurrentdb` in the preceding example. diff --git a/src/frontend/src/content/docs/integrations/databases/meilisearch/meilisearch-connect.mdx b/src/frontend/src/content/docs/integrations/databases/meilisearch/meilisearch-connect.mdx index d03c5affa..c12fb2f07 100644 --- a/src/frontend/src/content/docs/integrations/databases/meilisearch/meilisearch-connect.mdx +++ b/src/frontend/src/content/docs/integrations/databases/meilisearch/meilisearch-connect.mdx @@ -27,7 +27,7 @@ When you reference a Meilisearch resource from your AppHost, Aspire injects the ## Connection properties -Aspire exposes each property as an environment variable named `[RESOURCE]_[PROPERTY]`. For instance, the `Url` property of a resource called `meilisearch` becomes `MEILISEARCH_URL`. +Aspire exposes each property as an environment variable named `[RESOURCE]_[PROPERTY]`. For instance, the `Uri` property of a resource called `meilisearch` becomes `MEILISEARCH_URI`. The Meilisearch resource exposes the following connection properties: @@ -35,13 +35,13 @@ The Meilisearch resource exposes the following connection properties: | ------------- | ----------- | | `Host` | The hostname or IP address of the Meilisearch server | | `Port` | The port number the Meilisearch server is listening on (default: `7700`) | -| `Url` | The full base URL of the Meilisearch server, with the format `http://{Host}:{Port}` | +| `Uri` | The full base URL of the Meilisearch server, with the format `http://{Host}:{Port}` | | `MasterKey` | The master key used to authenticate with the Meilisearch server | **Example connection values:** ``` -Url: http://localhost:7700 +Uri: http://localhost:7700 MasterKey: p%40ssw0rd1 ``` @@ -144,12 +144,12 @@ Aspire client integrations enable health checks by default. The Meilisearch clie #### Read environment variables in C\# -If you prefer not to use the Aspire client integration, you can read the Aspire-injected connection properties from the environment and construct a `MeilisearchClient` directly using the [📦 Meilisearch.NET](https://www.nuget.org/packages/Meilisearch/) NuGet package: +If you prefer not to use the Aspire client integration, you can read the Aspire-injected connection properties from the environment and construct a `MeilisearchClient` directly using the [📦 Meilisearch](https://www.nuget.org/packages/Meilisearch/) NuGet package: ```csharp title="Program.cs" using Meilisearch; -var url = Environment.GetEnvironmentVariable("MEILISEARCH_URL"); +var url = Environment.GetEnvironmentVariable("MEILISEARCH_URI"); var masterKey = Environment.GetEnvironmentVariable("MEILISEARCH_MASTERKEY"); var client = new MeilisearchClient(url!, masterKey); @@ -179,7 +179,7 @@ import ( func main() { // Read the Aspire-injected connection properties client := meilisearch.New( - os.Getenv("MEILISEARCH_URL"), + os.Getenv("MEILISEARCH_URI"), meilisearch.WithAPIKey(os.Getenv("MEILISEARCH_MASTERKEY")), ) @@ -204,7 +204,7 @@ import meilisearch # Read the Aspire-injected connection properties client = meilisearch.Client( - os.getenv("MEILISEARCH_URL"), + os.getenv("MEILISEARCH_URI"), os.getenv("MEILISEARCH_MASTERKEY"), ) @@ -227,7 +227,7 @@ import { MeiliSearch } from 'meilisearch'; // Read Aspire-injected connection properties const client = new MeiliSearch({ - host: process.env.MEILISEARCH_URL!, + host: process.env.MEILISEARCH_URI!, apiKey: process.env.MEILISEARCH_MASTERKEY, }); diff --git a/src/frontend/src/content/docs/integrations/databases/meilisearch/meilisearch-host.mdx b/src/frontend/src/content/docs/integrations/databases/meilisearch/meilisearch-host.mdx index be838a6cb..2648afcdf 100644 --- a/src/frontend/src/content/docs/integrations/databases/meilisearch/meilisearch-host.mdx +++ b/src/frontend/src/content/docs/integrations/databases/meilisearch/meilisearch-host.mdx @@ -89,7 +89,7 @@ var exampleProject = builder.AddProject("apiservice") ``` diff --git a/src/frontend/src/content/docs/integrations/databases/ravendb/ravendb-connect.mdx b/src/frontend/src/content/docs/integrations/databases/ravendb/ravendb-connect.mdx index 587341a64..b8c172fa2 100644 --- a/src/frontend/src/content/docs/integrations/databases/ravendb/ravendb-connect.mdx +++ b/src/frontend/src/content/docs/integrations/databases/ravendb/ravendb-connect.mdx @@ -158,7 +158,8 @@ The connection string is resolved from the `ConnectionStrings` section: "Aspire": { "RavenDB": { "Client": { - "ConnectionString": "URL=http://localhost:8080;Database=ravendb", + "Urls": ["http://localhost:8080"], + "DatabaseName": "ravendb", "DisableHealthChecks": false, "HealthCheckTimeout": 10000, "DisableTracing": false diff --git a/src/frontend/src/content/docs/integrations/databases/ravendb/ravendb-host.mdx b/src/frontend/src/content/docs/integrations/databases/ravendb/ravendb-host.mdx index d4a729940..2e092f10f 100644 --- a/src/frontend/src/content/docs/integrations/databases/ravendb/ravendb-host.mdx +++ b/src/frontend/src/content/docs/integrations/databases/ravendb/ravendb-host.mdx @@ -104,9 +104,9 @@ const builder = await createBuilder(); const ravenServer = await builder.addRavenDB("ravenServer"); const ravendb = await ravenServer.addDatabase("ravendb"); -const apiService = await builder.addProject("apiservice", "../ExampleProject/ExampleProject.csproj") - .withReference(ravendb) - .waitFor(ravendb); +const apiService = await builder.addProject("apiservice", "../ExampleProject/ExampleProject.csproj"); +await apiService.withReference(ravendb); +await apiService.waitFor(ravendb); // After adding all resources, run the app... ``` @@ -167,9 +167,9 @@ const builder = await createBuilder(); const ravenServer = await builder.addRavenDB("ravenServer"); const ravendb = await ravenServer.addDatabase("ravendb", { ensureCreated: true }); -const apiService = await builder.addProject("apiservice", "../ExampleProject/ExampleProject.csproj") - .withReference(ravendb) - .waitFor(ravendb); +const apiService = await builder.addProject("apiservice", "../ExampleProject/ExampleProject.csproj"); +await apiService.withReference(ravendb); +await apiService.waitFor(ravendb); // After adding all resources, run the app... ``` @@ -207,14 +207,14 @@ import { createBuilder } from './.aspire/modules/aspire.mjs'; const builder = await createBuilder(); -const ravenServer = await builder.addRavenDB("ravenServer") - .withDataVolume(); +const ravenServer = await builder.addRavenDB("ravenServer"); +await ravenServer.withDataVolume(); const ravendb = await ravenServer.addDatabase("ravendb"); -const apiService = await builder.addProject("apiservice", "../ExampleProject/ExampleProject.csproj") - .withReference(ravendb) - .waitFor(ravendb); +const apiService = await builder.addProject("apiservice", "../ExampleProject/ExampleProject.csproj"); +await apiService.withReference(ravendb); +await apiService.waitFor(ravendb); // After adding all resources, run the app... ``` @@ -254,14 +254,14 @@ import { createBuilder } from './.aspire/modules/aspire.mjs'; const builder = await createBuilder(); -const ravenServer = await builder.addRavenDB("ravenServer") - .withDataBindMount("C:\\RavenDb\\Data"); +const ravenServer = await builder.addRavenDB("ravenServer"); +await ravenServer.withDataBindMount("C:\\RavenDb\\Data"); const ravendb = await ravenServer.addDatabase("ravendb"); -const apiService = await builder.addProject("apiservice", "../ExampleProject/ExampleProject.csproj") - .withReference(ravendb) - .waitFor(ravendb); +const apiService = await builder.addProject("apiservice", "../ExampleProject/ExampleProject.csproj"); +await apiService.withReference(ravendb); +await apiService.waitFor(ravendb); // After adding all resources, run the app... ``` @@ -269,7 +269,7 @@ const apiService = await builder.addProject("apiservice", "../ExampleProject/Exa -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 the equivalent 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). +Data bind mounts rely on the host machine's filesystem to persist the RavenDB data across container restarts. The bind mount maps the host path `C:\RavenDb\Data` (on Windows, or the equivalent Unix path) to the `/var/lib/ravendb/data` directory inside the RavenDB container. For more information on data bind mounts, see [Docker docs: Bind mounts](https://docs.docker.com/engine/storage/bind-mounts). ## Installation -To start building an Aspire app that uses SQLite, install the [📦 CommunityToolkit.Aspire.Hosting.SQLite](https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.SQLite) NuGet package in your AppHost project: +To start building an Aspire app that uses SQLite, install the [📦 CommunityToolkit.Aspire.Hosting.Sqlite](https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.Sqlite) NuGet package in your AppHost project: ```bash title="Terminal" aspire add sqlite @@ -43,11 +43,11 @@ aspire add sqlite Or, choose a manual installation approach: ```csharp title="AppHost.cs" -#:package CommunityToolkit.Aspire.Hosting.SQLite@* +#:package CommunityToolkit.Aspire.Hosting.Sqlite@* ``` ```xml title="AppHost.csproj" - + ``` ## Add SQLite resource @@ -74,7 +74,7 @@ var exampleProject = builder.AddProject("apiservice") ## Add SQLite resource with custom database file path @@ -112,38 +112,6 @@ var exampleProject = builder.AddProject("apiservice") This adds a container based on [`ghcr.io/coleifer/sqlite-web`](https://github.com/coleifer/sqlite-web) connected to the same database file. Each `WithSqliteWeb` call creates one container per database. When you run the solution, the Aspire dashboard displays the SQLiteWeb resource with an endpoint — select it to open the SQLiteWeb UI in a new browser tab. -## Add SQLite extensions - -SQLite supports loadable extensions that can be provided via a NuGet package or from a local file on disk. Use either `WithNuGetExtension` or `WithLocalExtension`: - -```csharp title="AppHost.cs (NuGet extension)" -var builder = DistributedApplication.CreateBuilder(args); - -var sqlite = builder.AddSqlite("sqlite") - .WithNuGetExtension("SQLitePCLRaw.lib.e_sqlite3"); - -var exampleProject = builder.AddProject("apiservice") - .WithReference(sqlite); - -// After adding all resources, run the app... -``` - -```csharp title="AppHost.cs (Local extension)" -var builder = DistributedApplication.CreateBuilder(args); - -var sqlite = builder.AddSqlite("sqlite") - .WithLocalExtension("C:\\Extensions\\my-extension.dll"); - -var exampleProject = builder.AddProject("apiservice") - .WithReference(sqlite); - -// After adding all resources, run the app... -``` - - - ## Connection properties For the full reference of SQLite connection properties — and how consuming apps in C#, TypeScript, Python, and Go read them — see [Connect to SQLite](../sqlite-connect/). diff --git a/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-connect.mdx b/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-connect.mdx index 32927b2bc..5cb43511d 100644 --- a/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-connect.mdx +++ b/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-connect.mdx @@ -26,7 +26,7 @@ When you reference a SurrealDB resource from your AppHost, Aspire injects the co ## Connection properties -Aspire exposes each property as an environment variable named `[RESOURCE]_[PROPERTY]`. For instance, the `Endpoint` property of a resource called `db` becomes `DB_ENDPOINT`. +Aspire exposes each property as an environment variable named `[RESOURCE]_[PROPERTY]`. For instance, the `Uri` property of a resource called `db` becomes `DB_URI`. The SurrealDB database resource exposes the following connection properties: @@ -38,13 +38,14 @@ The SurrealDB database resource exposes the following connection properties: | `Password` | The password for authentication | | `Namespace` | The SurrealDB namespace name | | `Database` | The database name | -| `Endpoint` | The full WebSocket endpoint URL, with the format `ws://{Host}:{Port}/` | -| `ConnectionString` | The full connection string, with the format `Endpoint=ws://{Host}:{Port}/;Namespace={Namespace};Database={Database};Username={Username};Password={Password}` | +| `Uri` | The full WebSocket RPC endpoint URL, with the format `ws://{Host}:{Port}/rpc` | + +When you reference the SurrealDB database resource, Aspire also injects a connection string into the consuming app's `ConnectionStrings` configuration section, with the format `Server=ws://{Host}:{Port}/rpc;User={Username};Password={Password};Namespace={Namespace};Database={Database}`. **Example connection string:** ``` -ConnectionString: Endpoint=ws://localhost:8000/;Namespace=ns;Database=db;Username=root;Password=p%40ssw0rd1 +Server=ws://localhost:8000/rpc;User=root;Password=p%40ssw0rd1;Namespace=ns;Database=db ``` ## Connect from your app @@ -120,23 +121,20 @@ The connection string is resolved from the `ConnectionStrings` section: ```json title="appsettings.json" { "ConnectionStrings": { - "db": "Endpoint=ws://localhost:8000/;Namespace=ns;Database=db;Username=root;Password=s3cr3t" + "db": "Server=ws://localhost:8000/rpc;User=root;Password=s3cr3t;Namespace=ns;Database=db" } } ``` -**Configuration providers.** The client integration supports `Microsoft.Extensions.Configuration`. It loads settings from _appsettings.json_ (or any other configuration source) by using the `Aspire:Surreal:Client` key: +**Configuration providers.** The client integration binds `SurrealDbClientSettings` from the `Aspire:Surreal:Client` configuration section. Connection details are supplied through the `ConnectionStrings` section shown earlier; this section configures client behavior such as health checks: ```json title="appsettings.json" { "Aspire": { "Surreal": { "Client": { - "Endpoint": "ws://localhost:8000/", - "Namespace": "ns", - "Database": "db", - "Username": "root", - "Password": "s3cr3t" + "DisableHealthChecks": false, + "HealthCheckTimeout": 10000 } } } @@ -157,12 +155,12 @@ Aspire client integrations enable health checks by default. The SurrealDB client #### Read environment variables in C\# -If you prefer not to use the Aspire client integration, you can read the Aspire-injected connection string from the environment and use the [📦 SurrealDB.Net](https://www.nuget.org/packages/SurrealDb.Net/) NuGet package to construct a client directly: +If you prefer not to use the Aspire client integration, you can read the Aspire-injected connection string from the environment and use the [📦 SurrealDb.Net](https://www.nuget.org/packages/SurrealDb.Net/) NuGet package to construct a client directly: ```csharp title="Program.cs" using SurrealDb.Net; -var connectionString = Environment.GetEnvironmentVariable("DB_CONNECTIONSTRING"); +var connectionString = Environment.GetEnvironmentVariable("ConnectionStrings__db"); var client = new SurrealDbClient(connectionString!); await client.Connect(); @@ -192,7 +190,7 @@ import ( func main() { // Read the Aspire-injected connection properties - endpoint := os.Getenv("DB_ENDPOINT") + endpoint := os.Getenv("DB_URI") namespace := os.Getenv("DB_NAMESPACE") database := os.Getenv("DB_DATABASE") username := os.Getenv("DB_USERNAME") @@ -236,7 +234,7 @@ from surrealdb import AsyncSurrealDB async def main(): # Read the Aspire-injected connection properties - endpoint = os.getenv("DB_ENDPOINT") + endpoint = os.getenv("DB_URI") namespace = os.getenv("DB_NAMESPACE") database = os.getenv("DB_DATABASE") username = os.getenv("DB_USERNAME") @@ -266,7 +264,7 @@ Read the injected environment variables and connect: import Surreal from 'surrealdb'; // Read Aspire-injected connection properties -const endpoint = process.env.DB_ENDPOINT!; +const endpoint = process.env.DB_URI!; const namespace = process.env.DB_NAMESPACE!; const database = process.env.DB_DATABASE!; const username = process.env.DB_USERNAME!; diff --git a/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-host.mdx b/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-host.mdx index 4c373393a..c34343782 100644 --- a/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-host.mdx +++ b/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-host.mdx @@ -25,7 +25,7 @@ This article is the reference for the Aspire SurrealDB Hosting integration. It e If you're new to the SurrealDB integration, start with the [Get started with SurrealDB integrations](/integrations/databases/surrealdb/surrealdb-get-started/) guide. For how consuming apps read the connection information this page exposes, see [Connect to SurrealDB](../surrealdb-connect/). ## Installation From a24325747f134190aca52153d8f089a44478596d Mon Sep 17 00:00:00 2001 From: David Pine <7679720+IEvangelist@users.noreply.github.com> Date: Fri, 17 Jul 2026 13:02:03 -0500 Subject: [PATCH 2/7] fix: prevent Astro cropping of integration hero logos Add fit="contain" to the hero logos on all 18 Ollama, KurrentDB, Meilisearch, RavenDB, SQLite, and SurrealDB get-started/host/connect pages. Without it, Astro crops non-square assets to the 100x100 box (kurrent 3420x755, meilisearch 838x604, ravendb 555x109, surrealdb 512x110); fit="contain" preserves aspect ratio so the complete artwork renders. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3d7f9a0c-8c6d-4579-9b43-b41a361fa19b --- .../src/content/docs/integrations/ai/ollama/ollama-connect.mdx | 1 + .../content/docs/integrations/ai/ollama/ollama-get-started.mdx | 1 + .../src/content/docs/integrations/ai/ollama/ollama-host.mdx | 1 + .../docs/integrations/databases/kurrentdb/kurrentdb-connect.mdx | 1 + .../integrations/databases/kurrentdb/kurrentdb-get-started.mdx | 1 + .../docs/integrations/databases/kurrentdb/kurrentdb-host.mdx | 1 + .../integrations/databases/meilisearch/meilisearch-connect.mdx | 1 + .../databases/meilisearch/meilisearch-get-started.mdx | 1 + .../docs/integrations/databases/meilisearch/meilisearch-host.mdx | 1 + .../docs/integrations/databases/ravendb/ravendb-connect.mdx | 1 + .../docs/integrations/databases/ravendb/ravendb-get-started.mdx | 1 + .../content/docs/integrations/databases/ravendb/ravendb-host.mdx | 1 + .../docs/integrations/databases/sqlite/sqlite-connect.mdx | 1 + .../docs/integrations/databases/sqlite/sqlite-get-started.mdx | 1 + .../content/docs/integrations/databases/sqlite/sqlite-host.mdx | 1 + .../docs/integrations/databases/surrealdb/surrealdb-connect.mdx | 1 + .../integrations/databases/surrealdb/surrealdb-get-started.mdx | 1 + .../docs/integrations/databases/surrealdb/surrealdb-host.mdx | 1 + 18 files changed, 18 insertions(+) diff --git a/src/frontend/src/content/docs/integrations/ai/ollama/ollama-connect.mdx b/src/frontend/src/content/docs/integrations/ai/ollama/ollama-connect.mdx index 044b1ac4d..e1f70ab7e 100644 --- a/src/frontend/src/content/docs/integrations/ai/ollama/ollama-connect.mdx +++ b/src/frontend/src/content/docs/integrations/ai/ollama/ollama-connect.mdx @@ -17,6 +17,7 @@ import ollamaIcon from '@assets/icons/ollama-icon.png'; alt="Ollama logo" width={100} height={100} + fit="contain" class:list={'float-inline-left icon'} data-zoom-off /> diff --git a/src/frontend/src/content/docs/integrations/ai/ollama/ollama-get-started.mdx b/src/frontend/src/content/docs/integrations/ai/ollama/ollama-get-started.mdx index dd284a495..00d7fde60 100644 --- a/src/frontend/src/content/docs/integrations/ai/ollama/ollama-get-started.mdx +++ b/src/frontend/src/content/docs/integrations/ai/ollama/ollama-get-started.mdx @@ -16,6 +16,7 @@ import ollamaIcon from '@assets/icons/ollama-icon.png'; alt="Ollama logo" width={100} height={100} + fit="contain" class:list={'float-inline-left icon'} data-zoom-off /> diff --git a/src/frontend/src/content/docs/integrations/ai/ollama/ollama-host.mdx b/src/frontend/src/content/docs/integrations/ai/ollama/ollama-host.mdx index 3db3a42ec..ff9d339e9 100644 --- a/src/frontend/src/content/docs/integrations/ai/ollama/ollama-host.mdx +++ b/src/frontend/src/content/docs/integrations/ai/ollama/ollama-host.mdx @@ -16,6 +16,7 @@ import ollamaIcon from '@assets/icons/ollama-icon.png'; alt="Ollama logo" width={100} height={100} + fit="contain" class:list={'float-inline-left icon'} data-zoom-off /> diff --git a/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-connect.mdx b/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-connect.mdx index 11323c3fb..4b0eac8ce 100644 --- a/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-connect.mdx +++ b/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-connect.mdx @@ -16,6 +16,7 @@ import kurrentIcon from '@assets/icons/kurrent-icon.png'; alt="KurrentDB logo" width={100} height={100} + fit="contain" class:list={'float-inline-left icon'} data-zoom-off /> diff --git a/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-get-started.mdx b/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-get-started.mdx index 464fcb853..46f8a573b 100644 --- a/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-get-started.mdx +++ b/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-get-started.mdx @@ -14,6 +14,7 @@ import kurrentIcon from '@assets/icons/kurrent-icon.png'; alt="KurrentDB logo" width={100} height={100} + fit="contain" class:list={'float-inline-left icon'} data-zoom-off /> diff --git a/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-host.mdx b/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-host.mdx index ca374913c..2717c720c 100644 --- a/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-host.mdx +++ b/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-host.mdx @@ -16,6 +16,7 @@ import kurrentIcon from '@assets/icons/kurrent-icon.png'; alt="KurrentDB logo" width={100} height={100} + fit="contain" class:list={'float-inline-left icon'} data-zoom-off /> diff --git a/src/frontend/src/content/docs/integrations/databases/meilisearch/meilisearch-connect.mdx b/src/frontend/src/content/docs/integrations/databases/meilisearch/meilisearch-connect.mdx index c12fb2f07..28eec18fd 100644 --- a/src/frontend/src/content/docs/integrations/databases/meilisearch/meilisearch-connect.mdx +++ b/src/frontend/src/content/docs/integrations/databases/meilisearch/meilisearch-connect.mdx @@ -17,6 +17,7 @@ import meilisearchIcon from '@assets/icons/meilisearch-icon.png'; alt="Meilisearch logo" width={100} height={100} + fit="contain" class:list={'float-inline-left icon'} data-zoom-off /> diff --git a/src/frontend/src/content/docs/integrations/databases/meilisearch/meilisearch-get-started.mdx b/src/frontend/src/content/docs/integrations/databases/meilisearch/meilisearch-get-started.mdx index 19eb2a64a..e6da91770 100644 --- a/src/frontend/src/content/docs/integrations/databases/meilisearch/meilisearch-get-started.mdx +++ b/src/frontend/src/content/docs/integrations/databases/meilisearch/meilisearch-get-started.mdx @@ -15,6 +15,7 @@ import meilisearchIcon from '@assets/icons/meilisearch-icon.png'; alt="Meilisearch logo" width={100} height={100} + fit="contain" class:list={'float-inline-left icon'} data-zoom-off /> diff --git a/src/frontend/src/content/docs/integrations/databases/meilisearch/meilisearch-host.mdx b/src/frontend/src/content/docs/integrations/databases/meilisearch/meilisearch-host.mdx index 2648afcdf..b7fdc1c67 100644 --- a/src/frontend/src/content/docs/integrations/databases/meilisearch/meilisearch-host.mdx +++ b/src/frontend/src/content/docs/integrations/databases/meilisearch/meilisearch-host.mdx @@ -16,6 +16,7 @@ import meilisearchIcon from '@assets/icons/meilisearch-icon.png'; alt="Meilisearch logo" width={100} height={100} + fit="contain" class:list={'float-inline-left icon'} data-zoom-off /> diff --git a/src/frontend/src/content/docs/integrations/databases/ravendb/ravendb-connect.mdx b/src/frontend/src/content/docs/integrations/databases/ravendb/ravendb-connect.mdx index b8c172fa2..7e3f2b629 100644 --- a/src/frontend/src/content/docs/integrations/databases/ravendb/ravendb-connect.mdx +++ b/src/frontend/src/content/docs/integrations/databases/ravendb/ravendb-connect.mdx @@ -16,6 +16,7 @@ import ravendbIcon from '@assets/icons/ravendb-icon.png'; alt="RavenDB logo" width={100} height={100} + fit="contain" class:list={'float-inline-left icon'} data-zoom-off /> diff --git a/src/frontend/src/content/docs/integrations/databases/ravendb/ravendb-get-started.mdx b/src/frontend/src/content/docs/integrations/databases/ravendb/ravendb-get-started.mdx index 000a839b1..8d48327ad 100644 --- a/src/frontend/src/content/docs/integrations/databases/ravendb/ravendb-get-started.mdx +++ b/src/frontend/src/content/docs/integrations/databases/ravendb/ravendb-get-started.mdx @@ -14,6 +14,7 @@ import ravendbIcon from '@assets/icons/ravendb-icon.png'; alt="RavenDB logo" width={100} height={100} + fit="contain" class:list={'float-inline-left icon'} data-zoom-off /> diff --git a/src/frontend/src/content/docs/integrations/databases/ravendb/ravendb-host.mdx b/src/frontend/src/content/docs/integrations/databases/ravendb/ravendb-host.mdx index 2e092f10f..34aec8c94 100644 --- a/src/frontend/src/content/docs/integrations/databases/ravendb/ravendb-host.mdx +++ b/src/frontend/src/content/docs/integrations/databases/ravendb/ravendb-host.mdx @@ -16,6 +16,7 @@ import ravendbIcon from '@assets/icons/ravendb-icon.png'; alt="RavenDB logo" width={100} height={100} + fit="contain" class:list={'float-inline-left icon'} data-zoom-off /> diff --git a/src/frontend/src/content/docs/integrations/databases/sqlite/sqlite-connect.mdx b/src/frontend/src/content/docs/integrations/databases/sqlite/sqlite-connect.mdx index cd753d03e..a527c5112 100644 --- a/src/frontend/src/content/docs/integrations/databases/sqlite/sqlite-connect.mdx +++ b/src/frontend/src/content/docs/integrations/databases/sqlite/sqlite-connect.mdx @@ -16,6 +16,7 @@ import sqliteIcon from '@assets/icons/sqlite-icon.png'; alt="SQLite logo" width={100} height={100} + fit="contain" class:list={'float-inline-left icon'} data-zoom-off /> diff --git a/src/frontend/src/content/docs/integrations/databases/sqlite/sqlite-get-started.mdx b/src/frontend/src/content/docs/integrations/databases/sqlite/sqlite-get-started.mdx index 9793b5748..75a730c94 100644 --- a/src/frontend/src/content/docs/integrations/databases/sqlite/sqlite-get-started.mdx +++ b/src/frontend/src/content/docs/integrations/databases/sqlite/sqlite-get-started.mdx @@ -15,6 +15,7 @@ import sqliteIcon from '@assets/icons/sqlite-icon.png'; alt="SQLite logo" width={100} height={100} + fit="contain" class:list={'float-inline-left icon'} data-zoom-off /> diff --git a/src/frontend/src/content/docs/integrations/databases/sqlite/sqlite-host.mdx b/src/frontend/src/content/docs/integrations/databases/sqlite/sqlite-host.mdx index 96bea7078..dec77eafd 100644 --- a/src/frontend/src/content/docs/integrations/databases/sqlite/sqlite-host.mdx +++ b/src/frontend/src/content/docs/integrations/databases/sqlite/sqlite-host.mdx @@ -16,6 +16,7 @@ import sqliteIcon from '@assets/icons/sqlite-icon.png'; alt="SQLite logo" width={100} height={100} + fit="contain" class:list={'float-inline-left icon'} data-zoom-off /> diff --git a/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-connect.mdx b/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-connect.mdx index 5cb43511d..c5c32ad48 100644 --- a/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-connect.mdx +++ b/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-connect.mdx @@ -16,6 +16,7 @@ import surrealdbIcon from '@assets/icons/surrealdb-icon.png'; alt="SurrealDB logo" width={100} height={100} + fit="contain" class:list={'float-inline-left icon'} data-zoom-off /> diff --git a/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-get-started.mdx b/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-get-started.mdx index 9e296cf1b..eb6810f77 100644 --- a/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-get-started.mdx +++ b/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-get-started.mdx @@ -14,6 +14,7 @@ import surrealdbIcon from '@assets/icons/surrealdb-icon.png'; alt="SurrealDB logo" width={100} height={100} + fit="contain" class:list={'float-inline-left icon'} data-zoom-off /> diff --git a/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-host.mdx b/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-host.mdx index c34343782..dbda38654 100644 --- a/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-host.mdx +++ b/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-host.mdx @@ -16,6 +16,7 @@ import surrealdbIcon from '@assets/icons/surrealdb-icon.png'; alt="SurrealDB logo" width={100} height={100} + fit="contain" class:list={'float-inline-left icon'} data-zoom-off /> From 4a3aad5374f5139899e186b50a14b6abe318415d Mon Sep 17 00:00:00 2001 From: David Pine <7679720+IEvangelist@users.noreply.github.com> Date: Fri, 17 Jul 2026 13:22:32 -0500 Subject: [PATCH 3/7] docs: add synchronized C#/TypeScript AppHost tabs for data/AI integrations Convert C#-only AppHost snippets on the KurrentDB, SQLite, SurrealDB, and Meilisearch host pages into synchronized C# (AppHost.cs) and TypeScript (apphost.mts) peers, and remove the redundant capability notes that previously listed the TypeScript APIs instead of showing them. TypeScript shapes verified against CommunityToolkit/Aspire [AspireExport] attributes and committed apphost.mts example fixtures at commit b9d40479805b74ea20b7dc57cb659d46e6f11c43. SurrealDB WithLogLevel(LogLevel) and the callback WithSurrealist overload are C#-only ([AspireExportIgnore]); their polyglot string/options replacements are exported and used in the TypeScript tabs. RavenDB and Ollama host pages already had correct synchronized tabs (verified, unchanged). Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3d7f9a0c-8c6d-4579-9b43-b41a361fa19b --- .../databases/kurrentdb/kurrentdb-host.mdx | 102 ++++++++++- .../meilisearch/meilisearch-host.mdx | 94 +++++++++- .../databases/sqlite/sqlite-host.mdx | 101 ++++++++++- .../databases/surrealdb/surrealdb-host.mdx | 169 +++++++++++++++++- 4 files changed, 450 insertions(+), 16 deletions(-) diff --git a/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-host.mdx b/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-host.mdx index 2717c720c..0e273f29e 100644 --- a/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-host.mdx +++ b/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-host.mdx @@ -5,8 +5,9 @@ description: Learn how to use the Aspire KurrentDB Hosting integration to orches --- import { Image } from 'astro:assets'; -import { Aside, Badge, Steps } from '@astrojs/starlight/components'; +import { Aside, Badge, Steps, Tabs, TabItem } from '@astrojs/starlight/components'; import InstallPackage from '@components/InstallPackage.astro'; +import LearnMore from '@components/LearnMore.astro'; import kurrentIcon from '@assets/icons/kurrent-icon.png'; @@ -25,14 +26,13 @@ This article is the reference for the Aspire KurrentDB Hosting integration. It e If you're new to the KurrentDB integration, start with the [Get started with KurrentDB integrations](/integrations/databases/kurrentdb/kurrentdb-get-started/) guide. For how consuming apps read the connection information this page exposes, see [Connect to KurrentDB](../kurrentdb-connect/). - - ## Installation To start building an Aspire app that uses KurrentDB, install the [📦 CommunityToolkit.Aspire.Hosting.KurrentDB](https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.KurrentDB) NuGet package: + + + Or, choose a manual installation approach: @@ -45,10 +45,37 @@ Or, choose a manual installation approach: ``` + + + +```bash title="Terminal" +aspire add CommunityToolkit.Aspire.Hosting.KurrentDB +``` + + + Learn more about [`aspire add`](/reference/cli/commands/aspire-add/) in the command reference. + + +This updates your `aspire.config.json` with the KurrentDB hosting integration package: + +```json title="aspire.config.json" ins={3} +{ + "packages": { + "CommunityToolkit.Aspire.Hosting.KurrentDB": "*" + } +} +``` + + + + ## Add KurrentDB resource Once you've installed the hosting integration in your AppHost project, you can add a KurrentDB resource as shown in the following example: + + + ```csharp title="AppHost.cs" var builder = DistributedApplication.CreateBuilder(args); @@ -60,6 +87,25 @@ var exampleProject = builder.AddProject("apiservice") // After adding all resources, run the app... ``` + + + +```typescript title="apphost.mts" +import { createBuilder } from './.aspire/modules/aspire.mjs'; + +const builder = await createBuilder(); + +const kurrentdb = await builder.addKurrentDB("kurrentdb"); + +const exampleProject = await builder.addProject("apiservice", "../ExampleProject/ExampleProject.csproj"); +await exampleProject.withReference(kurrentdb); + +// After adding all resources, run the app... +``` + + + + 1. When Aspire adds a container image to the AppHost, as shown in the preceding example with the `docker.kurrent.io/kurrent-latest/kurrentdb` image, it creates a new KurrentDB instance on your local machine. @@ -76,6 +122,9 @@ var exampleProject = builder.AddProject("apiservice") Add a data volume to the KurrentDB resource as shown in the following example: + + + ```csharp title="AppHost.cs" var builder = DistributedApplication.CreateBuilder(args); @@ -88,12 +137,35 @@ var exampleProject = builder.AddProject("apiservice") // After adding all resources, run the app... ``` + + + +```typescript title="apphost.mts" +import { createBuilder } from './.aspire/modules/aspire.mjs'; + +const builder = await createBuilder(); + +const kurrentdb = await builder.addKurrentDB("kurrentdb"); +await kurrentdb.withDataVolume(); + +const exampleProject = await builder.addProject("apiservice", "../ExampleProject/ExampleProject.csproj"); +await exampleProject.withReference(kurrentdb); + +// After adding all resources, run the app... +``` + + + + The data volume is used to persist KurrentDB data outside the lifecycle of its container. The data volume is mounted at the `/var/lib/kurrentdb` path in the KurrentDB 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-kurrentdb-resource-with-data-bind-mount), see [Docker docs: Volumes](https://docs.docker.com/engine/storage/volumes). ## Add KurrentDB resource with data bind mount Add a data bind mount to the KurrentDB resource as shown in the following example: + + + ```csharp title="AppHost.cs" var builder = DistributedApplication.CreateBuilder(args); @@ -106,6 +178,26 @@ var exampleProject = builder.AddProject("apiservice") // After adding all resources, run the app... ``` + + + +```typescript title="apphost.mts" +import { createBuilder } from './.aspire/modules/aspire.mjs'; + +const builder = await createBuilder(); + +const kurrentdb = await builder.addKurrentDB("kurrentdb"); +await kurrentdb.withDataBindMount("C:\\KurrentDB\\Data"); + +const exampleProject = await builder.addProject("apiservice", "../ExampleProject/ExampleProject.csproj"); +await exampleProject.withReference(kurrentdb); + +// After adding all resources, run the app... +``` + + + + diff --git a/src/frontend/src/content/docs/integrations/databases/meilisearch/meilisearch-host.mdx b/src/frontend/src/content/docs/integrations/databases/meilisearch/meilisearch-host.mdx index b7fdc1c67..eb23072c7 100644 --- a/src/frontend/src/content/docs/integrations/databases/meilisearch/meilisearch-host.mdx +++ b/src/frontend/src/content/docs/integrations/databases/meilisearch/meilisearch-host.mdx @@ -78,6 +78,9 @@ This updates your `aspire.config.json` with the Meilisearch hosting integration Once you've installed the hosting integration in your AppHost project, you can add a Meilisearch resource as shown in the following example: + + + ```csharp title="AppHost.cs" var builder = DistributedApplication.CreateBuilder(args); @@ -89,9 +92,24 @@ var exampleProject = builder.AddProject("apiservice") // After adding all resources, run the app... ``` - + + + +```typescript title="apphost.mts" +import { createBuilder } from './.aspire/modules/aspire.mjs'; + +const builder = await createBuilder(); + +const meilisearch = await builder.addMeilisearch("meilisearch"); + +const exampleProject = await builder.addProject("apiservice", "../ExampleProject/ExampleProject.csproj"); +await exampleProject.withReference(meilisearch); + +// After adding all resources, run the app... +``` + + + @@ -111,6 +129,9 @@ var exampleProject = builder.AddProject("apiservice") To add a data volume to the Meilisearch resource, call the `WithDataVolume` method: + + + ```csharp title="AppHost.cs" var builder = DistributedApplication.CreateBuilder(args); @@ -123,12 +144,35 @@ var exampleProject = builder.AddProject("apiservice") // After adding all resources, run the app... ``` + + + +```typescript title="apphost.mts" +import { createBuilder } from './.aspire/modules/aspire.mjs'; + +const builder = await createBuilder(); + +const meilisearch = await builder.addMeilisearch("meilisearch"); +await meilisearch.withDataVolume(); + +const exampleProject = await builder.addProject("apiservice", "../ExampleProject/ExampleProject.csproj"); +await exampleProject.withReference(meilisearch); + +// After adding all resources, run the app... +``` + + + + The data volume is used to persist Meilisearch data outside the lifecycle of its container. The data volume is mounted at the `/meili_data` path in the Meilisearch container. 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-meilisearch-resource-with-data-bind-mount), see [Docker docs: Volumes](https://docs.docker.com/engine/storage/volumes). ## Add Meilisearch resource with data bind mount To add a data bind mount to the Meilisearch resource, call the `WithDataBindMount` method: + + + ```csharp title="AppHost.cs" var builder = DistributedApplication.CreateBuilder(args); @@ -141,6 +185,26 @@ var exampleProject = builder.AddProject("apiservice") // After adding all resources, run the app... ``` + + + +```typescript title="apphost.mts" +import { createBuilder } from './.aspire/modules/aspire.mjs'; + +const builder = await createBuilder(); + +const meilisearch = await builder.addMeilisearch("meilisearch"); +await meilisearch.withDataBindMount("C:\\Meilisearch\\Data"); + +const exampleProject = await builder.addProject("apiservice", "../ExampleProject/ExampleProject.csproj"); +await exampleProject.withReference(meilisearch); + +// After adding all resources, run the app... +``` + + + + @@ -151,6 +215,9 @@ Data bind mounts rely on the host machine's filesystem to persist Meilisearch da When you want to explicitly provide the master key used by the container image, you can provide it as a parameter: + + + ```csharp title="AppHost.cs" var builder = DistributedApplication.CreateBuilder(args); @@ -164,6 +231,27 @@ var exampleProject = builder.AddProject("apiservice") // After adding all resources, run the app... ``` + + + +```typescript title="apphost.mts" +import { createBuilder } from './.aspire/modules/aspire.mjs'; + +const builder = await createBuilder(); + +const masterKey = await builder.addParameter("masterKey", { secret: true }); + +const meilisearch = await builder.addMeilisearch("meilisearch", { masterKey }); + +const exampleProject = await builder.addProject("apiservice", "../ExampleProject/ExampleProject.csproj"); +await exampleProject.withReference(meilisearch); + +// After adding all resources, run the app... +``` + + + + When no `masterKey` parameter is provided, Aspire generates a strong master key automatically. ## Connection properties diff --git a/src/frontend/src/content/docs/integrations/databases/sqlite/sqlite-host.mdx b/src/frontend/src/content/docs/integrations/databases/sqlite/sqlite-host.mdx index dec77eafd..ee5e7151e 100644 --- a/src/frontend/src/content/docs/integrations/databases/sqlite/sqlite-host.mdx +++ b/src/frontend/src/content/docs/integrations/databases/sqlite/sqlite-host.mdx @@ -5,7 +5,7 @@ description: Learn how to use the Aspire SQLite Hosting integration to orchestra --- import { Image } from 'astro:assets'; -import { Aside, Badge, Steps } from '@astrojs/starlight/components'; +import { Aside, Badge, Steps, Tabs, TabItem } from '@astrojs/starlight/components'; import LearnMore from '@components/LearnMore.astro'; import sqliteIcon from '@assets/icons/sqlite-icon.png'; @@ -26,13 +26,16 @@ This article is the reference for the Aspire SQLite Hosting integration. It enum If you're new to the SQLite integration, start with the [Get started with SQLite integrations](/integrations/databases/sqlite/sqlite-get-started/) guide. For how consuming apps read the connection information this page exposes, see [Connect to SQLite](../sqlite-connect/). ## Installation To start building an Aspire app that uses SQLite, install the [📦 CommunityToolkit.Aspire.Hosting.Sqlite](https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.Sqlite) NuGet package in your AppHost project: + + + ```bash title="Terminal" aspire add sqlite ``` @@ -51,10 +54,37 @@ Or, choose a manual installation approach: ``` + + + +```bash title="Terminal" +aspire add sqlite +``` + + + Learn more about [`aspire add`](/reference/cli/commands/aspire-add/) in the command reference. + + +This updates your `aspire.config.json` with the SQLite hosting integration package: + +```json title="aspire.config.json" ins={3} +{ + "packages": { + "CommunityToolkit.Aspire.Hosting.Sqlite": "*" + } +} +``` + + + + ## Add SQLite resource Once you've installed the hosting integration in your AppHost project, you can add a SQLite resource: + + + ```csharp title="AppHost.cs" var builder = DistributedApplication.CreateBuilder(args); @@ -66,6 +96,25 @@ var exampleProject = builder.AddProject("apiservice") // After adding all resources, run the app... ``` + + + +```typescript title="apphost.mts" +import { createBuilder } from './.aspire/modules/aspire.mjs'; + +const builder = await createBuilder(); + +const sqlite = await builder.addSqlite("sqlite"); + +const exampleProject = await builder.addProject("apiservice", "../ExampleProject/ExampleProject.csproj"); +await exampleProject.withReference(sqlite); + +// After adding all resources, run the app... +``` + + + + 1. When Aspire adds a SQLite resource, as shown in the preceding example, it creates the database file in the user's temporary directory. No container is started because SQLite is an embedded, file-based database. @@ -82,6 +131,9 @@ var exampleProject = builder.AddProject("apiservice") By default, Aspire creates the SQLite database file in the user's temporary directory. To specify a custom location, provide the directory path and file name as arguments to `AddSqlite`: + + + ```csharp title="AppHost.cs" var builder = DistributedApplication.CreateBuilder(args); @@ -93,12 +145,37 @@ var exampleProject = builder.AddProject("apiservice") // After adding all resources, run the app... ``` + + + +```typescript title="apphost.mts" +import { createBuilder } from './.aspire/modules/aspire.mjs'; + +const builder = await createBuilder(); + +const sqlite = await builder.addSqlite("sqlite", { + databasePath: "C:\\Database\\Location", + databaseFileName: "my-database.db", +}); + +const exampleProject = await builder.addProject("apiservice", "../ExampleProject/ExampleProject.csproj"); +await exampleProject.withReference(sqlite); + +// After adding all resources, run the app... +``` + + + + The preceding code creates the SQLite database file at `C:\Database\Location\my-database.db`. The file is created if it doesn't already exist. ## Add SQLiteWeb resource To add a browser-based management UI alongside your SQLite database, use the `WithSqliteWeb` extension method: + + + ```csharp title="AppHost.cs" var builder = DistributedApplication.CreateBuilder(args); @@ -111,6 +188,26 @@ var exampleProject = builder.AddProject("apiservice") // After adding all resources, run the app... ``` + + + +```typescript title="apphost.mts" +import { createBuilder } from './.aspire/modules/aspire.mjs'; + +const builder = await createBuilder(); + +const sqlite = await builder.addSqlite("sqlite"); +await sqlite.withSqliteWeb(); + +const exampleProject = await builder.addProject("apiservice", "../ExampleProject/ExampleProject.csproj"); +await exampleProject.withReference(sqlite); + +// After adding all resources, run the app... +``` + + + + This adds a container based on [`ghcr.io/coleifer/sqlite-web`](https://github.com/coleifer/sqlite-web) connected to the same database file. Each `WithSqliteWeb` call creates one container per database. When you run the solution, the Aspire dashboard displays the SQLiteWeb resource with an endpoint — select it to open the SQLiteWeb UI in a new browser tab. ## Connection properties diff --git a/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-host.mdx b/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-host.mdx index dbda38654..d7ffa67a8 100644 --- a/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-host.mdx +++ b/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-host.mdx @@ -5,8 +5,9 @@ description: Learn how to use the Aspire SurrealDB Hosting integration to orches --- import { Image } from 'astro:assets'; -import { Aside, Badge, Steps } from '@astrojs/starlight/components'; +import { Aside, Badge, Steps, Tabs, TabItem } from '@astrojs/starlight/components'; import InstallPackage from '@components/InstallPackage.astro'; +import LearnMore from '@components/LearnMore.astro'; import surrealdbIcon from '@assets/icons/surrealdb-icon.png'; @@ -25,14 +26,13 @@ This article is the reference for the Aspire SurrealDB Hosting integration. It e If you're new to the SurrealDB integration, start with the [Get started with SurrealDB integrations](/integrations/databases/surrealdb/surrealdb-get-started/) guide. For how consuming apps read the connection information this page exposes, see [Connect to SurrealDB](../surrealdb-connect/). - - ## Installation To start building an Aspire app that uses SurrealDB, install the [📦 CommunityToolkit.Aspire.Hosting.SurrealDb](https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.SurrealDb) NuGet package: + + + Or, choose a manual installation approach: @@ -45,10 +45,37 @@ Or, choose a manual installation approach: ``` + + + +```bash title="Terminal" +aspire add CommunityToolkit.Aspire.Hosting.SurrealDb +``` + + + Learn more about [`aspire add`](/reference/cli/commands/aspire-add/) in the command reference. + + +This updates your `aspire.config.json` with the SurrealDB hosting integration package: + +```json title="aspire.config.json" ins={3} +{ + "packages": { + "CommunityToolkit.Aspire.Hosting.SurrealDb": "*" + } +} +``` + + + + ## Add SurrealDB resource Once you've installed the hosting integration in your AppHost project, you can add a SurrealDB server, namespace, and database resource as shown in the following example: + + + ```csharp title="AppHost.cs" var builder = DistributedApplication.CreateBuilder(args); @@ -63,6 +90,28 @@ builder.AddProject() // After adding all resources, run the app... ``` + + + +```typescript title="apphost.mts" +import { createBuilder } from './.aspire/modules/aspire.mjs'; + +const builder = await createBuilder(); + +const surreal = await builder.addSurrealServer("surreal"); +const ns = await surreal.addNamespace("ns"); +const db = await ns.addDatabase("db"); + +const exampleProject = await builder.addProject("apiservice", "../ExampleProject/ExampleProject.csproj"); +await exampleProject.withReference(db); +await exampleProject.waitFor(db); + +// After adding all resources, run the app... +``` + + + + 1. When Aspire adds a container image to the AppHost, as shown in the preceding example with the `docker.io/surrealdb/surrealdb` image, it creates a new SurrealDB instance on your local machine. @@ -83,6 +132,9 @@ builder.AddProject() To add [Surrealist](https://hub.docker.com/r/surrealdb/surrealist) to the SurrealDB server resource, call the `WithSurrealist` method: + + + ```csharp title="AppHost.cs" var builder = DistributedApplication.CreateBuilder(args); @@ -100,12 +152,39 @@ builder.AddProject() // After adding all resources, run the app... ``` + + + +```typescript title="apphost.mts" +import { createBuilder } from './.aspire/modules/aspire.mjs'; + +const builder = await createBuilder(); + +let surreal = await builder.addSurrealServer("surreal"); +surreal = await surreal.withSurrealist(); + +const ns = await surreal.addNamespace("ns"); +const db = await ns.addDatabase("db"); + +const exampleProject = await builder.addProject("apiservice", "../ExampleProject/ExampleProject.csproj"); +await exampleProject.withReference(db); +await exampleProject.waitFor(db); + +// After adding all resources, run the app... +``` + + + + Surrealist is a web-based user interface for interacting with your SurrealDB database visually. It lets you connect to any SurrealDB instance, execute queries, explore your tables, and design your schemas. ## Add SurrealDB resource with data bind mount To add a data bind mount to the SurrealDB resource, call the `WithDataBindMount` method: + + + ```csharp title="AppHost.cs" var builder = DistributedApplication.CreateBuilder(args); @@ -121,12 +200,39 @@ builder.AddProject() // After adding all resources, run the app... ``` + + + +```typescript title="apphost.mts" +import { createBuilder } from './.aspire/modules/aspire.mjs'; + +const builder = await createBuilder(); + +let surreal = await builder.addSurrealServer("surreal"); +surreal = await surreal.withDataBindMount("./data/surreal/data"); + +const ns = await surreal.addNamespace("ns"); +const db = await ns.addDatabase("db"); + +const exampleProject = await builder.addProject("apiservice", "../ExampleProject/ExampleProject.csproj"); +await exampleProject.withReference(db); +await exampleProject.waitFor(db); + +// After adding all resources, run the app... +``` + + + + Data bind mounts rely on the host machine's filesystem to persist SurrealDB data across container restarts. The mount path `./data/surreal/data` is resolved relative to the AppHost project directory. For more information on data bind mounts, see [Docker docs: Bind mounts](https://docs.docker.com/engine/storage/bind-mounts). ## Add SurrealDB resource with parameters When you want to explicitly provide the password used by the container image, you can provide it as a parameter: + + + ```csharp title="AppHost.cs" var builder = DistributedApplication.CreateBuilder(args); @@ -143,12 +249,39 @@ builder.AddProject() // After adding all resources, run the app... ``` + + + +```typescript title="apphost.mts" +import { createBuilder } from './.aspire/modules/aspire.mjs'; + +const builder = await createBuilder(); + +const password = await builder.addParameter("password", { secret: true }); + +const surreal = await builder.addSurrealServer("surreal", { password }); +const ns = await surreal.addNamespace("ns"); +const db = await ns.addDatabase("db"); + +const exampleProject = await builder.addProject("apiservice", "../ExampleProject/ExampleProject.csproj"); +await exampleProject.withReference(db); +await exampleProject.waitFor(db); + +// After adding all resources, run the app... +``` + + + + For more information on providing parameters, see [External parameters](/get-started/resources/). ## Configure logging To configure the log level for the SurrealDB container, call the `WithLogLevel` method: + + + ```csharp title="AppHost.cs" var builder = DistributedApplication.CreateBuilder(args); @@ -166,7 +299,31 @@ builder.AddProject() // After adding all resources, run the app... ``` -The `WithLogLevel` method enables verbose logging in the SurrealDB container, which is useful during development and debugging. + + + +```typescript title="apphost.mts" +import { createBuilder } from './.aspire/modules/aspire.mjs'; + +const builder = await createBuilder(); + +let surreal = await builder.addSurrealServer("surreal"); +surreal = await surreal.withLogLevel("Debug"); + +const ns = await surreal.addNamespace("ns"); +const db = await ns.addDatabase("db"); + +const exampleProject = await builder.addProject("apiservice", "../ExampleProject/ExampleProject.csproj"); +await exampleProject.withReference(db); +await exampleProject.waitFor(db); + +// After adding all resources, run the app... +``` + + + + +The `WithLogLevel` method enables verbose logging in the SurrealDB container, which is useful during development and debugging. The polyglot TypeScript AppHost accepts the log level as a string (for example, `"Trace"`, `"Debug"`, `"Information"`, `"Warning"`, `"Error"`, `"Critical"`, or `"None"`). ## Health checks From 50710ec88d292a7b5cb10270fa5d4bdc703a9a2a Mon Sep 17 00:00:00 2001 From: David Pine <7679720+IEvangelist@users.noreply.github.com> Date: Fri, 17 Jul 2026 13:28:19 -0500 Subject: [PATCH 4/7] docs: make data/AI AppHost tab examples runnable Replace the trailing '// After adding all resources, run the app...' placeholder in the newly paired C#/TypeScript AppHost snippets on the KurrentDB, SQLite, SurrealDB, and Meilisearch host pages with real run calls: builder.Build().Run(); in C# blocks and await builder.build().run(); in TypeScript blocks (15 C#/15 TS pairs, 30 total), so the tabs are complete runnable examples. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3d7f9a0c-8c6d-4579-9b43-b41a361fa19b --- .../databases/kurrentdb/kurrentdb-host.mdx | 12 +++++------ .../meilisearch/meilisearch-host.mdx | 16 +++++++-------- .../databases/sqlite/sqlite-host.mdx | 12 +++++------ .../databases/surrealdb/surrealdb-host.mdx | 20 +++++++++---------- 4 files changed, 30 insertions(+), 30 deletions(-) diff --git a/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-host.mdx b/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-host.mdx index 0e273f29e..577de1906 100644 --- a/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-host.mdx +++ b/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-host.mdx @@ -84,7 +84,7 @@ var kurrentdb = builder.AddKurrentDB("kurrentdb"); var exampleProject = builder.AddProject("apiservice") .WithReference(kurrentdb); -// After adding all resources, run the app... +builder.Build().Run(); ``` @@ -100,7 +100,7 @@ const kurrentdb = await builder.addKurrentDB("kurrentdb"); const exampleProject = await builder.addProject("apiservice", "../ExampleProject/ExampleProject.csproj"); await exampleProject.withReference(kurrentdb); -// After adding all resources, run the app... +await builder.build().run(); ``` @@ -134,7 +134,7 @@ var kurrentdb = builder.AddKurrentDB("kurrentdb") var exampleProject = builder.AddProject("apiservice") .WithReference(kurrentdb); -// After adding all resources, run the app... +builder.Build().Run(); ``` @@ -151,7 +151,7 @@ await kurrentdb.withDataVolume(); const exampleProject = await builder.addProject("apiservice", "../ExampleProject/ExampleProject.csproj"); await exampleProject.withReference(kurrentdb); -// After adding all resources, run the app... +await builder.build().run(); ``` @@ -175,7 +175,7 @@ var kurrentdb = builder.AddKurrentDB("kurrentdb") var exampleProject = builder.AddProject("apiservice") .WithReference(kurrentdb); -// After adding all resources, run the app... +builder.Build().Run(); ``` @@ -192,7 +192,7 @@ await kurrentdb.withDataBindMount("C:\\KurrentDB\\Data"); const exampleProject = await builder.addProject("apiservice", "../ExampleProject/ExampleProject.csproj"); await exampleProject.withReference(kurrentdb); -// After adding all resources, run the app... +await builder.build().run(); ``` diff --git a/src/frontend/src/content/docs/integrations/databases/meilisearch/meilisearch-host.mdx b/src/frontend/src/content/docs/integrations/databases/meilisearch/meilisearch-host.mdx index eb23072c7..620edeb7e 100644 --- a/src/frontend/src/content/docs/integrations/databases/meilisearch/meilisearch-host.mdx +++ b/src/frontend/src/content/docs/integrations/databases/meilisearch/meilisearch-host.mdx @@ -89,7 +89,7 @@ var meilisearch = builder.AddMeilisearch("meilisearch"); var exampleProject = builder.AddProject("apiservice") .WithReference(meilisearch); -// After adding all resources, run the app... +builder.Build().Run(); ``` @@ -105,7 +105,7 @@ const meilisearch = await builder.addMeilisearch("meilisearch"); const exampleProject = await builder.addProject("apiservice", "../ExampleProject/ExampleProject.csproj"); await exampleProject.withReference(meilisearch); -// After adding all resources, run the app... +await builder.build().run(); ``` @@ -141,7 +141,7 @@ var meilisearch = builder.AddMeilisearch("meilisearch") var exampleProject = builder.AddProject("apiservice") .WithReference(meilisearch); -// After adding all resources, run the app... +builder.Build().Run(); ``` @@ -158,7 +158,7 @@ await meilisearch.withDataVolume(); const exampleProject = await builder.addProject("apiservice", "../ExampleProject/ExampleProject.csproj"); await exampleProject.withReference(meilisearch); -// After adding all resources, run the app... +await builder.build().run(); ``` @@ -182,7 +182,7 @@ var meilisearch = builder.AddMeilisearch("meilisearch") var exampleProject = builder.AddProject("apiservice") .WithReference(meilisearch); -// After adding all resources, run the app... +builder.Build().Run(); ``` @@ -199,7 +199,7 @@ await meilisearch.withDataBindMount("C:\\Meilisearch\\Data"); const exampleProject = await builder.addProject("apiservice", "../ExampleProject/ExampleProject.csproj"); await exampleProject.withReference(meilisearch); -// After adding all resources, run the app... +await builder.build().run(); ``` @@ -228,7 +228,7 @@ var meilisearch = builder.AddMeilisearch("meilisearch", masterKey); var exampleProject = builder.AddProject("apiservice") .WithReference(meilisearch); -// After adding all resources, run the app... +builder.Build().Run(); ``` @@ -246,7 +246,7 @@ const meilisearch = await builder.addMeilisearch("meilisearch", { masterKey }); const exampleProject = await builder.addProject("apiservice", "../ExampleProject/ExampleProject.csproj"); await exampleProject.withReference(meilisearch); -// After adding all resources, run the app... +await builder.build().run(); ``` diff --git a/src/frontend/src/content/docs/integrations/databases/sqlite/sqlite-host.mdx b/src/frontend/src/content/docs/integrations/databases/sqlite/sqlite-host.mdx index ee5e7151e..944d87a07 100644 --- a/src/frontend/src/content/docs/integrations/databases/sqlite/sqlite-host.mdx +++ b/src/frontend/src/content/docs/integrations/databases/sqlite/sqlite-host.mdx @@ -93,7 +93,7 @@ var sqlite = builder.AddSqlite("sqlite"); var exampleProject = builder.AddProject("apiservice") .WithReference(sqlite); -// After adding all resources, run the app... +builder.Build().Run(); ``` @@ -109,7 +109,7 @@ const sqlite = await builder.addSqlite("sqlite"); const exampleProject = await builder.addProject("apiservice", "../ExampleProject/ExampleProject.csproj"); await exampleProject.withReference(sqlite); -// After adding all resources, run the app... +await builder.build().run(); ``` @@ -142,7 +142,7 @@ var sqlite = builder.AddSqlite("sqlite", "C:\\Database\\Location", "my-database. var exampleProject = builder.AddProject("apiservice") .WithReference(sqlite); -// After adding all resources, run the app... +builder.Build().Run(); ``` @@ -161,7 +161,7 @@ const sqlite = await builder.addSqlite("sqlite", { const exampleProject = await builder.addProject("apiservice", "../ExampleProject/ExampleProject.csproj"); await exampleProject.withReference(sqlite); -// After adding all resources, run the app... +await builder.build().run(); ``` @@ -185,7 +185,7 @@ var sqlite = builder.AddSqlite("sqlite") var exampleProject = builder.AddProject("apiservice") .WithReference(sqlite); -// After adding all resources, run the app... +builder.Build().Run(); ``` @@ -202,7 +202,7 @@ await sqlite.withSqliteWeb(); const exampleProject = await builder.addProject("apiservice", "../ExampleProject/ExampleProject.csproj"); await exampleProject.withReference(sqlite); -// After adding all resources, run the app... +await builder.build().run(); ``` diff --git a/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-host.mdx b/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-host.mdx index d7ffa67a8..bb9c49831 100644 --- a/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-host.mdx +++ b/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-host.mdx @@ -87,7 +87,7 @@ builder.AddProject() .WithReference(db) .WaitFor(db); -// After adding all resources, run the app... +builder.Build().Run(); ``` @@ -106,7 +106,7 @@ const exampleProject = await builder.addProject("apiservice", "../ExampleProject await exampleProject.withReference(db); await exampleProject.waitFor(db); -// After adding all resources, run the app... +await builder.build().run(); ``` @@ -149,7 +149,7 @@ builder.AddProject() .WithReference(db) .WaitFor(db); -// After adding all resources, run the app... +builder.Build().Run(); ``` @@ -170,7 +170,7 @@ const exampleProject = await builder.addProject("apiservice", "../ExampleProject await exampleProject.withReference(db); await exampleProject.waitFor(db); -// After adding all resources, run the app... +await builder.build().run(); ``` @@ -197,7 +197,7 @@ builder.AddProject() .WithReference(db) .WaitFor(db); -// After adding all resources, run the app... +builder.Build().Run(); ``` @@ -218,7 +218,7 @@ const exampleProject = await builder.addProject("apiservice", "../ExampleProject await exampleProject.withReference(db); await exampleProject.waitFor(db); -// After adding all resources, run the app... +await builder.build().run(); ``` @@ -246,7 +246,7 @@ builder.AddProject() .WithReference(db) .WaitFor(db); -// After adding all resources, run the app... +builder.Build().Run(); ``` @@ -267,7 +267,7 @@ const exampleProject = await builder.addProject("apiservice", "../ExampleProject await exampleProject.withReference(db); await exampleProject.waitFor(db); -// After adding all resources, run the app... +await builder.build().run(); ``` @@ -296,7 +296,7 @@ builder.AddProject() .WithReference(db) .WaitFor(db); -// After adding all resources, run the app... +builder.Build().Run(); ``` @@ -317,7 +317,7 @@ const exampleProject = await builder.addProject("apiservice", "../ExampleProject await exampleProject.withReference(db); await exampleProject.waitFor(db); -// After adding all resources, run the app... +await builder.build().run(); ``` From 6a8d31d50b9b1815f6cb6e3ef062f037b8523ae7 Mon Sep 17 00:00:00 2001 From: David Pine <7679720+IEvangelist@users.noreply.github.com> Date: Fri, 17 Jul 2026 13:41:35 -0500 Subject: [PATCH 5/7] Use theme-aware KurrentDB logos Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: b620d5b1-e665-4478-974d-cb5d2b825c28 --- .../databases/kurrentdb/kurrentdb-connect.mdx | 13 +++++++------ .../databases/kurrentdb/kurrentdb-get-started.mdx | 13 +++++++------ .../databases/kurrentdb/kurrentdb-host.mdx | 13 +++++++------ 3 files changed, 21 insertions(+), 18 deletions(-) diff --git a/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-connect.mdx b/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-connect.mdx index 4b0eac8ce..d142fc122 100644 --- a/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-connect.mdx +++ b/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-connect.mdx @@ -4,21 +4,22 @@ seoTitle: "Connect to KurrentDB from Aspire apps (C#, Node.js)" description: Learn how to connect to KurrentDB from C#, Go, Python, and TypeScript consuming apps in an Aspire solution. --- -import { Image } from 'astro:assets'; import { Aside, Badge, Tabs, TabItem } from '@astrojs/starlight/components'; import InstallDotNetPackage from '@components/InstallDotNetPackage.astro'; +import ThemeImage from '@components/ThemeImage.astro'; import kurrentIcon from '@assets/icons/kurrent-icon.png'; +import kurrentLightIcon from '@assets/icons/kurrent-light-icon.png'; -KurrentDB logo This page describes how consuming apps connect to a KurrentDB resource that's already modeled in your AppHost. For the AppHost API surface — adding a KurrentDB resource, data volumes, data bind mounts, and more — see [KurrentDB Hosting integration](../kurrentdb-host/). diff --git a/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-get-started.mdx b/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-get-started.mdx index 46f8a573b..caee48116 100644 --- a/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-get-started.mdx +++ b/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-get-started.mdx @@ -3,20 +3,21 @@ title: Get started with the KurrentDB integrations description: Learn how the Aspire KurrentDB integrations host a KurrentDB event store resource and connect the .NET client to your Aspire AppHost projects. --- -import { Image } from 'astro:assets'; import { Badge, LinkButton, Steps } from '@astrojs/starlight/components'; +import ThemeImage from '@components/ThemeImage.astro'; import kurrentIcon from '@assets/icons/kurrent-icon.png'; +import kurrentLightIcon from '@assets/icons/kurrent-light-icon.png'; -KurrentDB logo [KurrentDB](https://kurrent.io/) is an open-source event-sourcing database (formerly EventStoreDB) purpose-built for storing events as an immutable, append-only log. It delivers high availability and reliability for event-driven and event-sourcing architectures. The Aspire KurrentDB integration lets you model a KurrentDB server as a first-class resource in your AppHost, then hand the connection information to any consuming app — regardless of language. diff --git a/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-host.mdx b/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-host.mdx index 577de1906..fb919a2f7 100644 --- a/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-host.mdx +++ b/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-host.mdx @@ -4,22 +4,23 @@ seoTitle: "Set up KurrentDB in the Aspire AppHost: hosting integration" description: Learn how to use the Aspire KurrentDB Hosting integration to orchestrate and configure a KurrentDB resource in an Aspire solution. --- -import { Image } from 'astro:assets'; import { Aside, Badge, Steps, Tabs, TabItem } from '@astrojs/starlight/components'; import InstallPackage from '@components/InstallPackage.astro'; import LearnMore from '@components/LearnMore.astro'; +import ThemeImage from '@components/ThemeImage.astro'; import kurrentIcon from '@assets/icons/kurrent-icon.png'; +import kurrentLightIcon from '@assets/icons/kurrent-light-icon.png'; -KurrentDB logo This article is the reference for the Aspire KurrentDB Hosting integration. It enumerates the AppHost C# APIs that you use to model a KurrentDB resource in your [`AppHost`](/get-started/app-host/) project. From b5ac771e48280e071ef8017d76c4f6456d7b4eb6 Mon Sep 17 00:00:00 2001 From: David Pine <7679720+IEvangelist@users.noreply.github.com> Date: Fri, 17 Jul 2026 13:53:33 -0500 Subject: [PATCH 6/7] Use language-neutral data integration guidance Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: b620d5b1-e665-4478-974d-cb5d2b825c28 --- .../integrations/databases/kurrentdb/kurrentdb-host.mdx | 2 +- .../integrations/databases/sqlite/sqlite-get-started.mdx | 6 ------ .../integrations/databases/surrealdb/surrealdb-host.mdx | 2 +- 3 files changed, 2 insertions(+), 8 deletions(-) diff --git a/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-host.mdx b/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-host.mdx index fb919a2f7..6d567d6c3 100644 --- a/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-host.mdx +++ b/src/frontend/src/content/docs/integrations/databases/kurrentdb/kurrentdb-host.mdx @@ -23,7 +23,7 @@ import kurrentLightIcon from '@assets/icons/kurrent-light-icon.png'; classOverride="float-inline-left icon" /> -This article is the reference for the Aspire KurrentDB Hosting integration. It enumerates the AppHost C# APIs that you use to model a KurrentDB resource in your [`AppHost`](/get-started/app-host/) project. +This article is the reference for the Aspire KurrentDB Hosting integration. It enumerates the AppHost APIs that you use to model a KurrentDB resource in your [`AppHost`](/get-started/app-host/) project. If you're new to the KurrentDB integration, start with the [Get started with KurrentDB integrations](/integrations/databases/kurrentdb/kurrentdb-get-started/) guide. For how consuming apps read the connection information this page exposes, see [Connect to KurrentDB](../kurrentdb-connect/). diff --git a/src/frontend/src/content/docs/integrations/databases/sqlite/sqlite-get-started.mdx b/src/frontend/src/content/docs/integrations/databases/sqlite/sqlite-get-started.mdx index 75a730c94..6168545de 100644 --- a/src/frontend/src/content/docs/integrations/databases/sqlite/sqlite-get-started.mdx +++ b/src/frontend/src/content/docs/integrations/databases/sqlite/sqlite-get-started.mdx @@ -54,12 +54,6 @@ architecture-beta The **hosting integration** lives in your AppHost project and models the SQLite database file as a resource. Because SQLite is an embedded, file-based database, there is no container to start — Aspire simply tracks the database file path and injects it into consuming apps as environment variables. -import { Aside } from '@astrojs/starlight/components'; - - - Getting there is a two-step process: model the SQLite resource in your AppHost, then connect to the database from each app that needs it. diff --git a/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-host.mdx b/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-host.mdx index bb9c49831..7539d45a2 100644 --- a/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-host.mdx +++ b/src/frontend/src/content/docs/integrations/databases/surrealdb/surrealdb-host.mdx @@ -22,7 +22,7 @@ import surrealdbIcon from '@assets/icons/surrealdb-icon.png'; data-zoom-off /> -This article is the reference for the Aspire SurrealDB Hosting integration. It enumerates the AppHost C# APIs that you use to model a SurrealDB server, namespace, and database as resources in your [`AppHost`](/get-started/app-host/) project. +This article is the reference for the Aspire SurrealDB Hosting integration. It enumerates the AppHost APIs that you use to model a SurrealDB server, namespace, and database as resources in your [`AppHost`](/get-started/app-host/) project. If you're new to the SurrealDB integration, start with the [Get started with SurrealDB integrations](/integrations/databases/surrealdb/surrealdb-get-started/) guide. For how consuming apps read the connection information this page exposes, see [Connect to SurrealDB](../surrealdb-connect/). From d0e99b64f807f8a21f40adebf313266d4ddeb8f7 Mon Sep 17 00:00:00 2001 From: David Pine <7679720+IEvangelist@users.noreply.github.com> Date: Fri, 17 Jul 2026 14:54:26 -0500 Subject: [PATCH 7/7] docs: address PR review feedback for RavenDB and MeiliSearch pages Replace the trailing '// After adding all resources, run the app...' placeholder in every AppHost example on the RavenDB host page with real run calls (builder.Build().Run(); in C#, await builder.build().run(); in TypeScript; 6 C#/5 TS), so the samples are complete and runnable as written. Canonicalize the MeiliSearch client NuGet package label and link on the Meilisearch connect page to the official case-sensitive id 'MeiliSearch' (nuget.org install snippet and the Toolkit's Directory.Packages.props use this casing). The C# 'MeilisearchClient' type and 'using Meilisearch;' namespace are unchanged, matching the SDK. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3d7f9a0c-8c6d-4579-9b43-b41a361fa19b --- .../meilisearch/meilisearch-connect.mdx | 2 +- .../databases/ravendb/ravendb-host.mdx | 22 +++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/frontend/src/content/docs/integrations/databases/meilisearch/meilisearch-connect.mdx b/src/frontend/src/content/docs/integrations/databases/meilisearch/meilisearch-connect.mdx index 28eec18fd..1cfc6648f 100644 --- a/src/frontend/src/content/docs/integrations/databases/meilisearch/meilisearch-connect.mdx +++ b/src/frontend/src/content/docs/integrations/databases/meilisearch/meilisearch-connect.mdx @@ -145,7 +145,7 @@ Aspire client integrations enable health checks by default. The Meilisearch clie #### Read environment variables in C\# -If you prefer not to use the Aspire client integration, you can read the Aspire-injected connection properties from the environment and construct a `MeilisearchClient` directly using the [📦 Meilisearch](https://www.nuget.org/packages/Meilisearch/) NuGet package: +If you prefer not to use the Aspire client integration, you can read the Aspire-injected connection properties from the environment and construct a `MeilisearchClient` directly using the [📦 MeiliSearch](https://www.nuget.org/packages/MeiliSearch/) NuGet package: ```csharp title="Program.cs" using Meilisearch; diff --git a/src/frontend/src/content/docs/integrations/databases/ravendb/ravendb-host.mdx b/src/frontend/src/content/docs/integrations/databases/ravendb/ravendb-host.mdx index 34aec8c94..53879a4bb 100644 --- a/src/frontend/src/content/docs/integrations/databases/ravendb/ravendb-host.mdx +++ b/src/frontend/src/content/docs/integrations/databases/ravendb/ravendb-host.mdx @@ -91,7 +91,7 @@ builder.AddProject("apiservice") .WithReference(ravendb) .WaitFor(ravendb); -// After adding all resources, run the app... +builder.Build().Run(); ``` @@ -109,7 +109,7 @@ const apiService = await builder.addProject("apiservice", "../ExampleProject/Exa await apiService.withReference(ravendb); await apiService.waitFor(ravendb); -// After adding all resources, run the app... +await builder.build().run(); ``` @@ -154,7 +154,7 @@ builder.AddProject("apiservice") .WithReference(ravendb) .WaitFor(ravendb); -// After adding all resources, run the app... +builder.Build().Run(); ``` @@ -172,7 +172,7 @@ const apiService = await builder.addProject("apiservice", "../ExampleProject/Exa await apiService.withReference(ravendb); await apiService.waitFor(ravendb); -// After adding all resources, run the app... +await builder.build().run(); ``` @@ -197,7 +197,7 @@ builder.AddProject("apiservice") .WithReference(ravendb) .WaitFor(ravendb); -// After adding all resources, run the app... +builder.Build().Run(); ``` @@ -217,7 +217,7 @@ const apiService = await builder.addProject("apiservice", "../ExampleProject/Exa await apiService.withReference(ravendb); await apiService.waitFor(ravendb); -// After adding all resources, run the app... +await builder.build().run(); ``` @@ -244,7 +244,7 @@ builder.AddProject("apiservice") .WithReference(ravendb) .WaitFor(ravendb); -// After adding all resources, run the app... +builder.Build().Run(); ``` @@ -264,7 +264,7 @@ const apiService = await builder.addProject("apiservice", "../ExampleProject/Exa await apiService.withReference(ravendb); await apiService.waitFor(ravendb); -// After adding all resources, run the app... +await builder.build().run(); ``` @@ -296,7 +296,7 @@ builder.AddProject("apiservice") .WithReference(ravendb) .WaitFor(ravendb); -// After adding all resources, run the app... +builder.Build().Run(); ``` @@ -317,7 +317,7 @@ const apiService = await builder.addProject("apiservice", "../ExampleProject/Exa await apiService.withReference(ravendb); await apiService.waitFor(ravendb); -// After adding all resources, run the app... +await builder.build().run(); ``` @@ -345,7 +345,7 @@ builder.AddProject("apiservice") .WithReference(ravendb) .WaitFor(ravendb); -// After adding all resources, run the app... +builder.Build().Run(); ```