Skip to content

Instantly share code, notes, and snippets.

@dj-nitehawk
Last active June 11, 2025 21:02
Show Gist options
  • Save dj-nitehawk/c7052f01f3f650e67fb6782c84d3b5f0 to your computer and use it in GitHub Desktop.
Save dj-nitehawk/c7052f01f3f650e67fb6782c84d3b5f0 to your computer and use it in GitHub Desktop.
API Visualization with Scalar
using FastEndpoints.Swagger;
using Scalar.AspNetCore; //dotnet add package Scalar.AspNetCore
var bld = WebApplication.CreateBuilder(args);
bld.Services
.AddFastEndpoints()
.SwaggerDocument(); //define a swagger doc - v1 by default
var app = bld.Build();
app.UseFastEndpoints(); //must come before the UseOpenApi() call
if (app.Environment.IsDevelopment())
{
//scalar by default looks for the swagger json file here:
app.UseOpenApi(c => c.Path = "/openapi/{documentName}.json");
app.MapScalarApiReference();
}
app.Run();
//scalar ui can be accessed at: http://localhost:{port}/scalar/v1
@theilgaz
Copy link

theilgaz commented Mar 5, 2025

Thanks, @dj-nitehawk! I think it's a good time to upgrade the FastEndpoints documentation and mention Scalar UI.

@dj-nitehawk
Copy link
Author

I create another alternative. Example

don't think that's gonna work: FastEndpoints/FastEndpoints#906 (comment)

@matthewj-dev
Copy link

matthewj-dev commented Jun 11, 2025

So I have discovered that if you want the document name to be different, you must specify the document name in the MapScalarApiReference options. This is seemingly because Scalar defaults to "v1". Please let me know if there is a smoother way to do this.

Example:

const string openApiDocName = "my-api-v1";

app.UseOpenApi(options =>
{
  options.Path = "/openapi/{documentName}.json";
});
app.MapScalarApiReference(
  "/api-reference",
  options => options
             .WithTheme(ScalarTheme.Kepler)
             .AddDocument("v1", "My API v1", $"/openapi/{openApiDocName}.json"));

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment