In this tutorial, we'll build a coffee brewing simulation that shows animated spinners while work happens. By the end, you'll know how to display status messages, update them as work progresses, and customize the spinner style.
What We're Building
Here's what our coffee brewing simulation will look like:
Prerequisites
- .NET 6.0 or later
- Basic C# knowledge
- Completion of the Getting Started tutorial
- 1
Show a Basic Spinner
Let's start by showing a spinner while our "coffee grinder" runs. The
Status()method displays an animated spinner with a message:AnsiConsole.Status() .Start("Grinding beans...", ctx => { // Simulate grinding Thread.Sleep(3000); }); AnsiConsole.MarkupLine("[green]Done![/]");Run the code:
dotnet runAn animated spinner appears next to "Grinding beans..." that runs for a few seconds, then "Done!" appears.
The spinner animates automatically - Spectre.Console handles the animation loop for you. Just put your work inside the callback.
Your first status spinner.
- 2
Update the Status Text
Real tasks have multiple stages. Let's update the status message as our coffee progresses through grinding, brewing, and pouring:
AnsiConsole.Status() .Start("Grinding beans...", ctx => { Thread.Sleep(1500); ctx.Status("Brewing coffee..."); Thread.Sleep(2000); ctx.Status("Pouring into cup..."); Thread.Sleep(1000); }); AnsiConsole.MarkupLine("[green]Coffee is ready![/]");Run it:
dotnet runThe message changes from "Grinding beans..." to "Brewing coffee..." to "Pouring into cup..." - all while the spinner keeps animating.
We use
ctx.Status()to change the message. Thectxparameter gives you control over the status display while it's running.Your status now reflects what's actually happening.
- 3
Try Different Spinners
Spectre.Console includes many spinner styles. Let's try a few to see the difference:
// Calm and steady AnsiConsole.Status() .Spinner(Spinner.Known.Dots) .Start("Grinding beans...", ctx => { Thread.Sleep(2000); }); // Energetic AnsiConsole.Status() .Spinner(Spinner.Known.Star) .SpinnerStyle(Style.Parse("yellow")) .Start("Brewing coffee...", ctx => { Thread.Sleep(2000); }); AnsiConsole.MarkupLine("[green]Done![/]");Run it:
dotnet runTwo different spinner animations appear - the smooth
Dotsspinner for grinding, then the livelyStarspinner (in yellow) for brewing..Spinner()sets the animation style while.SpinnerStyle()sets the color. Match the spinner to your app's personality.You can now customize the look and feel of your spinners.
- 4
Complete Coffee Brew
Let's put it all together into a complete brewing experience that changes both the message and spinner style at each stage:
// Error: Symbol not found: M:Spectre.Docs.Examples.SpectreConsole.Tutorials.StatusSpinnersTutorial.ShowCompleteCoffeeBrew for 'M:Spectre.Docs.Examples.SpectreConsole.Tutorials.StatusSpinnersTutorial.ShowCompleteCoffeeBrew'Run the complete application:
dotnet run"Time for coffee!" appears, followed by an animated brewing sequence: yellow dots while grinding, blue stars while brewing, and a green arc while pouring - then the final success message.
Both spinner and color change using
ctx.Spinner()andctx.SpinnerStyle(), creating a dynamic, engaging experience.A polished status display with some personality.
Congratulations!
You've created a coffee brewing simulation that demonstrates all the core status features. Your application shows animated spinners, updates messages as work progresses, and customizes the spinner style to match each stage.
Add these spinners to file uploads, API calls, database queries, build processes - anywhere users wait for work to complete.
Next Steps
- Show Progress Bars - Track multiple operations with progress bars
- Status Display - Explore async operations, return values, and manual refresh
- Spinner Styles Reference - See all available spinner styles
- Reference not found: console-explanation-async-patterns - Best practices for async operations