Aspire—Your Stack, Streamlined

7 min read Original article ↗
Free and open source

Aspire is a developer-first, always-free, open-source platform. Join a thriving community and help shape the future of modern development.

Why developers choose Aspire

Section titled “Why developers choose Aspire”

Code-centric control

Define your stack in code—type-safe and readable. Run locally, deploy anywhere without architectural changes.

Modular and extensible

Orchestrate front ends, APIs, containers, and databases with zero rewrites. Extend Aspire to fit your stack—deploy anywhere.

Observability from the start

Built-in OpenTelemetry delivers logs, traces, and health checks automatically—debug faster with zero setup.

Flexible deployments

Deploy anywhere—Kubernetes, cloud, or on-prem. Aspire adapts to your environment for consistent deployments without rewrites.

Define your stack in code

Section titled “Define your stack in code”

Aspire is modular, composable, and extensible. Configure relationships, deployment options, and dev-time flags in one place. Learn more about the AppHost.

var builder = DistributedApplication.CreateBuilder(args);

// This would be a rather boring AppHost ☹️...

// Toggle the options above to see what an AppHost might look like.

// For example, select "Front end" to add a frontend service.

builder.Build().Run();

var builder = DistributedApplication.CreateBuilder(args);

// Add frontend service

var frontend = builder.AddViteApp("frontend", "../frontend")

.WithHttpEndpoint(env: "PORT");

builder.Build().Run();

var builder = DistributedApplication.CreateBuilder(args);

// Add frontend service

var frontend = builder.AddViteApp("frontend", "../frontend")

.WithHttpEndpoint(env: "PORT");

// Add custom container

var customContainer = builder.AddContainer("mycustomcontainer", "myregistry/myapp", "latest")

.WithHttpEndpoint(targetPort: 8080);

builder.Build().Run();

var builder = DistributedApplication.CreateBuilder(args);

// Add database

var postgres = builder.AddPostgres("db")

.AddDatabase("appdata");

// Add frontend service

var frontend = builder.AddViteApp("frontend", "../frontend")

.WithHttpEndpoint(env: "PORT");

builder.Build().Run();

var builder = DistributedApplication.CreateBuilder(args);

// Add database

var postgres = builder.AddPostgres("db")

.AddDatabase("appdata");

// Add frontend service

var frontend = builder.AddViteApp("frontend", "../frontend")

.WithHttpEndpoint(env: "PORT");

// Add custom container

var customContainer = builder.AddContainer("mycustomcontainer", "myregistry/myapp", "latest")

.WithHttpEndpoint(targetPort: 8080);

builder.Build().Run();

var builder = DistributedApplication.CreateBuilder(args);

// Add API service

var api = builder.AddProject("api", "../api/ApiService.csproj");

// Add frontend service and reference the API

var frontend = builder.AddViteApp("frontend", "../frontend")

.WithHttpEndpoint(env: "PORT")

.WithReference(api);

builder.Build().Run();

var builder = DistributedApplication.CreateBuilder(args);

// Add API service

var api = builder.AddProject("api", "../api/ApiService.csproj");

// Add frontend service and reference the API

var frontend = builder.AddViteApp("frontend", "../frontend")

.WithHttpEndpoint(env: "PORT")

.WithReference(api);

// Add custom container

var customContainer = builder.AddContainer("mycustomcontainer", "myregistry/myapp", "latest")

.WithHttpEndpoint(targetPort: 8080);

builder.Build().Run();

var builder = DistributedApplication.CreateBuilder(args);

// Add database

var postgres = builder.AddPostgres("db")

.AddDatabase("appdata");

// Add API service and reference the database

var api = builder.AddProject("api", "../api/ApiService.csproj")

.WithReference(postgres);

// Add frontend service and reference the API

var frontend = builder.AddViteApp("frontend", "../frontend")

.WithHttpEndpoint(env: "PORT")

.WithReference(api);

builder.Build().Run();

var builder = DistributedApplication.CreateBuilder(args);

// Add database

var postgres = builder.AddPostgres("db")

.AddDatabase("appdata");

// Add API service and reference the database

var api = builder.AddProject("api", "../api/ApiService.csproj")

.WithReference(postgres);

// Add frontend service and reference the API

var frontend = builder.AddViteApp("frontend", "../frontend")

.WithHttpEndpoint(env: "PORT")

.WithReference(api);

// Add custom container

var customContainer = builder.AddContainer("mycustomcontainer", "myregistry/myapp", "latest")

.WithHttpEndpoint(targetPort: 8080);

builder.Build().Run();

var builder = DistributedApplication.CreateBuilder(args);

// Add database

var postgres = builder.AddPostgres("db")

.AddDatabase("appdata");

builder.Build().Run();

var builder = DistributedApplication.CreateBuilder(args);

// Add database

var postgres = builder.AddPostgres("db")

.AddDatabase("appdata");

// Add custom container

var customContainer = builder.AddContainer("mycustomcontainer", "myregistry/myapp", "latest")

.WithHttpEndpoint(targetPort: 8080);

builder.Build().Run();

var builder = DistributedApplication.CreateBuilder(args);

// Add API service

var api = builder.AddProject("api", "../api/ApiService.csproj");

builder.Build().Run();

var builder = DistributedApplication.CreateBuilder(args);

// Add API service

var api = builder.AddProject("api", "../api/ApiService.csproj");

// Add custom container

var customContainer = builder.AddContainer("mycustomcontainer", "myregistry/myapp", "latest")

.WithHttpEndpoint(targetPort: 8080);

builder.Build().Run();

var builder = DistributedApplication.CreateBuilder(args);

// Add database

var postgres = builder.AddPostgres("db")

.AddDatabase("appdata");

// Add API service and reference the database

var api = builder.AddProject("api", "../api/ApiService.csproj")

.WithReference(postgres);

builder.Build().Run();

var builder = DistributedApplication.CreateBuilder(args);

// Add database

var postgres = builder.AddPostgres("db")

.AddDatabase("appdata");

// Add API service and reference the database

var api = builder.AddProject("api", "../api/ApiService.csproj")

.WithReference(postgres);

// Add custom container

var customContainer = builder.AddContainer("mycustomcontainer", "myregistry/myapp", "latest")

.WithHttpEndpoint(targetPort: 8080);

builder.Build().Run();

var builder = DistributedApplication.CreateBuilder(args);

// Add custom container

var customContainer = builder.AddContainer("mycustomcontainer", "myregistry/myapp", "latest")

.WithHttpEndpoint(targetPort: 8080);

builder.Build().Run();

var builder = DistributedApplication.CreateBuilder(args);

// Add frontend service

var frontend = builder.AddViteApp("frontend", "../frontend")

.WithHttpEndpoint(env: "PORT")

.WithNpmPackageInstallation()

.PublishAsDockerFile();

builder.Build().Run();

var builder = DistributedApplication.CreateBuilder(args);

// Add frontend service

var frontend = builder.AddViteApp("frontend", "../frontend")

.WithHttpEndpoint(env: "PORT")

.WithNpmPackageInstallation()

.PublishAsDockerFile();

// Add custom container

var customContainer = builder.AddContainer("mycustomcontainer", "myregistry/myapp", "latest")

.WithHttpEndpoint(targetPort: 8080)

.PublishAsKubernetes();

builder.Build().Run();

var builder = DistributedApplication.CreateBuilder(args);

// Add database

var postgres = builder.AddAzurePostgresFlexibleServer("db")

.AddDatabase("appdata")

.WithDataVolume()

.RunAsContainer();

// Add frontend service

var frontend = builder.AddViteApp("frontend", "../frontend")

.WithHttpEndpoint(env: "PORT")

.WithNpmPackageInstallation()

.PublishAsDockerFile();

builder.Build().Run();

var builder = DistributedApplication.CreateBuilder(args);

// Add database

var postgres = builder.AddAzurePostgresFlexibleServer("db")

.AddDatabase("appdata")

.WithDataVolume()

.RunAsContainer();

// Add frontend service

var frontend = builder.AddViteApp("frontend", "../frontend")

.WithHttpEndpoint(env: "PORT")

.WithNpmPackageInstallation()

.PublishAsDockerFile();

// Add custom container

var customContainer = builder.AddContainer("mycustomcontainer", "myregistry/myapp", "latest")

