Correct Community Toolkit add-on and migration docs#1378
Conversation
Document active Community Toolkit decorators for official resources and align Bun, Go, and Python guidance with graduated hosting packages. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 81ca82bd-f22c-4aa0-9a24-11989fd63704
Use contain fitting for plain Astro integration logos so their full artwork remains visible across themes and viewport sizes. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 81ca82bd-f22c-4aa0-9a24-11989fd63704
Clarify the deprecated Python package name and document the explicit Flyway startup and completion dependencies, including the TypeScript binding limitation. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 81ca82bd-f22c-4aa0-9a24-11989fd63704
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: b620d5b1-e665-4478-974d-cb5d2b825c28
There was a problem hiding this comment.
Pull request overview
This PR updates multiple Aspire integration docs to reflect the current Community Toolkit and official hosting/client API surfaces, and reconciles package→doc mappings + sidebar labels to match the new/updated pages.
Changes:
- Updates integration package mappings (
integration-docs.json) to point Community Toolkit “Extensions” packages at their extensions/connect pages. - Refreshes several integration pages (Keycloak, RabbitMQ, Python, Bun, Go, Redis/MongoDB/MySQL/PostgreSQL/SQL Server extensions, JS monorepos) with corrected API usage and expanded examples.
- Renames “Node.js extensions” to “JavaScript monorepo extensions” across docs and sidebar navigation.
Reviewed changes
Copilot reviewed 15 out of 15 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| src/frontend/src/data/integration-docs.json | Updates Community Toolkit package→doc href mappings (extensions/connect pages). |
| src/frontend/src/content/docs/integrations/security/keycloak.mdx | Updates TS addKeycloak usage; adds Toolkit WithPostgres/withPostgres section and connection-string TS example. |
| src/frontend/src/content/docs/integrations/messaging/rabbitmq/rabbitmq-connect.mdx | Clarifies config/env-var behavior; adds MassTransit Toolkit client guidance; formatting/SEO tweaks. |
| src/frontend/src/content/docs/integrations/frameworks/python.mdx | Updates migration guidance + parameter naming; replaces Toolkit messaging; adds clearer TS samples. |
| src/frontend/src/content/docs/integrations/frameworks/nodejs-extensions.mdx | Reframes page to Nx/Turborepo monorepos; adds C#/TS examples and install guidance. |
| src/frontend/src/content/docs/integrations/frameworks/javascript.mdx | Updates “See also” link label for the renamed monorepo extensions page. |
| src/frontend/src/content/docs/integrations/frameworks/go/go-host.mdx | Adds Toolkit→official migration guidance and normalizes frontmatter quoting. |
| src/frontend/src/content/docs/integrations/frameworks/bun-apps.mdx | Adds Toolkit deprecation + migration examples; adds TS samples and tabs. |
| src/frontend/src/content/docs/integrations/databases/sql-server/sql-server-extensions.mdx | Improves descriptions and examples; adds dbx section; normalizes TS samples. |
| src/frontend/src/content/docs/integrations/databases/postgres/postgresql-extensions.mdx | Improves descriptions and examples; adds dbx + Flyway section and TS notes. |
| src/frontend/src/content/docs/integrations/databases/mysql/mysql-extensions.mdx | Improves descriptions and examples; adds dbx section; normalizes TS samples. |
| src/frontend/src/content/docs/integrations/databases/mongodb/mongodb-extensions.mdx | Improves descriptions and examples; adds dbx section; normalizes TS samples. |
| src/frontend/src/content/docs/integrations/caching/redis-extensions.mdx | Normalizes examples; adds dbx section; clarifies build/run snippet. |
| src/frontend/src/content/docs/deployment/javascript-apps.mdx | Updates “See also” link label for renamed monorepo extensions page. |
| src/frontend/config/sidebar/integrations.topics.ts | Updates sidebar label for the renamed monorepo extensions page. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Frontend HTML artifact readyThe latest frontend build uploaded the This comment updates automatically when a new frontend build artifact is uploaded. |
IEvangelist
left a comment
There was a problem hiding this comment.
🤖 Automated doc-PR review (doc-pr-reviewer skill)
Posted as
COMMENT, notREQUEST_CHANGES. Per the review rubric this run's verdict is REQUEST_CHANGES (Phase A found onecontradictedclaim), but GitHub does not allow the PR author to formally request changes on their own PR, so this is submitted as a comment. Please treat the inline Contradicted finding below as a change request.
Summary
| Phase A source of truth | microsoft/aspire @ main 4f7be800af4aaf9541d2c4d52d675ab5369aa2be (verified == live main HEAD at review time) · CommunityToolkit/Aspire @ b9d40479805b74ea20b7dc57cb659d46e6f11c43 (the commit cited in the PR body) |
| Claims evaluated | ~14 claim groups (30+ individual API assertions): 1 contradicted, 1 verified-with-nuance, 12 verified |
Phase B (doc-tester, blind to source) |
13 changed routes exercised, all HTTP 200 · 0 critical issues · 5 minor warnings · 0 console errors |
Phase A (reads source) and Phase B (doc-tester, forbidden from reading source) were run independently and merged here.
Phase A — Claim verification
⛔ Contradicted (1)
integrations/frameworks/python.mdx → "Disable virtual environment" — see the inline comment on the <Aside>. In short: WithoutVirtualEnvironment does not exist in microsoft/aspire at main 4f7be80 (only WithVirtualEnvironment does). The Aside's claim that the opt-out is "available only to C# AppHosts" is false — the C# method is absent too, and the pre-existing .WithoutVirtualEnvironment() C# sample would not compile. The C# block is plain ```csharp (not twoslash), so the docs build won't catch it.
✅ Verified & verified-with-nuance claims (evidence — click to expand)
Community Toolkit (CommunityToolkit/Aspire @ b9d4047)
- dbx (
WithDbx/withDbx, Redis/MongoDB/MySQL/PostgreSQL/SQL Server): two overloads — public[AspireExportIgnore](Action<IResourceBuilder<DbxContainerResource>>? configureContainer = null, string? containerName = null)andinternal [AspireExport](string? containerName = null, string? imageTag = null)generating the TS binding. Matches "C# takes a container-config callback + containerName; TS binding takes containerName + imageTag." (Note:WithDbxis absent from the committedapi/*.cspublic surfaces because the exported overload isinternal; source is authoritative — possible product-side API-tracking gap, docs are accurate.) WithDbGate/WithAdminertarget types (corrected by PR): Redis→RedisResource, MongoDB→MongoDBServerResource, MySQL→MySqlServerResource, PostgreSQL→PostgresServerResource, SQL Server→SqlServerServerResource(double "Server" is correct). ✔- Flyway (
PostgreSQL.Extensions+Flyway):AddFlyway(name, migrationScriptsPath);WithFlywayMigration/WithFlywayRepairextendPostgresDatabaseResource(not the server); TS polyglot overloads create the Flyway resource internally, return the DB builder, add nowaitFor;WithFlywayCommandadds-url/-user/-password+migrate/repair. ✔ - JS monorepo extensions (
Hosting.JavaScript.Extensions):AddNxApp/AddTurborepoApp(name, workingDirectory);AddAppNx(name, appName)/Turborepo(name, filter)with internal[AspireExport]overloads;WithNpm/WithYarn/WithPnpm/WithBunon workspace resources;WithPackageManagerLaunch(MethodName="withPackageManagerLaunch");WithMappedEndpointPort<T:JavaScriptAppResource>. ✔ - Keycloak
WithPostgres(Keycloak.Extensions):WithPostgres(KeycloakResource, PostgresDatabaseResource database, ParameterResource? username = null, password = null, bool xaEnabled = false)[AspireExport]; setsKC_DB=postgres, JDBCKC_DB_URL, defaults creds todatabase.Resource.Parent.UserName/PasswordParameter, calls.WaitFor(database). ✔ - MassTransit (
MassTransit.RabbitMQ):AddMassTransitRabbitMq(name, configureOptions?, massTransitConfiguration?)+ generic<TBus:IBus>; readsConnectionStrings:{name}, throwsInvalidOperationExceptionif missing/empty; does not readMESSAGING_URIor bindAspire:RabbitMQ;DisableTelemetrygates OTel. ✔
Core Aspire (microsoft/aspire @ 4f7be80)
- Bun:
AddBunApp(name, appDirectory, scriptPath)[AspireExport]→addBunApp(name, appDirectory, scriptPath). ✔ - Go:
AddGoApp(name, appDirectory, packagePath = ".", string[]? buildTags, string? ldFlags, string? gcFlags, bool raceDetector = false)[AspireExport]. ✔ - Python:
AddPythonApp(name, appDirectory, scriptPath)(param renamedprojectDirectory→appDirectory);AddPythonExecutable(name, appDirectory, executableName);AddPythonModule(name, appDirectory, moduleName);AddUvicornApp(name, appDirectory, app)(renamedappName→app);WithVirtualEnvironment<T>(path, createIfNotExists = true)→withVirtualEnvironment; olderAddPythonApp(…scriptArgs)overloads are[Obsolete](supports "useWithArgs"). ✔ - Keycloak:
AddKeycloak(name, int? port = null, IResourceBuilder<ParameterResource>? adminUsername = null, adminPassword = null)[AspireExport]→ TS options objectaddKeycloak("keycloak", { port, adminUsername, adminPassword })(PR corrected from positional args). ✔ - RabbitMQ connection variables:
RabbitMQServerResource[AspireExport(ExposeProperties = true)]:IResourceWithConnectionString;GetConnectionProperties()yields Host, Port, Username, Password, Uri →MESSAGING_HOST/PORT/USERNAME/PASSWORD/URI(README:[RESOURCE]_[PROPERTY]);ConnectionStringExpression => UriExpression→ConnectionStrings:messaging/ConnectionStrings__messaging.AddConnectionStringyields only theConnectionStringsvalue. All PR-added claims verified. ✔ - Node package managers:
AddNodeApp/AddViteApp/AddNextJsApp/AddBunApp+ genericWithNpm/WithYarn/WithPnpm/WithBun<TResource>all inAspire.Hosting.JavaScript. ✔
MESSAGING_VIRTUALHOST = virtual host path (if set) on an unchanged context line. On current main, GetConnectionProperties() yields only Host/Port/Username/Password/Uri — no VirtualHost — so MESSAGING_VIRTUALHOST is not actually emitted at 4f7be80. Not introduced by this PR (the only added line is ConnectionStrings__messaging), so it's out of strict scope, but worth a gentle fix since this PR is a correctness pass on that file.
Phase B — Doc-tester results (blind to source)
Verbatim report from the doc-tester run against the locally served PR head (http://localhost:4325/, HEAD 8333a162).
Routes exercised (all HTTP 200): /integrations/frameworks/nodejs-extensions/, /integrations/frameworks/javascript/, /deployment/javascript-apps/, /integrations/caching/redis-extensions/, /integrations/databases/mongodb/mongodb-extensions/, /integrations/databases/mysql/mysql-extensions/, /integrations/databases/postgres/postgresql-extensions/, /integrations/databases/sql-server/sql-server-extensions/, /integrations/frameworks/bun-apps/, /integrations/frameworks/go/go-host/, /integrations/frameworks/python/, /integrations/messaging/rabbitmq/rabbitmq-connect/, /integrations/security/keycloak/.
Critical issues
None found. No route rendered 404; no MDX render failures; browser console reported 0 errors / 0 warnings; changed "See also" links resolved; the "JavaScript monorepo extensions" sidebar label points to /integrations/frameworks/nodejs-extensions/.
Warnings
- Python
scriptPathwording may confuse users (/integrations/frameworks/python/): the page correctly usesappDirectorybut later says "scriptPath— the Python script to run, relative to the project directory." A new user may wonder whether it's relative to the AppHost project or the PythonappDirectory. Recommendation: say "relative toappDirectory". - dbx sections need a short concept intro (Redis/MongoDB/MySQL/PostgreSQL/SQL Server): the docs don't explain what dbx is or how it differs from DbGate/Adminer, and they say TypeScript accepts
containerNameandimageTagbut samples only showcontainerName. Recommendation: add one sentence defining dbx and a small options example/table. - Flyway section assumes migration-script knowledge (
/integrations/databases/postgres/postgresql-extensions/): ordering is explained well, but a new user isn't shown what must exist in./migrations. Recommendation: add a minimal filename likeV1__init.sqlor link Flyway naming conventions. - JavaScript monorepo page assumes Nx/Turborepo familiarity (
/integrations/frameworks/nodejs-extensions/): terms like workspace path, child app, and Turborepofilterare lightly introduced. Recommendation: add a prerequisites note (user already has an Nx/Turborepo workspace; pass the workspace directory + app/package name). - RabbitMQ link convention (
/integrations/messaging/rabbitmq/rabbitmq-connect/): three links resolve but use relative paths (../rabbitmq-host/,…#add-rabbitmq-server-resource,…#pass-custom-environment-variables). If this PR requires site-relative links, prefer/integrations/messaging/rabbitmq/rabbitmq-host/.
Passed checks
Retitled page renders as "JavaScript monorepo hosting extensions" at the existing route; sidebar relabeled to "JavaScript monorepo extensions" and links correctly; JavaScript/deployment "See also" links relabeled and resolve; C#/TypeScript tabs render; deprecated-Toolkit asides render on Bun/Python; InstallPackage tabs render; Keycloak TS sample uses the options object addKeycloak('keycloak', { port: 8080 }); RabbitMQ MassTransit section renders and explains ConnectionStrings:messaging; all checked content links resolved; images/logos loaded.
Knowledge gaps (blind-user perspective)
A new user would still need external/prior knowledge for: Nx/Turborepo workspace structure; dbx purpose and image options; Flyway migration file naming; MassTransit consumer setup beyond the minimal sample; Keycloak production connection-string configuration.
Phase A read source at the SHAs above; Phase B was blind to source and tested the rendered site. Build/lint/spelling/style and unchanged-file content are out of scope (CI owns those).
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 81ca82bd-f22c-4aa0-9a24-11989fd63704
Important
This PR is ready for review, but it should be rebased and merged after #1377 because it performs the series' final package-mapping and sidebar reconciliation.
Summary
Validation
CommunityToolkit/Aspirecommitb9d40479805b74ea20b7dc57cb659d46e6f11c43.No local
pnpm buildwas run.