Nextended.Aspire.Hosting.WebDataStudio
10.1.30
See the version list below for details.
dotnet add package Nextended.Aspire.Hosting.WebDataStudio --version 10.1.30
NuGet\Install-Package Nextended.Aspire.Hosting.WebDataStudio -Version 10.1.30
<PackageReference Include="Nextended.Aspire.Hosting.WebDataStudio" Version="10.1.30" />
<PackageVersion Include="Nextended.Aspire.Hosting.WebDataStudio" Version="10.1.30" />
<PackageReference Include="Nextended.Aspire.Hosting.WebDataStudio" />
paket add Nextended.Aspire.Hosting.WebDataStudio --version 10.1.30
#r "nuget: Nextended.Aspire.Hosting.WebDataStudio, 10.1.30"
#:package Nextended.Aspire.Hosting.WebDataStudio@10.1.30
#addin nuget:?package=Nextended.Aspire.Hosting.WebDataStudio&version=10.1.30
#tool nuget:?package=Nextended.Aspire.Hosting.WebDataStudio&version=10.1.30
<p align="center"> <img src="https://raw.githubusercontent.com/fgilde/Nextended/main/icon.png" alt="Nextended" width="110" height="110"> </p>
Nextended.Aspire.Hosting.WebDataStudio
WebDataStudio — a browser database studio for PostgreSQL, MySQL, SQL Server, SQLite, Oracle, DuckDB, ClickHouse, MongoDB and Redis — wired to the databases of your stack.
📖 Documentation: English · Deutsch | 🧪 Runnable sample: WebDataStudio.AppHost
<p align="center"> <img src="https://raw.githubusercontent.com/fgilde/WebDataStudio/master/docs/assets/logo.png" alt="WebDataStudio" height="70"> </p>
Run WebDataStudio — a browser-based database studio for PostgreSQL, MySQL, SQL Server, SQLite, Oracle, DuckDB, ClickHouse, MongoDB and Redis — inside your Aspire stack, with the databases of that stack already wired up.
var builder = DistributedApplication.CreateBuilder(args);
var shop = builder.AddPostgres("pg").AddDatabase("shop").WithWebDataStudio();
var orders = builder.AddSqlServer("sql").AddDatabase("orders").WithWebDataStudio();
var cache = builder.AddRedis("cache").WithWebDataStudio();
builder.Build().Run();
One studio, three connections, no connection string typed anywhere. Open it from the Aspire
dashboard and the explorer already lists SHOP, ORDERS and CACHE.
Sharing one studio, or running several
WithWebDataStudio() creates the studio on the first call and attaches to it on every one after —
sharing is keyed on the studio's resource name.
// One shared studio (default name "webdatastudio")
shop.WithWebDataStudio();
orders.WithWebDataStudio();
// A second studio, for the databases that belong together
analytics.WithWebDataStudio(studioName: "analytics-studio");
warehouse.WithWebDataStudio(studioName: "analytics-studio");
// A studio you built yourself, with your own options
var admin = builder.AddWebDataStudio("admin-studio")
.WithLogin("admin", builder.AddParameter("studio-password", secret: true))
.WithReadOnly();
production.WithWebDataStudio(admin, color: "#e03131", group: "Production");
The same works from the studio's side, which reads better when one studio owns many databases:
builder.AddWebDataStudio("studio")
.WithReference(shop)
.WithReference(orders, connectionName: "ORDERS_PROD", readOnly: true, color: "#e03131")
.WithReference(cache)
.WithConnection("LEGACY", "Host=old-box;Database=legacy;Username=ro;Password=pw",
WebDataStudioEngine.PostgreSql, readOnly: true, group: "Legacy");
WithReferenceon a studio is this package's own overload. Aspire's built-in one would write aConnectionStrings__*variable, which the studio does not read; this one writes theWDS_CONN_*variables it does.
API
| Call | Effect |
|---|---|
AddWebDataStudio(name = "webdatastudio", port?, image?, tag?) |
Add the studio container: HTTP endpoint, health check, per-instance data volume. |
.WithReference(resource, connectionName?, engine?, readOnly?, group?, color?) |
Attach any resource that has a connection string. |
.WithConnection(name, connectionString, engine, …) |
Attach a database that is not part of the stack. Also takes a ReferenceExpression. |
.WithLogin(user, password) |
Guard the studio with a login. Both halves also accept an Aspire ParameterResource. |
.WithTitle(name) |
Name shown in the studio's header and browser tab. Defaults to the resource name; null leaves it unnamed. |
.WithReadOnly(readOnly = true) |
Make every connection read-only, enforced in the driver. |
.WithQueryTimeout(TimeSpan) |
Default statement timeout. |
.WithMaxRows(int) |
Default row cap per result. |
.WithSessionLimits(maxSessions?, idleTimeout?) |
Cap open sessions per connection and how long an idle one lives. |
.WithSecretKey(base64) |
Key for the secrets the studio stores; also takes a ParameterResource. |
.WithDataVolume(name?) / .WithDataBindMount(path) |
Put the studio's own data somewhere else. |
resource.WithWebDataStudio(configure?, studioName?, connectionName?, engine?) |
Attach from the database's side, creating or reusing the studio. |
resource.WithWebDataStudio(studio, …) |
Attach to a studio you built yourself. |
Engines
The engine is read from the resource type, so AddPostgres, AddSqlServer, AddMySql,
AddOracle, AddMongoDB, AddRedis, AddValkey and AddGarnet need no help. Anything else —
a container you wired up yourself, a connection string from configuration — takes an explicit
engine: argument, or the studio guesses from the connection string and skips the connection if
it cannot tell.
studio.WithReference(clickhouse, engine: WebDataStudioEngine.ClickHouse);
Notes
- Connection names become environment variables, so
shop-dbshows up asSHOP_DB. PassconnectionNamefor something nicer. Names ending in_ENGINE,_READONLY,_GROUPor_COLORare rejected: the studio reads those as settings for another connection. - Without
WithLoginthere is no login screen. That is the right default while the studio only listens on your machine — put a login on it before you expose the endpoint. - Each studio gets its own named volume, so two studios in one stack never share saved connections.
- The studio shows its resource name in its header and browser tab, so three of them in one stack
are told apart at a glance.
WithTitlechanges it,WithTitle(null)removes it. - The studio image is
ghcr.io/fgilde/webdatastudioand is always re-pulled, because the default tag is a rollinglatest.
The sample
Tests/TestProjects/WebDataStudio.AppHost
starts PostgreSQL, SQL Server, MongoDB and Redis behind three studios, and seeds the PostgreSQL
database with a small shop — customers, products, orders, order items and a view — so there is
something to click around in from the first run.
dotnet run --project Tests/TestProjects/WebDataStudio.AppHost
Supported frameworks
net8.0net9.0net10.0
Dependencies
- Aspire.Hosting.AppHost
The Nextended family
<details> <summary>All 18 Nextended packages</summary>
Core libraries
- Nextended.Core — Foundation library — extension methods, custom types (Money, Date, BaseId, SuperType), class mapping, deep clone, encryption, hashing and the code-generation attributes.
- Nextended.Cache — Expression-based caching — automatic cache keys from method expressions, CacheProvider with condition-based invalidation, thread-safe AddOrGetExisting.
Data access
- Nextended.EF — Entity Framework Core extensions — graph loading (LoadGraphAsync, IncludeAll, MultiInclude), declarative include definitions, paging, dynamic sorting and bulk operations.
ASP.NET Core & web
- Nextended.Web — ASP.NET Core utilities — zero-config OData (AddODataAuto), composable IQueryable OData appliers, strongly typed controller URLs, streaming download helpers and a background executor that can replay a captured request.
- Nextended.ResponseFilters — Fluent, provider-agnostic pipeline that redacts, masks, rounds, truncates, hashes, prunes and restructures response DTOs before serialization — per request, per user, per permission.
- Nextended.ResponseFilters.AspNetCore — ASP.NET Core adapter for Nextended.ResponseFilters — registers the pipeline as a global IAsyncResultFilter and replays structural edits against the serialized JSON tree.
UI libraries
- Nextended.Blazor — Blazor helpers — IBrowserFile extensions (bytes, data URLs, downloads), a hierarchical model for browsing inside uploaded zip/tar/rar archives, MIME-type detection and component-parameter reflection.
- Nextended.UI — WPF and Windows desktop helpers — a global input-binding manager with hold/sequence matching, DirectInput and XInput gamepad readers, key-bind capture controls, converters, behaviours, markup extensions and runtime-defined PropertyGrid types.
Code generation & tooling
- Nextended.Imaging — Image processing — aspect-preserving resize, crop, colour replacement, brightness-based foreground picking, thumbnail generation, byte/data-URL conversion and MIME detection from magic bytes.
- Nextended.CodeGen — Roslyn source generator — DTOs and interfaces from your entities, strongly typed classes from JSON/XML, lookup tables from Excel, and documentation from source files.
.NET Aspire hosting
- Nextended.Aspire — Conditional AppHost builder extensions — WithReferenceIf / WaitForIf / WithExplicitStartIf, strongly typed environment variables from config objects, HTTPS dev-cert wiring, Docker guards, GitHub-source resources and npm app discovery.
- Nextended.Aspire.Hosting.Supabase — The complete Supabase stack — Postgres, Auth (GoTrue), REST, Realtime, Storage, Studio, Kong and Edge Functions — as one composable Aspire resource.
- Nextended.Aspire.Hosting.N8n — The n8n workflow-automation platform as an Aspire resource, with Postgres persistence, workflow import and a typed client for triggering workflows from .NET.
- Nextended.Aspire.Hosting.Grafana — Grafana, Prometheus, Loki, Tempo, Promtail, cAdvisor, postgres_exporter and the OpenTelemetry Collector as composable resources with auto-provisioned datasources.
- Nextended.Aspire.Hosting.WebDataStudio — WebDataStudio — a browser database studio for PostgreSQL, MySQL, SQL Server, SQLite, Oracle, DuckDB, ClickHouse, MongoDB and Redis — wired to the databases of your stack. (this package)
- Nextended.Aspire.Hosting.AspireUI — AspireUI — the visual AppHost builder — as a resource inside your own Aspire stack, with an optional pre-seeded admin user and a starter stack built from your project paths.
- Nextended.Aspire.Hosting.LocalAI — Self-hosted, OpenAI-compatible multimodal AI — image generation, text-to-speech, speech-to-text and video — with gallery model management, GPU support and Open WebUI.
- Nextended.Aspire.Hosting.Php — Run PHP endpoints inside your Aspire stack — a docroot folder or a single router script served by PHP's built-in web server, with php.ini settings as fluent options.
</details>
Links
- 📦 NuGet package
- 📖 Documentation — English
- 📖 Dokumentation — Deutsch
- 🏠 Documentation portal
- 🧪 Runnable sample
- 🧑💻 Source code
- 🐛 Report an issue
License
GPL-3.0-or-later — see LICENSE.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Aspire.Hosting.AppHost (>= 13.5.0)
-
net8.0
- Aspire.Hosting.AppHost (>= 13.5.0)
-
net9.0
- Aspire.Hosting.AppHost (>= 13.5.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.