Dash, Shiny, or Streamlit? Exploring Python Dashboards with World Health Data
20 August 2025Lately, I’ve been diving into different ways to tell stories with data. In a previous post, I experimented with Tableau to build a dashboard showcasing book data. Tableau is a fantastic tool, but I quickly ran into its limits when I wanted more flexibility. On the other end of the spectrum, I’ve spent plenty of time with Python libraries like Matplotlib and Seaborn, which are great for static visualizations, but not so great when stakeholders want to interact with the data.
That’s what led me to discover Dash and Plotly. With them, I was able to build a fully interactive, highly customizable dashboard in Python. It worked beautifully, but it also opened up a bigger question: what other tools are out there that could do the same job?
To find out, I decided to test three different Python-based frameworks for interactive dashboards: Dash, Shiny (via Posit), and Streamlit. I asked ChatGPT to draft a project specification for a simple app that could be created with each, and I sketched a layout to see just how easy (or not) each framework made it to customize the look and feel.
What I learned pretty quickly is that no single framework is perfect. Each has its own sweet spots and frustrations. In the next sections, I’ll walk through my experience with each one and share what I liked and didn’t like about each one.
Python Dash
Dash is used to create interactive dashboards purely using Python. It gives you a lot of control of the layout, look, and feel of the dashboard, which is great if you want to capture your specific vision. It was also built by Plotly, so it is perfect for using interactive Plotly visualizations.
You can explore the full Dash version of the World Health Data dashboard here.

Dash has a very simple layout by default with lots of room for customization.
Where This Framework Shines:
- Using Dash’s callback system, it's easy to isolate updates to only the affected visualizations, resulting in faster dashboard updates.
- It was the most flexible of the three frameworks, though that same flexibility results in higher code complexity.
- The framework is built on Plotly, so you get access to beautiful, interactive charts right out of the box.
- It’s highly customizable, so it is great for production-grade apps where layout and performance matter.
Drawbacks to Consider:
- There is a steeper learning curve compared to Streamlit and Shiny.
- There is no default loading indicator, so if updates take a few seconds, it can leave users wondering if anything is happening if you don’t add a custom spinner.
- The code is more verbose than Streamlit and Shiny, meaning more code is needed to create the same application.
Streamlit
Streamlit is all about speed and simplicity. It is perfect for when you want to spin up an interactive dashboard with just a few lines of Python code. It’s less about custom layouts and visuals, and more about getting something up and running quickly which makes it perfect for when you want to show off your data without too much fuss about design.
Explore the Streamlit version of the World Health Dashboard here.

Streamlit provides several settings for the dashboard viewer to customize their experience.
Where This Framework Shines:
- It's quick and easy to get started. Just a few lines of Python code can spin up an app.
- The framework provides default display options that allow the user to choose their viewing experience.
- The syntax is relatively simple with no need to think about callbacks or front-end concepts.
- It’s easy to share the apps with others using Streamlit Cloud.
Drawbacks to Consider:
- It has less flexibility in layout and design compared to Dash.
- The dashboard is not as efficient with large datasets or heavy computations without additional caching or optimization.
- Interactivity is more limited. Customizing beyond what is offered by Streamlit can be tricky.
Shiny
Shiny is a framework that is likely familiar to many R users and is now available using Python as well. The idea is simple: write a little code to produce a fully interactive web app that reacts to your data. It is very approachable and can be a great option, especially if you are already familiar with Shiny in R but want to use the Python ecosystem.
Explore the Shiny World Health Dashboard here.

Shiny uses a card display for a clean dashboard layout.
Where This Framework Shines:
- The framework comes with a built-in starter app that makes it easy to get up and running, especially if you are new to using Shiny.
- The clean default UI elements, like card displays, make apps look polished without much effort.
- Similar to Streamlit, it requires very little code to create a clean, functional app.
Drawbacks to Consider:
- The documentation can be confusing, especially because there are two different APIs: Shiny Core and Shiny Express. You have to pick one and stick with it, and finding the right docs can be tricky.
- The framework is still relatively new in Python, so some features are less mature than their R counterpart.
- I found debugging using AI assistants difficult, with it often suggesting nonexistent functions or components.
Conclusion
Overall, there’s no single “best” choice for dashboards; Each framework has its strengths and trade-offs. Personally, I’ll likely reach for Streamlit when I want to quickly spin up interactive visualizations, and Dash when I need more flexibility or customization.