.WithHttpEndpoint(targetPort: 8080)

.PublishAsKubernetes();

builder.Build().Run();

var builder = DistributedApplication.CreateBuilder(args);

// Add API service

var api = builder.AddProject("api", "../api/ApiService.csproj")

.PublishAsAzureContainerApp();

// Add frontend service and reference the API

var frontend = builder.AddViteApp("frontend", "../frontend")

.WithHttpEndpoint(env: "PORT")

.WithReference(api)

.WithNpmPackageInstallation()

.PublishAsDockerFile();

builder.Build().Run();

var builder = DistributedApplication.CreateBuilder(args);

// Add API service

var api = builder.AddProject("api", "../api/ApiService.csproj")

.PublishAsAzureContainerApp();

// Add frontend service and reference the API

var frontend = builder.AddViteApp("frontend", "../frontend")

.WithHttpEndpoint(env: "PORT")

.WithReference(api)

.WithNpmPackageInstallation()

.PublishAsDockerFile();

// Add custom container

var customContainer = builder.AddContainer("mycustomcontainer", "myregistry/myapp", "latest")

.WithHttpEndpoint(targetPort: 8080)

.PublishAsKubernetes();

builder.Build().Run();

var builder = DistributedApplication.CreateBuilder(args);

// Add database

var postgres = builder.AddAzurePostgresFlexibleServer("db")

.AddDatabase("appdata")

.WithDataVolume()

.RunAsContainer();

// Add API service and reference the database

var api = builder.AddProject("api", "../api/ApiService.csproj")

.WithReference(postgres)

.WaitFor(postgres)

.PublishAsAzureContainerApp();

// Add frontend service and reference the API

var frontend = builder.AddViteApp("frontend", "../frontend")

.WithHttpEndpoint(env: "PORT")

.WithReference(api)

.WithNpmPackageInstallation()

.PublishAsDockerFile();

builder.Build().Run();

var builder = DistributedApplication.CreateBuilder(args);

// Add database

var postgres = builder.AddAzurePostgresFlexibleServer("db")

.AddDatabase("appdata")

.WithDataVolume()

.RunAsContainer();

// Add API service and reference the database

var api = builder.AddProject("api", "../api/ApiService.csproj")

.WithReference(postgres)

.WaitFor(postgres)

.PublishAsAzureContainerApp();

// Add frontend service and reference the API

var frontend = builder.AddViteApp("frontend", "../frontend")

.WithHttpEndpoint(env: "PORT")

.WithReference(api)

.WithNpmPackageInstallation()

.PublishAsDockerFile();

// Add custom container

var customContainer = builder.AddContainer("mycustomcontainer", "myregistry/myapp", "latest")

.WithHttpEndpoint(targetPort: 8080)

.PublishAsKubernetes();

builder.Build().Run();

var builder = DistributedApplication.CreateBuilder(args);

// Add database

var postgres = builder.AddAzurePostgresFlexibleServer("db")

.AddDatabase("appdata")

.WithDataVolume()

.RunAsContainer();

builder.Build().Run();

var builder = DistributedApplication.CreateBuilder(args);

// Add database

var postgres = builder.AddAzurePostgresFlexibleServer("db")

.AddDatabase("appdata")

.WithDataVolume()

.RunAsContainer();

// Add custom container

var customContainer = builder.AddContainer("mycustomcontainer", "myregistry/myapp", "latest")

.WithHttpEndpoint(targetPort: 8080)

.PublishAsKubernetes();

builder.Build().Run();

var builder = DistributedApplication.CreateBuilder(args);

// Add API service

var api = builder.AddProject("api", "../api/ApiService.csproj")

.PublishAsAzureContainerApp();

builder.Build().Run();

var builder = DistributedApplication.CreateBuilder(args);

// Add API service

var api = builder.AddProject("api", "../api/ApiService.csproj")

.PublishAsAzureContainerApp();

// Add custom container

var customContainer = builder.AddContainer("mycustomcontainer", "myregistry/myapp", "latest")

.WithHttpEndpoint(targetPort: 8080)

.PublishAsKubernetes();

builder.Build().Run();

