Skip to content

Layer B tracking: Aspire Deno hosting (AddDenoApp / DenoAppResource) #320

Description

@rickylabs

Layer B tracking — Aspire Deno hosting (AddDenoApp / DenoAppResource)

Part of the Deno-on-Aspire dogfood proof (umbrella: #295). This issue tracks Layer B only, the
app-model hosting layer. It needs its own upstream tracking issuemicrosoft/aspire#16218 is
Layer-A (CLI toolchain) scope, not hosting.

Feature

Fork rickylabs/aspire branch feat/deno-hosting-adddenoapp adds AddDenoApp / DenoAppResource to
Aspire.Hosting.JavaScript (the same assembly that ships AddBunApp). deno run -A;
WithDenoDefaults sets OTEL_DENO=true + WithOtlpExporter() (native OTel, zero app SDK);
deny-by-default perms; denoland/deno:2 single-stage publish, non-root deno user; VS Code
type:"deno" debug config; dev-cert trust; auto package-manager detection.

Parity verdict vs community toolkit

CommunityToolkit.Aspire.Hosting.Deno (stable 13.4.0, ~62.8K downloads) hosts Deno as an
executable-on-PATH wrapper. Layer B covers 100% of its surface and adds native OTEL_DENO zero-SDK
telemetry, denoland/deno:2 publish, type:"deno" debug, and dev-cert trust — all provably absent
from the community package. Full matrix + verdict: aspire-deno-parity-and-motivation.md.

Open follow-ups (gaps to close before upstreaming)

Proof (dogfooded against NetScript)

Dogfood branch dogfood/aspire-deno-runtime (commit 75e4dea7) swaps NetScript services + plugins
onto AddDenoApp. Live boot: resource source=deno, appArgs=["run","-A","src/main.ts"],
Running/Healthy, GET /health 200; OTEL_DENO denoApp 3-var + fork-injected OTLP endpoint, zero
app-side OpenTelemetry SDK. Targeted harness cb2c3e98 — 12/12 PASS. Full scaffold.runtime E2E
(warm Docker, server 29.6.1, two runs): 11 passed / 1 failed — all 11 swap-relevant steps green
(scaffold init incl. apphost.mts type-check, 4 plugin installs, plugin list, aspire
restore/start/stop); the lone failure is database.init hitting the operation-runner's 900s cap,
which is swap-orthogonal: db init boots the AppHost in db-cli-mode short-circuit whose targets
come only from infrastructure.databases (never the swapped addDenoApp services/plugins), so it
exercises the untouched addExecutable DB path — the known pre-existing Prisma schema-engine
db-init flake (#98/#145), reproduced identically across both runs. Node-free proof: stack runs
entirely on Deno (node-free-proof.md).

Independence

Functionally standalone; merge after Layer A (Layer-A-first order). Does not require Layer A to build.

Guardrails

Evidence-only. Do NOT open the upstream Aspire PR without explicit user go.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions