Skip to content

Manifest

The manifest.json is a document which aspire generates in order for it to work with different tooling.

If we run dotnet run --publisher manifest --output-path ./aspire-manifest.json we get the following:

{
"$schema": "https://json.schemastore.org/aspire-8.0.json",
"resources": {
"secrets": {
"type": "azure.bicep.v0",
"connectionString": "{secrets.outputs.vaultUri}",
"path": "secrets.module.bicep",
"params": {
"principalId": "",
"principalType": ""
}
},
"username": {
"type": "parameter.v0",
"value": "{username.inputs.value}",
"inputs": {
"value": {
"type": "string",
"secret": true
}
}
},
"password": {
"type": "parameter.v0",
"value": "{password.inputs.value}",
"inputs": {
"value": {
"type": "string",
"secret": true
}
}
},
"messaging": {
"type": "container.v0",
"connectionString": "amqp://guest:{messaging-password.value}@{messaging.bindings.tcp.host}:{messaging.bindings.tcp.port}",
"image": "docker.io/library/rabbitmq:4.0-management",
"env": {
"RABBITMQ_DEFAULT_USER": "guest",
"RABBITMQ_DEFAULT_PASS": "{messaging-password.value}"
},
"bindings": {
"tcp": {
"scheme": "tcp",
"protocol": "tcp",
"transport": "tcp",
"targetPort": 5672
},
"management": {
"scheme": "http",
"protocol": "tcp",
"transport": "http",
"targetPort": 15672
}
}
},
"consumers": {
"type": "project.v0",
"path": "../User.Email/User.Email.csproj",
"env": {
"OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EXCEPTION_LOG_ATTRIBUTES": "true",
"OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EVENT_LOG_ATTRIBUTES": "true",
"OTEL_DOTNET_EXPERIMENTAL_OTLP_RETRY": "in_memory",
"ConnectionStrings__messaging": "{messaging.connectionString}"
}
},
"auth": {
"type": "container.v0",
"connectionString": "Host={auth.bindings.tcp.host};Port={auth.bindings.tcp.port};Username={username.value};Password={password.value}",
"image": "docker.io/library/postgres:16.4",
"env": {
"POSTGRES_HOST_AUTH_METHOD": "scram-sha-256",
"POSTGRES_INITDB_ARGS": "--auth-host=scram-sha-256 --auth-local=scram-sha-256",
"POSTGRES_USER": "{username.value}",
"POSTGRES_PASSWORD": "{password.value}"
},
"bindings": {
"tcp": {
"scheme": "tcp",
"protocol": "tcp",
"transport": "tcp",
"port": 5433,
"targetPort": 5432
}
}
},
"authdb": {
"type": "value.v0",
"connectionString": "{auth.connectionString};Database=100days_auth"
},
"authapi": {
"type": "project.v0",
"path": "../Auth.Api/Auth.Api.csproj",
"env": {
"OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EXCEPTION_LOG_ATTRIBUTES": "true",
"OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EVENT_LOG_ATTRIBUTES": "true",
"OTEL_DOTNET_EXPERIMENTAL_OTLP_RETRY": "in_memory",
"ASPNETCORE_FORWARDEDHEADERS_ENABLED": "true",
"HTTP_PORTS": "{authapi.bindings.http.targetPort}",
"ConnectionStrings__messaging": "{messaging.connectionString}",
"ConnectionStrings__secrets": "{secrets.connectionString}",
"ConnectionStrings__authdb": "{authdb.connectionString}"
},
"bindings": {
"http": {
"scheme": "http",
"protocol": "tcp",
"transport": "http"
},
"https": {
"scheme": "https",
"protocol": "tcp",
"transport": "http"
}
}
},
// the rest removed for brevity

This is what tools like Aspir8, azd, and others use to create container environments when you want to publish your application.