var builder = DistributedApplication.CreateBuilder(args);

// Add database

var postgres = builder.AddAzurePostgresFlexibleServer("db")

.AddDatabase("appdata")

.WithDataVolume()

.RunAsContainer();

// Add API service and reference the database

var api = builder.AddProject("api", "../api/ApiService.csproj")

.WithReference(postgres)

.WaitFor(postgres)

.PublishAsAzureContainerApp();

builder.Build().Run();

var builder = DistributedApplication.CreateBuilder(args);

// Add database

var postgres = builder.AddAzurePostgresFlexibleServer("db")

.AddDatabase("appdata")

.WithDataVolume()

.RunAsContainer();

// Add API service and reference the database

var api = builder.AddProject("api", "../api/ApiService.csproj")

.WithReference(postgres)

.WaitFor(postgres)

.PublishAsAzureContainerApp();

// Add custom container

var customContainer = builder.AddContainer("mycustomcontainer", "myregistry/myapp", "latest")

.WithHttpEndpoint(targetPort: 8080)

.PublishAsKubernetes();

builder.Build().Run();

var builder = DistributedApplication.CreateBuilder(args);

// Add custom container

var customContainer = builder.AddContainer("mycustomcontainer", "myregistry/myapp", "latest")

.WithHttpEndpoint(targetPort: 8080)

.PublishAsKubernetes();

builder.Build().Run();

Polyglot, multilanguage support

Section titled “Polyglot, multilanguage support”

Built for your stack, Aspire orchestrates apps in C#, Java, Python, JavaScript, TypeScript, Go, and more—use the languages you prefer. Explore how to model your apps.

Local-first, production-ready

Section titled “Local-first, production-ready”

Built for local development, Aspire mirrors production environments on your machine, eliminating “works on my machine” issues for smooth deployments. Learn about pipelines and app topology.

Local development with containerized services

Spin up and tear down complete staging environments for testing

Production cloud services—zero code changes

Redis

Shortlived container

PostgreSQL

Azure Database for PostgreSQL

PostgreSQL

Local container

Frontend

Azure Static Web Apps

Same model, different environments

Section titled “Same model, different environments”

Use Aspire’s CLI to spin everything up locally or create deployment artifacts during your CI/CD. Dive in, and build your first Aspire app.

OpenTelemetry developer dashboard

Section titled “OpenTelemetry developer dashboard”

Monitor logs, metrics, and traces in real time with the ready-to-use OpenTelemetry dashboard, integrated directly into your workflow. Explore the Aspire dashboard.

Explore integrations

Section titled “Explore integrations”

Multi-cloud, limitless integrations — Connect Aspire to Azure, AWS, or your own infrastructure. Tap into a vast ecosystem of integrations to power any stack, anywhere. Explore the integration gallery.

Search to learn more

Section titled “Search to learn more”

Don’t trust our buzzwords? Search our docs for your stack! Type your keywords here and see exactly how Aspire works with the tools you already use.

Search our docs and guides to find what you need:

User testimonials

Section titled “User testimonials”

Don’t just take our word for it! From indie hackers to enterprises, developers like you are building faster and shipping with confidence using Aspire. Explore the community building Aspire.

SP

Steven Price

Aspire lets developers be developers again.

RH

Russ Harding

I had someone start on a Monday morning and they were contributing code by lunch.

NC

Nick Chapsas

The best thing that happened in .NET since it went open source in 2014!

MJ

Milan Jovanović

I was surprised by how quickly Aspire got me from idea to running services.

NU

Nk54 (Reddit User)

I've never wanted to commit to a Microsoft technology this much.

CT

Craig Taylor

Hit F5 to begin — skip the setup boss fight, ship code faster.

SK

Sean Killeen

Aspire was easy to integrate with our existing container orchestration.

DC

Dan Clarke

OpenTelemetry out-of-the-box in the Aspire dashboard is a game changer for observability!

Ready for liftoff?

Section titled “Ready for liftoff?”

Get started with Aspire by installing the CLI, then dive into the Docs to learn how to model, run, and deploy your applications.

Get Aspire Install Aspire and streamline your workflow.

Explore docs Learn how to model, run, and deploy apps with Aspire.